Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Go succeeded because it compiles to native code, has good performance and an efficient standard lib - but in spite of being a terrible programming language. There are a great many programmers who cared about producing great software rather dwell on the quality of PLs, and for these people Go hit a particular sweet spot.

I have really tried to like Go, but the imperativeness is just something I struggled with. Even good Go code is littered with breaks, mid-function returns and imperative loops. For those who want cross-platform native code but find Rust too complicated, hopefully C# will fill the void once CoreRT ships.



I hear this comment made often. For some people like me, Go is simple, and that makes it a great programming language. I definitely wouldn't call it terrible!

Otherwise, a language is more than its feature set. A big part of what makes a language enjoyable is its culture as well. I think C# is a great language, but I prefer Go's culture much more.


> but I prefer Go's culture much more

To me, Go culture is very arrogant, so much in fact that it almost reminds me of some Lispers of old.

Unfortunately similar thing can be said about Rust. However, in Rust, most of the crap seems to be comming from zealous newcommers and a loud minority, while the leadership and people involved seem relatively humble (or at least not too arrogant). In Go, OTOH, the arrogance seems to be stemming all the way from the top, judging from some talks & blogs by Pike, Cheney et al. Pike in particular seems to me to be a very arrogant, unpleasant person. I respect him very much as an engineer, but I will never like the way he speaks, promotes Go and spreads FUD about other languages.


Hmm, I've never heard anyone else object to mid-function returns. Usually guard clauses are considered a good thing. What's your objection to them?


I'm increasingly used to everything (including entire function bodies) being expressions. It's very much a personal preference though.


Like GOTO it makes the execution harder to reason about as you could easily miss it. It doesn't bother me personally but I can sort of see an argument for it.


Avoiding early returns usually makes code harder to read. It's outdated advice which was meant for writing assembly.


It's not outdated, it depends on context. Several modern languages, including Rust, Swift, Scala, Kotlin, and F# are built around having expressions as constructs (if, match, try, etc. are all expressions). Once you have that powerful feature it makes sense to write code in a certain way to make use of that, and it ends up being clearer a lot of the time.


I actually think Go is a very good language. I don't measure languages on aesthetics, but team productivity and quality. Go has been unreasonably successful in making my team productive.

I tend not to care all that much about the language itself. What I care about is productivity and that I don't need to have a discussion about what language people would rather program in every 3-4 months. This is why I get suspicious when people say they are language enthusiasts. I leave it to the team to choose language, but it has to fit some minimum criteria and I don't want whining afterwards and I don't want a mishmash of languages "because it fit the domain better".


To expand on your first point, golang is popular because it has the Google brand behind it. The golang authors worked on a similar language before they were at Google and it didn't go anywhere


Mono is already a solution, no need to wait for CoreRT.

Java has AOT compilers available since around 2000, just not for free.

And there are plenty of other languages with AOT compilers to native code.


When does CoreRT ship?




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: