I absolutely adore Go, finding it to be an imperfect language that nonetheless yields powerful, maintainable solutions. It is the ultimate duct-tape language, allowing one to build robust, performant systems using a massive library and fantastic C interop where necessary. Yet I wouldn't consider it for "low-level" code. Garbage collection alone invalidates it in that regards (religious war: reference counting beats GC every time), in the same way that C# and Java aren't credible low level languages.
"Rust (the Rick & Morty of programming languages - not a compliment)"
You mean something that is good to great but that "outsiders" or late adopters feel unexplainably threatened by and thus feel the need to attack it and its admirers?
I have only dabbled in Rust a few times. It feels very unintuitive and "write-only" from my 1000 foot, ignorant perspective. But I realize that's on me, and appreciate the focus and purpose of the language.
Rust today seems like a 2013 Tesla Model S. A couple of years ago it was the GM EV1: It used to be largely promise of a future to come with a loads of downsides, where today it's expensive to get started with, has a lot of incompatibilities, but it's superior to most alternatives. Tomorrow it and those like it will be the norm.
Rust is bloody great, the type system is so good.
My thesis code has a bunch of type conversions, I managed to emulate 'do' notation (Haskell) of sorts via the type system, but I can now also convert between types really easily. So bloody happy with it.
for example `n.unbind().bind()` can convert to a different type but `inside_n = n.unbind()` will let you work with the data inside the container `n` and after you are finished you can call `inside_n.bind()` to lift it back up to the container type.
>Linux isn't some kind of golden rule for all OSes on the galaxy.
Just about every operating system or major piece of system software is written in C, or limited C++ that is defacto C. Rust has a universe more of a likelihood to supplant those than Go or C#. And in fact is the only modern language making any headway in those cases. We're about two decades past people deploying the trite "Oh well that's just legacy inertia..." argument.
Google didn't write Fuchsia in Go, and hasn't used an iota of it in ChromeOS or Android. Microsoft uses somewhere approximating 0% .NET/C# code in the Windows core. Microsoft research made a toy .NET OS once that, unsurprisingly, went nowhere, just as you can find irrelevant toy example projects pushing the same premise, but they're dead ends.
>I am more than happy to do bare metal coding in C# (Meadow) and Go (TinyGo) without having to deal with Linux.
Yes, that is okay. There is little you could say on this that would be convincing given the every action of Microsoft, Google, and a world of proven, competent developers who are building so-called low-level systems that power the world. I concur that it would be a "waste of time".
After all, I am willing to waste some minutes with you.
Since IBM i, IBM z, Unisys ClearPath exist, and power the world of insurances and finance, this sentence is obviously false.
> Google didn't write Fuchsia in Go
Indeed, only the TCP/IP stack and volume management tooling, should be easy for you to find out about them.
Then there is this thing called gVisor, it is powering parts of the world that run on top of Google Kubernetes Engine.
Maybe something there for you to learn as well.
> Microsoft uses somewhere approximating 0% .NET/C# code in the Windows core
On the NT kernel, yes, yet good luck using Windows only with the kernel, without the remaining layers, many of which developed in a mix of COM and .NET.
A basic proof how much Windows systems programming experience you have.
Ah then there is this thing called IoT Edge runtime for intelligent devices, written in a mix of Rust and C#.
And before I forget, NVIDIA DRIVE AGX firmware is written in Ada/SPARK.
Not only did Google not write Fucshia in Go, they explicitly made it a forbidden language (listing a litany of reasons to exclude it and any other GC language -- the same reasons that apply to most "low-level" code), they set a goal to migrate any parts imported in. Maybe not the best example.
"A basic proof how much Windows systems programming experience you have."
Which programming language would one write "COM" in? I am so poorly skilled that I must have missed that language. I spent a decade+ writing Windows code, including exposing it through COM/COM+/DCOM, but apparently I was doing it wrong.
And while there is loads of C++ in what we consider the Windows platform, there is vanishingly little .NET.
The "Linux bubble" comment is especially weird. I spend my day in macOS, with most of my day being in XCode slinging Swift and GoLand spinning Go. Somehow I can evaluate the world without trying to mangle it to fit whatever my current primary skills are.
I don't really follow what you two are arguing about - I think it's pretty clear you can in theory write systems-level programs in most of those languages. However if the focus is on Operating Systems, there have been a few formally verified OS's written in Ada/Spark that are worth looking at (if I correctly read these posts as saying that's not possible).
The initial point is that Go or C# or Java aren't "system programming" suitable (which generally means low-level kernels and system services. Notepad on Windows isn't system programming), and it's unrealistic for it to be ranked highly on such a list, much less before Rust which is purpose built for this task.
Could someone use them for system programming? Sure they could. It would be the wrong tool but people makes loads of bad decisions.
The point about Linux and other operating system choices wasn't a rule, it was an observation that the rhetoric often plied on developer boards -- usually where developers want everything to be a nail to their skillset hammer -- has little correlation with the world. Nowhere did I exclude Ada or any other compiled, non-GCd (which Ada never uses when used for anything of any criticality) languages. Anything can make just as good of native code.
> Not only did Google not write Fucshia in Go, they explicitly made it a forbidden language
It's more correct to say that they attempted to write part of Fuchsia in Go, but the results performed so badly that they decided it would need to be rewritten in another language.
Just as Microsoft once made a good faith effort to rewrite Windows in C# (Longhorn) before that effort had to be abandoned.
Longhorn failed due to sabotage from Windows team due to the usual WinDev vs DevDiv politics, hence why since Vista all Longhorn ideas have been redone in COM, and COM followed by WinRT (COM + IInspectable + TLB replaced with .NET metadata).
Midori had no issues powering Asian Bing servers during its life in production.
> Not only did Google not write Fucshia in Go, they explicitly made it a forbidden language (listing a litany of reasons to exclude it and any other GC language -- the same reasons that apply to most "low-level" code), they set a goal to migrate any parts imported in. Maybe not the best example.
It helps when the Go guy on the team is no longer there to argue for it.
> Which programming language would one write "COM" in? ....
VB 6, Delphi, .NET, C++ Builder, C++/CX, C++ with MFC/ATL/WRL, whatever language speaks the COM ABI.
Yeah, maybe you were doing it wrong.
> The "Linux bubble" comment is especially weird. I spend my day in macOS, with most of my day being in XCode slinging Swift and GoLand spinning Go. Somehow I can evaluate the world without trying to mangle it to fit whatever my current primary skills are.
I think you misread my comment which was pointing out that COM is an interfacing standard, and has little to nothing to do with language choices or this conversation. Pointing out that there are multiple languages that can build to it isn't a counterpoint, but actually is the reason I made my comment. It's like saying you "developed the program in JSON over HTTP" in a conversation about programming languages.
Though regardless of that, Microsoft uses C++ for the overwhelming majority of a Windows install (this is trivial to verify). This is meaningless, having nothing to do with the root comment, but somehow this conversation was pulled there.
Windows programs can be written in just about anything. No one ever contested that. "Low-level" code, however, is seldom done in the GC languages. Seldom doesn't mean never, as stated over and over again, and Googling for random fringe counterexamples aren't counterpoints.
Given that I said "just about", ergo not all, I'm not quite sure what the point of your comment is. Pointing out that someone somewhere is using something else, even haughtily adding some ill-considered snark, doesn't seem particularly useful in that context.
It's a big industry. There are loads of exceptions and they still comprise a tiny minority.
"just about" is still a vast overestimate, but you're right - while I did my best to be polite while pointing out the extent to which the wall of ill-considered snark I was replying to was, at best, woefully underinformed, I readily admit that I did still fall somewhat short.
"while I did my best to be polite while pointing out the extent to which the wall of ill-considered snark I was replying to was, at best, woefully underinformed, I readily admit that I did still fall somewhat short."
I was being polite in not openly pointing out that your comment was trolling of absolutely no value or purpose, predicated entirely on your own misreading, but here we are.
I think the main point is that Go (while a very good language for lower level work) is presented as a better alternative to C++ or Rust because its "nicer" but a big reason it is nicer is the lack of memory management.
It's weird to crown Go as better when it is nicer simply by ignoring very low-level work then pretend that the argument of OS development is irrelevant.
A bit of an exaggeration, but its like saying HTML is a better "programming" language than javascript when creating documents, then ignore the fact HTML isn't actually programmable.
Small OS projects can be done in any language. Java has an OS built from it. Real Linux and systems projects can only be done with very low level languages.
Discord switched from Go to Rust because of slowness issues, I promise if its too slow for an app its too slow for OS.
If Go wants to be a very low level "systems everywhere" then get rid of the GC. Or alternatively stop ranking it above Rust and C++, when its apples to oranges.
> You mean something that is good to great but that "outsiders" or late adopters feel unexplainably threatened by and thus feel the need to attack it and its admirers?
Oh sure, the only explanation is that people feel threatened and insecure; the language is totally perfect and its admirers have never wasted anyone's time or demanded that other people blindly drop everything and start porting to their favorite language.
> Rust today seems like a 2013 Tesla Model S. A couple of years ago it was the GM EV1: It used to be largely promise of a future to come with a loads of downsides, where today it's expensive to get started with, has a lot of incompatibilities, but it's superior to most alternatives. Tomorrow it and those like it will be the norm.
The worst of the RIIR fan boys are intensely annoying, but they annoy the crap out of every rust developer I know just as much.
I've been through enough waves of asshole fan boys for different things now that I can mostly tune them out, but they're basically never the people actually getting things done so even on the days I can't tune them out I try not to let them reflect badly on the project.
Similarly, Rick and Morty is still funny to me even if I do basically have to block any vocal fan of it I encounter on twitter.
I wish I could stop these people. They accomplish the exact opposite of what they're trying to do, making people steer clear of Rust. Rust doesn't need that kind of help in scaring people off. As nice as the language is, it can take some time to warm up to when you're used to not having a compiler second-guess everything you're trying to do.
If it's any consolation, the repeated evidence I've seen that your response here is typical of basically everybody getting real work done in rust does help me to ignore the muppets.
I agree. I have so far stayed clear of Rust because of the apparent arrogance of the Rust community. It hasn’t quite reached the level of arrogance demonstrated by the Lisp community (yet) but it sure seems to want to be a contender.
"Rust (the Rick & Morty of programming languages - not a compliment)"
You mean something that is good to great but that "outsiders" or late adopters feel unexplainably threatened by and thus feel the need to attack it and its admirers?
I have only dabbled in Rust a few times. It feels very unintuitive and "write-only" from my 1000 foot, ignorant perspective. But I realize that's on me, and appreciate the focus and purpose of the language.
Rust today seems like a 2013 Tesla Model S. A couple of years ago it was the GM EV1: It used to be largely promise of a future to come with a loads of downsides, where today it's expensive to get started with, has a lot of incompatibilities, but it's superior to most alternatives. Tomorrow it and those like it will be the norm.
reply