Most active commenters
  • ants_everywhere(6)
  • kragen(6)

←back to thread

Go is still not good

(blog.habets.se)
644 points ustad | 16 comments | | HN request time: 0.001s | source | bottom
Show context
blixt ◴[] No.44983245[source]
I've been using Go more or less in every full-time job I've had since pre-1.0. It's simple for people on the team to pick up the basics, it generally chugs along (I'm rarely worried about updating to latest version of Go), it has most useful things built in, it compiles fast. Concurrency is tricky but if you spend some time with it, it's nice to express data flow in Go. The type system is most of the time very convenient, if sometimes a bit verbose. Just all-around a trusty tool in the belt.

But I can't help but agree with a lot of points in this article. Go was designed by some old-school folks that maybe stuck a bit too hard to their principles, losing sight of the practical conveniences. That said, it's a _feeling_ I have, and maybe Go would be much worse if it had solved all these quirks. To be fair, I see more leniency in fixing quirks in the last few years, like at some point I didn't think we'd ever see generics, or custom iterators, etc.

The points about RAM and portability seem mostly like personal grievances though. If it was better, that would be nice, of course. But the GC in Go is very unlikely to cause issues in most programs even at very large scale, and it's not that hard to debug. And Go runs on most platforms anyone could ever wish to ship their software on.

But yeah the whole error / nil situation still bothers me. I find myself wishing for Result[Ok, Err] and Optional[T] quite often.

replies(18): >>44983384 #>>44983427 #>>44983465 #>>44983479 #>>44983531 #>>44983616 #>>44983802 #>>44983872 #>>44984433 #>>44985251 #>>44985721 #>>44985839 #>>44986166 #>>44987302 #>>44987396 #>>45002271 #>>45002492 #>>45018751 #
xyzzyz ◴[] No.44983427[source]
Go was designed by some old-school folks that maybe stuck a bit too hard to their principles, losing sight of the practical conveniences.

I'd say that it's entirely the other way around: they stuck to the practical convenience of solving the problem that they had in front of them, quickly, instead of analyzing the problem from the first principles, and solving the problem correctly (or using a solution that was Not Invented Here).

Go's filesystem API is the perfect example. You need to open files? Great, we'll create

  func Open(name string) (*File, error)
function, you can open files now, done. What if the file name is not valid UTF-8, though? Who cares, hasn't happen to me in the first 5 years I used Go.
replies(10): >>44983477 #>>44983490 #>>44983605 #>>44984231 #>>44984419 #>>44985099 #>>44985582 #>>44985985 #>>44988513 #>>44993106 #
1. ants_everywhere ◴[] No.44983605[source]
> they stuck to the practical convenience of solving the problem that they had in front of them, quickly, instead of analyzing the problem from the first principles, and solving the problem correctly (or using a solution that was Not Invented Here).

I've said this before, but much of Go's design looks like it's imitating the C++ style at Google. The comments where I see people saying they like something about Go it's often an idiom that showed up first in the C++ macros or tooling.

I used to check this before I left Google, and I'm sure it's becoming less true over time. But to me it looks like the idea of Go was basically "what if we created a Python-like compiled language that was easier to onboard than C++ but which still had our C++ ergonomics?"

replies(1): >>44985054 #
2. shrubble ◴[] No.44985054[source]
Didn’t Go come out of a language that was written for Plan9, thus pre-dating Rob Pike’s work at Google?
replies(3): >>44986189 #>>44988909 #>>44995002 #
3. ants_everywhere ◴[] No.44986189[source]
not that I recall but I may not be recalling correctly.

But certainly, anyone will bring their previous experience to the project, so there must be some Plan9 influence in there somewhere

replies(1): >>44988915 #
4. kragen ◴[] No.44988909[source]
Yes, Golang is superficially almost identical to Pike's Newsqueak.
replies(1): >>44995003 #
5. kragen ◴[] No.44988915{3}[source]
They were literally using the Plan9 C compiler and linker.
replies(1): >>44990567 #
6. ants_everywhere ◴[] No.44990567{4}[source]
Yes I'm aware
replies(1): >>44991954 #
7. kragen ◴[] No.44991954{5}[source]
Literally building the project out of the Plan 9 source code is very far from "bring[ing] their previous experience to the project, (...) some Plan9 influence in there somewhere"
replies(1): >>44992362 #
8. ants_everywhere ◴[] No.44992362{6}[source]
It's a C compiler. Is your point that Go is influenced by C? ...
replies(2): >>44992408 #>>44992897 #
9. kragen ◴[] No.44992408{7}[source]
I think you should upgrade to a less badly quantized neural network model.
replies(1): >>44992490 #
10. ants_everywhere ◴[] No.44992490{8}[source]
I don't see why you've been continually replying so impolitely. I've tried to give you the benefit of the doubt, but I see I've just wasted my time.
replies(1): >>44992605 #
11. kragen ◴[] No.44992605{9}[source]
Certainly isn't what it looks like to me.
replies(1): >>44992662 #
12. ants_everywhere ◴[] No.44992662{10}[source]
okay well. good luck getting angry at people on the internet or whatever else you do
13. tom_m ◴[] No.44992897{7}[source]
They started there, but it now is compiled by go itself.
14. pjmlp ◴[] No.44995002[source]
Kind of, Limbo, written for Inferno, taking into consideration what made Alef's design for Plan 9 a failure, like not having garbage collection.
15. pjmlp ◴[] No.44995003{3}[source]
More like Limbo and Alef.
replies(1): >>44995939 #
16. kragen ◴[] No.44995939{4}[source]
Agreed.