Conversation

Replying to and
I followed development of Go from the announcement, and I'm very familiar. I made the mistake of choosing it for some projects and have written a fair bit in it. The language design cripples library design so much too, so despite a lot of great library design, they're not good.
1
3
Replying to and
Drop multiple return values and have proper tuples. Replace UTF-8 by convention with real UTF-8. Make pointers non-nullable and replace null with sum types (compiler can still use null). Remove switches, and provide pattern matching instead. Remove lots of more hard-wired stuff.
1
4
Replying to and
The issue is that I want a language with great libraries, tooling and a lot of backing behind it like Go, Rust and Kotlin. I usually want a high level language with garbage collection. Rust fits most of what I want for a low-level language, other than supporting unwinding at all.
1
1
Replying to and
It's the invisible control flow that I dislike. Not a fan of call/cc, exceptions, etc. I do like more structured approaches like coroutines, generators, async/await, etc. I like the *idea* behind Go of a simple language easy to read and understand but I don't think it succeeds.
1
2
It seriously lacks important tools to make code composable and reusable. I find it painful to write application code in it, and far more painful to make libraries because I care a lot about making high quality library APIs. It's awful being forced into casting / reflection.
1
Not a fan of how they did interfaces. I don't want the reflection / type assertions / casting at all. It's awful passing something as an interface to an API and not knowing it if only uses it via the interface, or figures out the type internally and maybe casts it. Not a fan.
1
1
It should really have type parameters with interfaces as type bounds and I don't like that they're implicitly defined based on naming. It also means you can't provide an interface in a library and implement it for the primitives and standard library types. So much boilerplate...
1
Interfaces as objects are fine but *please* no reflection. If there's going to be reflection, it should be via built-in interface like Any. They kinda have interface inheritance so it really feels almost like type classes but it's just wrong and awful. Also implicit == conflicts.
1
1
I feel like a lot of the design doesn't actually match what they want and are trying to achieve. I seriously doubt that they chose these things as thought out design compromises. Instead, they implemented some stuff that seemed reasonable, iterated on it a bit and then froze it.
1
Show replies