|
|
|
|
|
by MangoToupe
376 days ago
|
|
I don't want to disagree too strongly with use of the term "systems language" as my career is not tied to it, but I do think we should reevaluate it. "Systems" programming is in many ways a cultural term and not a technical one. It implies something about scale and reliability that is actually quite hard to tie to specific qualities of languages. In some sense, go is very much a systems language because it allows operating at high scale and high reliability. But in another sense, it is very unsuitable for "systems" work in the sense that you can't (trivially) swap out a kernel written in C for one written in go, although I suppose you could bolt manual memory primitives to the side, remove a bunch of features and runtime, and get it to work. But at that point you're just writing C in go with basically no benefit (and probably great cost if you consider how much weaker the go compiler is compared to LLVM or GCC), so it seems rather silly. I worked in a "systems" lab as an undergraduate (basically, doing memory allocator research as an independent study) and my main workhorse was python because I was working with largely static data and then generating C. Is python a systems language? The idea is ridiculous. But I was definitely doing systems work. I think we need more flexibility in terms of how we view these cultural ties as inherent to the language as opposed to how it's wielded in context. Most of the time we can use a more specific term (eg "manually memory-managed", "C ABI linkable", "native", "reentrant", "able to use inline assembly", etc) with zero loss of meaning and great benefit in reducing arguing over terms. Hell, if scala native could take off, it could be a real competitor to C++ and Rust. Is oberon a systems language? How about lisp? People have definitely written entire operating systems in both. Things get really weird once you wander outside the mainstream. Is erlang in a switchboard a systems language? I would say it should be considered such despite looking wildly different than C in just about every manner. |
|
A systems language is one that not only allows direct low-level access to hardware, but it's well suited for it. It not only works without a runtime (or at least a very minimal one), but it is its main mode of operation.
Many languages can do many things. Some are more suited for writing systems, and we call those systems languages. That rules out Go, Lisp, etc, despite people having written systems in them.