I was personally a little off-put by Go. Some things just
felt a little odd to me, after an admittedly small amount of time with the language (implemented a trivial app with it to play around).
That said, I did quite like some aspects of it: goroutines, channels, functions can be added to structs.
I am hoping that rust makes it out of the lab at some point.
My biggest annoyance with Go is that Google, a search company, gave their language a completely un-Google-able name. I'm pretty sure the term "Go" invokes special handling.
I don't have a lot of experience in Go either (I'm writing my bot for the AI challenge in Go), but so far I've been very happy with it. What did you feel was odd?
I'm not the OP, but it felt like Go was coming from a culture a little bit different from the mainstream programming culture. The guys who made Go have worked together at Bell labs for year on stuff like Plan 9 and to me it seems that they lost touch with the rest of the world.
> The guys who made Go have worked together at Bell labs for year on stuff like Plan 9 and to me it seems that they lost touch with the rest of the world.
Before they worked on Plan 9 they created Unix, that the *nix world lost its way from its simple, small and beautiful roots is clearly something that still pains them greatly.
I would not say that they lost touch with the rest of the world, but that the rest of the world lost touch with them, which has been a great loss.
From piecing together the history I think it's clear that the real magic came from Ritchie. I doubt that Pike and Thompson in particular were ever in touch with the rest of the world.
Things like variable declarations matching the look of how variables are used ('inside out' parsing) are not simple and are responsible for the certain something that makes C work. And Unix was never beautiful, it was always a huge hack.
* The "exception handling" (or lack thereof). Defer, panic, and recover do provide an interesting means to achieve some similar behavior, but I ended up testing return values _a lot_, and all over the place. It felt very boilerplate and messy. Also, I found it odd that they claimed that the 'try-catch-finally idiom' was convoluted, then came up with defer, panic, and recover. Which calls code on function exit. I liked defer (great way to clean up allocations in reverse on the way out), but I did not find panic-recover as a convenient replacement for exception handling (nor does that seem to be the proper use-case for it anyway).
* new vs make. I don't see why they didn't just unify these in some way. Purity over pragmatism, perhaps.
* goto
* static compilation only (no shared libraries). I know static libraries are safer and sure do make deployment dreamy, but it would be nice to benefit from shared libraries if desired (easier to deploy security fixes, memory savings, etc).
That said, I did quite like some aspects of it: goroutines, channels, functions can be added to structs.
I am hoping that rust makes it out of the lab at some point.