Ask HN: What less-popular systems programming language are you using?
What “systems programming language” means
- Several commenters note the term is fuzzy.
- Narrow view: kernel, drivers, embedded, minimal runtime, direct OS API access, static binaries.
- Broader view: anything compiling to native code with low-level control (FFI, memory layout, threading), even with GC.
- Some push back on listing languages like Python, Elixir, Elm, etc., as “systems,” but others describe using them successfully for userland “driver-like” tasks.
Traditional and legacy systems languages
- Fortran still used in scientific computing and historically for OSes, compilers, and real‑time systems; modern Fortran praised for ISO C bindings and evolution since F77.
- Ada is heavily praised: strong safety, good for both low‑ and high‑level code, used from 8‑bit MCUs to desktop/web; tooling has improved (Alire, GetAda, LLVM backend, UI and web frameworks). Ada jobs exist but are niche and demanding.
- Pascal / FreePascal used for OS kernels and Raspberry Pi OS (Ultibo); Lazarus IDE has long‑standing bugs.
- Assembly (NASM, fasm) still used for very low-level work but doesn’t scale well for large programs.
- Oberon and derivatives (Oberon+, Micron) appear as academically inspired systems languages but are niche.
“Better C” and modern native languages
- Zig, Nim, Odin, Hare, C3, D, Swift, Mojo, Carbon, MoonBit, Virgil mentioned as C replacements.
- Zig: loved for cross-compilation, C interop, and explicitness; complaints about allocator “dance” and unstable/slow‑moving stdlib.
- Nim: adored for performance, expressiveness, and ARC/ORC memory model; tooling (LSP, macros, imports) seen as rough.
- Odin: praised for simplicity, batteries‑included tooling, context‑based allocators; some concerns about creator attitude.
- D: liked for “Better C” mode, fast compilation, powerful templates, and GC that’s “good enough,” but ecosystem and guidance (e.g., “Effective D”) are thin.
Managed and higher-level languages in systems contexts
- C# repeatedly cited as underrated for high‑performance and even some embedded/OS‑like work (.NET Micro Framework, nanoFramework, experimental kernels). Heavy discussion of spans, ref structs, and avoiding allocations.
- Java, OCaml, Common Lisp, Erlang, F#, Haskell/Idris, Julia, Crystal, and others are used for tooling, high‑level services, or specialized domains; debate centers on GC, runtime size, and binary distribution.
- Several people mix high‑level languages with C via FFI, seeing good C interop as crucial.
Scripting, niche, and hobbyist languages
- Many mention Lua, Perl/Raku, Tcl, Chicken Scheme, Forth, Smalltalk/Squeak, Rebol, Pike, J, Mercury, Seed7, Janet/Jank, and others for glue code, experimentation, or embedded scripting.
- Perl, Raku, and Common Lisp inspire strong affection despite reputational or ecosystem issues.