HACKER Q&A
📣 fuzztester

What less-popular systems programming language are you using?


Less popular or less commonly used ones.

By that, I mean, not including the usual suspects, such as C, C++, Rust and Go (I know the controversy about the last one being a systems programming language or not).

I'm asking this because I used C for both application programming and systems programming, early in my career, before I moved to using other languages such as Java and Python.

And of late, I've been wanting to get back to doing some systems programming, but preferably in a more modern language (than C) which is meant for that.


  👤 yellowapple Accepted Answer ✓
I've pretty much settled on Zig at this point, if only for how dead-simple it is to cross-compile for other hardware platforms. The process of compiling working code for oddball platforms (in my case the Nintendo 64) was way easier than I expected it to be.

The only downside is the stdlib being as fast-moving of a target as it is. Right now I've had to put a pin on getting panic stack traces to work on my N64 code because apparently the upcoming release changes a bunch of stuff around panic/stacktrace handling (and it's already changed quite a bit over the years even before these new changes).


👤 creakingstairs
I've been using Odin [1] for my hobby game development and I've been liking it a lot. Feels like a more ergonomic C.

Things I like:

- Vendor libraries like Raylib and MicroUI make it easy to get started

- I can pass around memory allocators and loggers implicitly using context, or explicitly if I need to.

- natively supports vector math and swizzling

- error handling with `or_else` and `or_return`

Things I don't like:

- Name spacing is a bit annoying. The convention is to prefix the procedures but I don't like how they look. It really isn't a big issue.

Have a quick read of the overview and if you are still interested, I highly recommand 'Understanding the Odin Programming Language' book by Karl Zylinski [2]

[1] https://odin-lang.org/docs/overview/

[2] https://odinbook.com/


👤 chris_armstrong
OCaml

The compiler is very fast, even over large codebases.

Mostly trying to bring AWS tooling to the platform[1], or experimenting with cross-compilation[2] using another less well known systems language, zig.

[1] https://github.com/chris-armstrong/smaws/ [2] https://github.com/chris-armstrong/opam-cross-lambda


👤 seanw444
My two recommendations are easily Nim and Zig.

If you want something that is essentially just a modernized C, go with Zig. The concept of compile-time programming having the same appearance as runtime programming is very cool in my opinion. My only major complaint at the moment is that duck typing is fairly prevalent. Sometimes function arguments are declared `anytype` and you occasionally have to dive down multiple function calls to figure out what's going on, though that's not too much of a hindrance in practice, in my experience.

My personal favorite language is Nim. Efficient, but simple, memory management (drawing from C++/Rust). You rarely have to think too hard about it, yet making fast programs is not complicated. You can stick to the stack when you want to. The flexibility at compile-time gives you great power (but it requires great responsibility -- easy to abuse in a bad way). The type system is awesome. The only downside for me is the tooling. The LSP needs much optimization, for example.


👤 kevlar700
Loving Ada without using exceptions or inheritance on embedded and desktop. Some love Ada full OOP tagged types. I love Ada procedural style with privacy and abstract data types. I wish Flutter was written in Ada but atleast Dart is better than JavaScript atleast for procedural code without it's oop boiler plate. You don't actually need OOP for widgets.

👤 mkovach
Free Pascal, but I am interested in Ada and will be learning it more this year. I love the readability of the syntax, and on the outside looking in, the community seems good.

I have also moved back hard to using TCL as my scripting language. I like it too much, and bouncing between Python, Go, and such for DevOps glue tires me out.

For systems, I love using plan9 (9front) to solve problems, which grounds me to C, awk, sed, and the rc shell.


👤 pjmlp
That would be mix of D, Object Pascal, Swift, Ada, C#, Java.

A few decades ago plenty of Oberon dialects.

As language geek, I randomly select languages when doing hobby coding.

Regarding Go's remark, even if I dislike Go's authors decisions, back in my day writing compilers, linkers, firmware, networking stacks, and OS services was considered systems programming.

Likewise .NET team has been making wonders catching up to what C# 1.0 should have been for low level code, given its Delphi linage.

Java, in the context of being whole Android userspace, including drivers, there is very little systems exposed in the NDK. Vulkan is one of the few things not exposed to Java land, and that is being fixed with WebGPU like API in an upcoming version.


👤 flohofwoe
C99 ;) ...compared to 'popular C' (which is essentially C89 plus some common extensions taken from early C++) C99's main improvements (designated initialization and compound literals) haven't really caught on yet even among many C programmers, but those features (IMHO) completely revolutionize the language, and especially library API design.

Also on a more serious note: I started some projects in Zig and even though most of my future projects will be built on a bedrock of C code, more and more of the top-level layers will happen in Zig.


👤 gw2
C#. While a popular language, it is criminally overlooked for high-performance programming. Obviously, you can't use it for embedded or kernel development. For other use cases though, it can almost reach the performance of C/C++/Rust when written with proper care.

👤 Froedlich
The only true "system programming" I've done was in Microsoft Macro Assembler, a product I grew to hate with a passion.

A non-answer, but tangentially relevant:

I once fiddled with Forth, but never actually accomplished anything with it.

Several OSs are written in Lisp; in some of them the difference between OS and application is a bit vague. At the time none of them were available to me to play with.

I discovered Oberon and fell in love. My first real programming language was Pascal, and Oberon is part of the same family. Oberon consisted of a compiler, operating system, user interface, application software, and tools, all self-hosted on Oberon. There was even an Oberon CPU at one time. But Oberon turned out to be just an academic curiosity, and wasn't available for any hardware I had access to anyway.


👤 gibsonf1
We have had a great experience using Common Lisp [1] for our causal space-time systems digital twin [2]

[1] http://sbcl.org/

[2] https://graphmetrix.com/trinpod-server


👤 lopatin
I started using Idris a few years ago because the idea is fascinating. Such as state machines in your type system, the size of a list being defined in the static type system, even if the list size changes over time (pretty mind blowing), etc..

But ultimately I realized that I’m not writing the type of software which requires such strict verification. If I was writing an internet protocol or something like that, I may reach for it again.


👤 deevus
I am currently contracted 3 days a week writing Zig. I can't say much because NDA, but I just love working with Zig almost every day. I think for the right projects, it is such a great choice for mission critical software.

You get the added benefit of being able to easily consume C libraries without much fuss. The fuss is in navigating the C APIs of decades old libraries that we all still depend on every day.


👤 sheepscreek
F#! I’m in love with the language. It is my defacto pick for most things these days. Very expressive AND strongly typed. Being a part of the .Net ecosystem is also a plus.

👤 giancarlostoro
Every now and then Freepascal with Lazarus but the same bug being in the IDE for ten years plus kind of annoys me. If I save a new project and I move any files around it does weird stuff, or if I rename a module.

Theres also D but finding libraries for whatever I want to work on proves problematic at times as well.


👤 Terr_
Using Elixir and Elm at my day job.

Coming from a more Python/Java/PHP/JS background, Elixir was a lot easier to pick up and doesn't frustrate me as much. Most of the remaining scary bits involve concurrency and process supervision trees.

Macros are powerful, but also easy to use in a way that makes everything hard to debug. For those unfamiliar with them, it's a bit like a function except any expressions you call it with are not evaluated first, but arrive as metadata that can be used to assemble and run new code.


👤 Rochus
My major system programming languages are C and C++, but I did some projects in Oberon (which turned out to be not particularly suited for systems programming), and then created a modified, better suited version of it called Oberon+ (https://github.com/rochus-keller/Oberon), which I e.g. used to create platform-independend versions of different Oberon System generations.

But Oberon+ is still too high-level for many system programming tasks. So I'm designing a new system programming language called Micron (for Micro Oberon, see https://github.com/micron-language/specification) which has the full power of C without its disadvantages. You can even use it for the OS boot sequence when there is no stack and no heap, but also for higher-level application development, due to its selectable language levels.


👤 pyjarrett
Ada

The open source tooling has significantly improved since I started using it in the last five years.


👤 Jtsummers
Not presently, but not long ago, Fortran and Ada. I still like Ada better than the alternatives, especially as it's changed this past couple decades. I find it hard to miss Fortran, though. I'd consider it for scientific computing and that's about it, which isn't my present domain.

👤 atiedebee
I recently dabbled in "hare" which was quite a nice experienced.

I liked how the language stayed pretty simple compared to other C-replacements. The standard library is also pretty nice. It is however an extremely niche language, but still quite capable


👤 morphle
Squeak[1], Cuis. Metacircular Smalltalk VM[2] written in itself. We sometimes call it SqueakNOS for 'Squeak no operating system needed'.

[1] https://ftp.squeak.org/docs/OOPSLA.Squeak.html

[2] https://tinlizzie.org/VPRIPapers/


👤 anta40
Pascal.

Sure these days not many folks write OS kernel in Pascal, but there are some, e.g: https://github.com/torokernel/torokernel

I once want to try Forth (perhaps there's a Unix clone in Forth?), but seems like most folks using it are embedded/hardware devs.


👤 titzer
These days I write nearly all my code in Virgil (https://github.com/titzer/virgil).

It has features like classes, first-class functions, tuples, ADTs, unboxing, and a little data layout language, some unsafe features, like support for generating and integrating new machine code, and can talk directly to kernels.


👤 xigoi
Nim, I love its “make simple things simple and complex things possible” philosophy.

👤 rganesan
zig is coming along quite nicely. If you've not heard about zig, take a look at https://ghostty.org/ (a terminal for Linux/Mac and Windows in future), https://tigerbeetle.com (a database for financial accounting) and http://bun.sh (a modern, faster alternative to nodejs).

👤 brigandish
I’ve replaced Ruby as the “glue” language on my machine with Crystal, being able to plop out a binary and not worry about the myriad things that can go wrong with needing the entire environment to be perfect, including reinstalling gems for every version etc is such a relief. Bundler is just a frustrating sticky plaster over that.

I’d like to give Zig and Nim a go, but Go and Elixir are probably next on the list, simply because I have unread books for them staring at me.


👤 ajdude
I almost exclusively work in Ada for my hobby projects these days; It's great for doing both high level and low level programming.

👤 docandrew
Ada for bigger projects, D for quick one-offs and more “scripty” work.

👤 baddate

👤 kazinator
I don't work in Seed7 by Thomas Mertes but it deserves to be better known.

https://en.wikipedia.org/wiki/Seed7

It has a SourceForge page that actually doesn't suck and you will not hate landing into, unlike almost anything else SourceForge:

https://seed7.sourceforge.net/

Though there is an old school SourceForge file area with tarballs, the project page also links to a GitHub repo.


👤 netbioserror
Nim. Fantastic choice for modern headless software. Simple obvious type system, preference for immutability and referential transparency. Dynamic collections are by default managed by hidden unique pointers on the stack. So the default RC isn't necessary unless explicitly invoked for a ref type.

Currently solo managing a 30k line data analysis application I built for my company. Easily fits in my head given the obvious pyramidal functional-like structure. Maybe two lines of memory semantics anywhere in the entire thing, and only one module that's OO with a constrained scope. Lots of static data files (style sheets, fonts) slurped up as const strings at compile time. Incredible performance. Invoked by our PHP server backend, so instead of doing parallel or async in the analysis, the server gets that through batch invocation.

Working stupid well for our product, plus I can easily compile binaries that run on ARM and RISC-V chips for our embedded team just by invoking the proper gcc backend.

Replaced an ailing and deliberately obfuscated 20 year old jumble of C and PHP designed to extort an IP settlement from my company. Did it in a year.


👤 kagevf
OK, here's a pretty niche blast from the past: the boo programming language. It ran on the CLR (.NET) and had syntax similar to python. I recall using it back around 2006 - 2008 because it offered scripting features for .NET on Windows.

https://boo-language.github.io/ "A scarily powerful language for .Net". I didn't use it for too long before switching to Iron Python.


👤 ptspts
I do systems programming in i386 (32-bit) assembly language with NASM.

For me it doesn't scale beyond a few dozen kilobytes (executable program file size) per program. For others (such as Chris Sawyer) assembly scales much better.


👤 qingcharles
If the support was still there I'd still be using VB.NET.

I've coded professionally in a dozen languages, including a lot of time in x86 assembler, C++ etc.

Still like VB.NET better than any other. To me, it was the most readable code.


👤 ChrisMarshallNY
I think that it depends on the system.

Firmware is probably still best done in C (sometimes, C++), mostly because so many SDKs, libraries, and toolkits are done in those languages. Also, there's decades of "prior art" in C. Lots of places to look for solutions.

I worked on a project, where we tried using a very "less-popular" language for firmware.

It didn't end well.

I'd say that being a "Systems Programmer" means that you are operating at a fairly "advanced" level, where the benefits of "safer" languages may be less of a factor, and the power of more "dangerous" languages is more attractive.

Of course, on HN, suggesting C or C++ is suggesting "less popular" languages...


👤 artemonster
Tried trying zig, but was baffled by all the allocator dance you need to do and asking nicely to access a list (catching potential exceptions?) Tried odin, but the tooling is very raw. Tried rust, didnt want to try to please borrow checker that distracts me from my thoughts.

Idk, if someone just reinvents clean C without the nonsense garbage with some modules and package manager this will be a huge win. Let me access my null pointers, let me leak memory, just get the hell out of my way and let me program and hold my hand only where I want it to be held - sane types that give me refactoring, code completion and code understanding, modules with imports. Let compiler give sane error messages instead of this cryptic c++ garbage. Is this too much to ask?


👤 eadmund
Common Lisp. It offers powerful abstractions and high speed. I’m happy with it.

👤 fuzztester
commenting after seeing multiple comments here, after about a day.

first of all, thanks, guys, to all who replied. that's a wealth of info to follow up on.

referring to the comments seen so far:

I considered mentioning (Free) Pascal, but thought of not doing it, because I thought it is nowadays too niche, even though it is one of my early programming language loves (forgetting that the title of my post says "less popular languages" :)

and I also didn't think of Ada at all, somehow, although have been interested in it, too, lately, and have been checking out websites and blogs about it, and also have been searching hn.algolia.com for posts about it.

so it was cool to see multiple mentions of Ada here, by people who like and use it.


👤 atemerev
D and Crystal always fascinate me. And if Go is a system language, Erlang and Common Lisp are even more so.

👤 purpleidea
Using the `mcl` DSL language in https://github.com/purpleidea/mgmt/

It's awesome. But I'm biased because I designed it.

You can't build anything, but you can build many things much more easily. Particularly distributed systems.


👤 namshe
I will put in a plug for Mercury: https://mercurylang.org/

👤 creshal
I like nim so far, but I have to admit I haven't done all that much with it yet.

👤 harry_ord
Perl is kinda less popular now. I use that at work. Used to write perl6/raku in my previous job, I loved the grammars made a nice way to try and Wirte an nginx configuration manager.

👤 unquietwiki
As the founder of r/altprog on Reddit (been following random languages for 12 years now), my favorite "alt" language is Nim. It feels like Python & Javascript had a baby that was C++. Wish it had lambda operators like C# and JS, but it does have the cool feature of defining your own language constructs.

Also, shoutouts to Zig, Crystal, and Ballerina: those are other interesting ones off the top of my head, that folks should look into.


👤 anonymoushn
I've been using Zig for nearly 4 years now. A lot of changes in that period were not great, but I haven't really wanted to use anything else.

👤 em-bee
i don't know if pike counts as a systems language, but i consider it an alternative to C, if only because it has good C integration so that you can easily include a module written in C. pikes syntax is also very close to C, which may be appealing to some (ironically that's an aspect i don't really care about myself)

if the question of go being a systems language is controversial, then pike is even more so. i would situate pike somewhere between python and go. pikes major drawback is that it doesn't produce standalone executables.

the real question i'd like to ask is, what actually is a systems language?


👤 mrweasel
I'm not very good at using it, but every now and then try to do a small project in Chicken Scheme. Mostly I'm unsuccessful, but I enjoy the language a lot and have a great time using it.

👤 hansvm
I've been using Zig for years, and for the last year I've been using it at work. I've coded professionally in all the usual languages, but Zig does what I want much more easily.

👤 keyle
Have a look at hare. It's got some interesting bits [1]

Also C3

[1] https://harelang.org

[2] https://c3-lang.org


👤 worthless-trash
Fuzztester here is asking about system languages. I see a lot of people suggesting things I'd consider non systems languages.

👤 whitehexagon
I'm looking forward to getting back to Zig soon, especially now that there is support for Asahi linux.

I like that for low level SoC stuff, there is now the packed struct, which makes register representation very nice to deal with, especially with the definable int types, although I'm often torn between a u1, bool and sometimes even a enum(u1) for certain flags. I tend to let the SoC documentation (naming convention) drive that decision.

Otherwise there is a lot of nice and simply designed language stuff in Zig that also takes me back to my C / asm days. My least fav. part is maybe multi-line string literals that look like comments. I prefer the kotlin approach there.

I'd like to find a non walled-garden Zig community if there are other Zig fans here, ie just a forum. Or tips on editor to use? since I am tired of electrons being burned needlessly, and almost feel like I need to VM these modern dev tools.


👤 nuudlman
Take a look at Pony https://www.ponylang.io/

👤 mirekrusin
MoonBit [0]

It's still being developed but on man the language is good.

You read its documentation and pretty much every-single-thing is right decision (from my PoV).

Beautiful language if you like OCaml, Rust. Primary target is wasm, but compiles to native as well.

[0] https://www.moonbitlang.com/


👤 dismalaf
Odin. It's just too easy and fun.

👤 dlivingston
Does anyone remember BlitzBasic / BlitzPlus / Blitz3D? They were my first programming languages. I loved how dead simple it was to spin up a DirectX-based 3D game or a GUI application. There was something very nice about a simple, performant, batteries-included programming environment.

👤 Nales
I am using Haxe which compiles to other languages (C++, JavaScript, PHP...). This is a nice language when you want to create a web application or a even a CLI.

If you have played video games by Shiro Games (Evoland, Dune Spice Wars) or Motion Twin (Dead Cells) or even Paper Please!, then you had been exposed to this language.


👤 markldevine
Raku, for scripting jobs. It is a huge language, done right imo. It has more "flow" phenomenon than any other language I've encountered (like playing a great video game).

Not write-only like its ancestor. So many language criticisms solved. A true pleasure.

Still in its function-first development phase but apparently near the end. AST rewrite is still underway, then the team will address performance.


👤 auntienomen
Cython. Writes like Python, runs like C. Strangely underappreciated.

👤 bragur
I’ve been using ReScript and ReasonML (derived from OCAML, originating from Jordan Walke) for the better part of 7 years now professionally instead of TypeScript/JavaScript and couldn’t be happier. Blissfully enjoying a fully sound type system with stronger type inference vs. TypeScript and without all the complex type jugglin, null hell and an insane compiler with good errors, enormous speed and output of optimized JS code. It does indeed have a learning curve (these days far less steep than it used to be) but the benefits are just so many in my eyes. At the same time TypeScript has come a long way but it still struggles in comparison and I never feel as safe when writing TypeScript.

One downside is, of course, far less adoption and libs usually will have to have ReScript bindings written for them but that's fairly straight-forward and not something I have to do very often.


👤 whateveracct
Haskell + copilot (from Nasa) and/or MicroHs when targeting embedded (like RPi Pico)

👤 tonis2
Trying to make a game with https://c3-lang.org/, quite happy so far.

👤 ghfhghg
F# and Haxe. Love both of those languages

👤 henning
I've written a non-trivial (5K SLOC) app in Zig and it's very nice.

👤 DASD
Chicken Scheme for personal projects.

👤 rubymamis
I’m considering Mojo.

👤 mxvanzant
Lately I've been using: https://janet-lang.org/ It's not a systems programming language, but it can be embedded in C.

https://jank-lang.org/ looks interesting to me --I have not tried it yet. I'm not sure if this language could qualify as a systems programming language. What do you think?


👤 Surac
Forth. Old but very versatile. wrote the runtime myself years ago in portabel c.

👤 jdougan
D language (Dlang). It is especially good if you are porting from C as the semantics are the same enough to rum a lot of code via copy and paste, or if not it will fail to compile.

👤 myko
I'm converting an old C codebase to Swift, though given Swift's non-support for mix-language targets I'm considering switching to Zig.

Unfortunately the Zig compiler crashes when building my project and I haven't looked into debugging the compiler to find out why. There's a lot of gnarly code in this project (based on dikumud from ~1989?) with many inexperienced hands touching it over the decades.


👤 bitwize
Ada and Scheme.

👤 nodramallama
I’ve been using Odin and really enjoying it lately. In my free time I’ve been using it for gamedev and for some Python interop at work

👤 noelwelsh
I've been writing some Scala Native recently. See https://github.com/creativescala/terminus/. It's a high-level language but you can still reach down and grub about in memory if necessary. I'm having fun.

👤 jlengrand
I still absolutely love my Elm. Never a programming language has made me as confident and joyful when writing code <3.

👤 julianeon
An interesting takeaway from this is that it looks like Rust has really fallen off, in terms of popularity. There was a time when it would've topped these lists (and yes I know you mentioned it - I mean people would've mentioned it anyway). It seems like Nim has claimed 100% of its mindshare.

👤 HHalvi
Lua: Picked it up when I was dabbling in building Games relying on Love2D which uses Lua as the underlying language.

CoffeeScript: Felt in love with CS as I wanted to rapid protypes with (now defunct) Framer Classic.

Smalltalk/Squeak/Vala are something I have wanted to dabble with for a while but haven't gotten around to.


👤 slevis
I am using Ada atm. Not a "modern" language but I believe it might have a great future :)

👤 standeven
The IEC 61131-3 languages, though 95% of my work is Structured Text. Anyone need a PLC programmed?

👤 deepsquirrelnet
Does Cython count? I’ve been trying to learn more advanced usage. It’s pretty small and reasonably familiar.

I also have messed around with nim a little bit. I like it, I’m just not sure it’s worth putting a lot of effort into.


👤 dfawcus
Playing with D, while reading up on Odin and the various Cyclone papers.

👤 srik
Elm. Gonna hold on to it for as long as possible because it’s fantastic for personal projects - drama free, functional, simple, typed and comes with batteries and great errors and tooling.

👤 cjj_swe
It hasn't been released yet, but I'm very excited for Carbon :)

👤 Peteragain
I've used c and java, and have recently been thinking about go. It's interesting that the comments here only mention go in the negative. Can someone give me the back story about go?

👤 rixed
I personally mix languages, using higher level languages for the structural work and calling C for the code or data structures that require it.

So a good FFI to C has always been an important requirement for me.


👤 johnisgood
Ada and Odin that I would consider less popular, rarely Forth.

👤 creer
Perl 6 / Raku. The swiss army chainsaw (Perl) raised to the power of the swiss army chainsaw. For its expressiveness in spite of some learning curve.

👤 delduca

👤 zerr
Haxe and Dart (without Flutter) are quite nice.

👤 Rounin
D. It's quite C-like, but more concise, has a richer standard library, garbage collection, threading, etc. etc.

👤 matej-almasi
Ada (safety critical stuff) in work. Not a great fan, but it has its passionate defenders.

👤 egberts1
Cobol, Vimscript/VimL and Ada

👤 glonq
I had a college prof who in his real job wrote -all the things- in Modula-2.

👤 moechofe
Rebol

👤 pyuser583
Fortran. Had to use it for some obscure projects a while back.

It’s still kicking.


👤 meta-level
Micropython of course

👤 yamapikarya
visual basic. i learned a lot from this language because i'm able to create a system from scratch without import a library.

👤 therealfiona
My team hates when I write POSIT shell.

👤 gallier2
D such a fantastic language.

👤 frizlab
Swift

👤 ztetranz
I've been learning Elixir just for fun. I wish I was using it in my day job.

👤 sim7c00
what do you understand as 'systems programming'?

there are people making operating systems for AMD64 in Pascal etc.... so there's plenty of choices, odd and even ones.

some examples of different interpretations of 'systems programming'.

low level systems code - like interacting with devices directly on bare metal. (mmio/io etc.)

kernel code - like writing a new subsystem in linux, which uses other drivers.

high-level systems - like game engines, automation frameworks, other high performance oriented systems-with-lot-of-subsystems?

These different domains, on different targets, might have more or less plausible options for you to try.


👤 billwear
(kebab-use-elisp)

👤 uwagar
tcl

👤 cisrockandroll
RPG

👤 greenheadedduck
Python.

👤 neonsunset
C#, to match the performance of reference implementations in C and Rust, and completely crush the performance of those in Go :)

👤 inetknght
> Less popular

Bash.

> I used C for both application programming and systems programming

Gross. Learn C++, it's better than C in every way! shotsfired.jpg

> I've been wanting to get back to doing some systems programming, but preferably in a more modern language (than C) which is meant for that.

Use C++ then. Or if you're a hater and/or don't know how to keep footguns pointed away from your legs, use Rust.

> less commonly used ones

but tbqh why not Xojo?