3 ms·
I gotta say, reading this tells me exactly why Go struggles to evolve as a language. Go ahead, skimming the article tell me what go got wrong? Stumped? Yeah,
by cogman10 3y ago
I gotta say, reading this tells me exactly why Go struggles to evolve as a language.
Go ahead, skimming the article tell me what go got wrong? Stumped? Yeah, well I was too. That's because a lead designer can certainly write paragraphs on paragraphs of "Look at how amazing and kool we are for being so smart" but doesn't seem capable of writing more than a half a sentence of "we got this wrong".
I saw 2 things Pike believes go got wrong. Documentation and packaging. The rest is a lot of self congratulatory "Look at how smart we are and how dumb our critics are".
No language is perfect, every language has it's own weaknesses (and go has plenty). Yet for some reason Pike can't help but gush over how perfect it is. Even with the 2 faults listed, the documentation fault very much has an undertone of "our functions are so simple but the dumb users weren't smart enough to understand the amazingness of our elegant code and libraries."
> The key missing piece was examples of even the simplest functions. We thought that all you needed to do was say what something did; it took us too long to accept that showing how to use it was even more valuable.
Go is a language designed in the last 20 years that decided "You know what wasn't bad about C? Pointers and null". Yet the only part pike can really fault is "well, we didn't know how to do package management so we sort of messed that up".
He even goes so far as to talk about how interfaces are so good and generics are dumb even though go has the notorious `interface {}` used to try, in an type unsafe way, to pass around random objects. (But hey, pike hand waves that away with "the dumb community just isn't smart enough to accept the brilliance of our type system".)
How can a language evolve when the lead designer puts on blinders to the community raising faults? When a "what we got right, what we got wrong" post is filled with how awesome the language is with scant reference to what is wrong? Even just openly dismissing concerns with the language?
Contrast that with a lead language architect I really like, Brian Goetz (seriously, go watch his talks about evolving Java). His approach is nearly the polar opposite. It's "Ok, we've seen that a lot of people using java run into problem X, so we are going work hard to find language or library solutions which help improve things for the developers". They very rarely just dismiss problems and when they do it's more along the lines of "Well, we'd love to have it but ultimately there's not a good way we can think of to do this which is also backwards compatible."
And you can really see that in the way java has evolved from 8->21. From adopting a faster release process, a ton of new language features, and a LOT of active development into the most painful parts of dev work. Virtual threads is a shining example of this. Java now has go like concurrency even though it took several iterations and trials to bring that in, they worked hard to evolve the language in a way that fits perfectly. Valhalla is another great example of the language working hard to solve real problems. A 10 year project open to the community working to fundamentally redefine the JVM memory model because the one designed in the 90s doesn't fit with modern hardware.
But hey, if you like go, that's great. Just don't expect even an iota of evolution. Barring a change in leadership, generics is almost certainly the last new language feature (at least in this decade). A feature that landed primarily because of over a decade of articles and community screaming about how horrible the lack of generics impacts everything.
- booleandilemma 3y agoJust don't expect even an iota of evolution. Barring a change in leadership, generics is almost certainly the last new language feature (at least in this decade) Great! :)
- unscaled 3y agoTo be fair, Go pointers do not allow pointer arithmetic and unsafe casting. They are really not much different than Java's references. The main issue is null. And you can't even say Rob Pike is not deeply familiar with Tony Hoare, and yet the billion dollar mistake was very eagerly repeated.
- geodel 3y agoBrian is great in its own way and doesn't need to be compare to Pike at all. And he has to admit lot of problems as Java is doing things quite opposite of what was done decade or so back. Go leads are not doing this because Go is not changing course when they do they may admit more. Valhalla and Loom example you gave shows how important lightweight concurrency and memory layout of object is. Go had this from day 1. For faster release after Go 1.1 /1.2 they always had 6 month release schedule which Java implemented few years back. While Java is running impressive projects for last 10 years to add these features. Before Go came along Java never really published or committed to performance numbers for GC. It was always Here are few GCs, use whatever works for you. Now they give far more details after Go pushed for numbers. > Barring a change in leadership, generics is almost certainly the last new language feature Pike is already retired many years back, he is not in any official position in Go project. For sure, you like Java and I am working fine in Java like forever. But you seem to be losing all sense of perspective here.