The goal is to analyze your needs and pick the language best suited to your task. The goal is not to find one language that excels at everything.
The goal is to analyze your needs and pick the language best suited to your task. The goal is not to find one language that excels at everything.
I'm convinced the term "systems language" doesn't have a coherent meaning at this point. See:
https://zenhack.net/2018/07/14/three-funerals-in-the-name-of...
That doesn’t make it a bad language, but it’s not universally applicable either.
Nothing is universally applicable.
But yeah, I certainly wouldn't use it for hard real-time tasks. If you can't tolerate missing deadlines ever, there is a very short list of acceptable tools.
But (and correct me if I'm wrong; it's not my area) HFT doesn't strike me as hard real-time? See also a sibling comment that asks about Jane Street's OCaml use.
It's not like GC pauses are happening constantly; Go programs don't allocate that much, and a well tuned program can go a long time between collections. It likely is appropriate for many soft or firm real time systems. And you can shut the GC off if there are sections where GC really must not happen:
Last I looked (a while ago) it seemed like there wasn't quite enough control on the Go GC to do this effectively. It's very likely that's been fixed by now.
I guess C isn't universally applicable either.
Or in dozen of other GC enabled systems programming languages for that matter.
The difference being evolution, takes care of sorting that out, like in all anti-technology groups throughout mankind history.
> As a systems language, Go is intended to be used for developer applications like, for example, web servers.
Couldn't find a citation for CLI tools, but that should satisfy you (since people write web servers in Ruby and Node.js too).
That said, it's better to use terms that map better to a set of requirements, such as "hard-realtime" or "soft-realtime".
Regarding using Go as a real systems language (in the same meaning as C):
- gVisor hypervisor on Google Cloud and Linux sandbox on Chromebooks
- Android GPGPU debugger
- Fuchsia TCP/IP stack and volume management
- Baremetal TinyGo on Arduino Nano33 IoT, Adafruit Circuit Playground Express, BBC micro:bit among many others
- Coreboot firmware
That said, I think you'll find this SIMD-enhanced wc interesting: https://github.com/expr-fi/fastlwc/
It's really not solving the same problem.
As for having a low-memory footprint, 2 of the 4 implementations I mentioned (one single core, one multi-core) consume less memory than wc, and still run much faster.