Isaac Yager writes about programming languages, Haskell, FPGAs, embedded Rust, computational photography, and hardware projects like keyboards and audio meters.
HN links it for his critique of Go and his analysis of iPhone computational photography, with commenters discussing both the Go argument and the photo pipeline.
I might have taken the content of this article more seriously if it had been titled something like "Why Go Is Not Good for Embedded System Programming" since the original author of the article seems to have more experience in embedded system's domain[1].
Also, the article say "Go is a regression from other modern programming languages" and I find it amusing that a significant numbers of people here taking the article and its claim seriously when it is coming from a student[1] who just finished his 'Computer Programming' university course in Fall 2014[1] (one of the reason, other reason is mentioned in the next paragraph). Don't get me wrong here: I'm not saying that you can't say anything significant when you're a student; what I mean here is that one needs to come up with more detailed explanations and with many more examples which are valid for a wide range of scenarios and use-cases when you make a general statement about a programming language which has been created by some of the highly-respected experts in the field of programming language. The list of problems mentioned in the article are important but they're not very critical for the kind of the system development that Go language has been designed/developed for[2].
Since Go language has been developed for system programming, the term 'system programming' is not restricted to embedded system only (as few people have already mentioned it in different threads here) which are mostly limited to one component (or small…
> Go began with Robert Griesemer, Rob Pike, and Ken Thompson. “What should a modern programming language look like” (the story goes as they were waiting for some C++ to compile).
Cute. Nice to keep a dig[1] going. Since that horse has been kicked quite a few times over the years, how about those in the Go community address these language criticisms:
http://yager.io/programming/go.html
For specific examples from the aforementioned link:
The "correct" way to build generic data structures
in Go is to cast things to the top type and then
put them in the data structure. This is how Java
used to work, circa 2004.
And:
Go has the null pointer (nil). I consider it a
shame whenever a new language, tabula rasa,
chooses to re-implement this unnecessary
bug-inducing feature.
Of which the latter has been regretted by its inventor[2] for years.
1 - "[C++] certainly has its good points. But by and large I think it's a bad language." (source: https://en.wikiquote.org/wiki/Ken_Thompson)
2 - http://www.wisdomandwonder.com/link/2015/tony-hoare-sorry-for-inventing-the-null-pointer
You should ponder why Erlang or Haskell achieved a fraction of Go's adoption despite being on the market 20+ years longer.
Some people see languages as a bag of features (immutability! generic programming! laziness! operator overloading! algebraic types! hindley-miller type inference! pattern matching! exceptions! manual memory management!). See http://yager.io/programming/go.html for an example of that line of thinking.
Those people won't get Go.
Designing a language is not about cramming every feature you can think of. It's about making good trade offs.
A trade off is: you get something but you also loose something.
I use Go because it made the biggest number of good trade offs.
Or to put it differently: I program in Go because when writing code, it irritates me less than other languages.
If you want a longer explanation of that: http://commandcenter.blogspot.com/2012/06/less-is-exponentially-more.html
Saying that gear doesn't matter is like old fogey programmers saying that programming languages don't matter. A good programmer can wrangle code in anything reasonably practical. And I say that as one of those old fogey programmers.
I mean c'mon, look at Golang. It is not a good language[0][1]. And yet, folks built k8s with it, and many other things.
It's like that with photographic gear too. Just like the best camera is the one you have, the best language is the one that all your domain experts can use. And if they're good at knowledge and design, but shitty at programming, golang it will be.
But it's also worth noting that k8s was not written in C++. Tools matter.
[0] https://yager.io/programming/go.html
[1] https://xetera.dev/thoughts-on-go/
Thanks this video is just too funny. I was aware of the quirkiness of C++ but this is very insightful.
On the Go note, I like it but I think the target of Go is system programming with great concurrency support. More about Go here:
http://yager.io/programming/go.html
Rust seems to incorporate all of the academic research about programming languages and also moves towards memory safety and correctness, and that is a good start. See what happens in the next 10 years! :)
I did check out go. I was surprised to see that it had null, and aside from the emphasis on concurrency I didn't find anything new or interesting. This was recently posted here, and I findyself agreeing with most of the points (though I'm not quite as strongly in favor of pure functional programming as the author seems to be):
http://yager.io/programming/go.html