[slightly edited from a private flame yesterday]
If you have ACM access to the PLOS 2006 proceedings, I recommend Jonathon Shapiro’s paper _Programming Language Challenges in System Codes_ (Why Systems Programmers Still Use C, and What To Do About It) — it doesn’t appear to be reprinted anywhere else, so I’ll snip a bit of it:
Systems Programming . . . [is] fundamentally about engineering rather than programming languages. In the 1980s . . . engineering considerations were required criteria for language and compiler design. By the time I left the PL community in 1990, respect for engineering and pragmatics was fast fading, and today it is all but gone. The concrete syntax of Standard ML and Haskell are every bit as bad as C++. It is a curious measure of the programming language community that nobody cares.
He gives some examples, notably a TCP stack in SML that, while a notable achievement, is at best 11 times slower than the native stack on the same architecture (and worst case performance is unbelievably miserable). He makes a point that going from a factor of 1.5 to 2 in performance is not negligible when this translates directly to the number of servers that you have to buy, power, cool and maintain.
Frankly, I’m sick of C (and the safe subsets of C++ that are basically sugared C), but it’s the only damned tool around that will do the job. Pick another language that you can reasonably implement an OS in, what are the choices? Oberon, Modula, extended Pascal . . . Ada, BLISS? These are all essentially the same animal with their semicolons in different places. Java, C#? No resources on the platform for these. LISP? Worse and worse.
On something new: I don’t have time to get a PhD in type systems. I need a debugger that works. I still need to write assembly language and really worry about the number of cycles involved in some operations. But I’m tired of writing bugs and races and want something lots *safer* than C, and everything out there now is mired in a decade of theory that doesn’t help systems programming at all; even if I spent the time to learn and move in with it, it wouldn’t help.
Shapiro’s solution (BitCC) is interesting. I won’t go into it here.
Someone I read recently had the idea of putting the whitespace and formatting into the grammar; like Python (say), but with no semantics (e.g., no indentation-equals-a-scope), only checking. At least you avoid “one-true-brace-style” wars that way. But this is the least of our problems.
Maybe if we took away these PL theorists’ Emacs and LaTeX packages for a while we’d get better results. Threaten to take away their fast TCP stacks and graphical interfaces. It’s time for the programming language community to do something for the systems programming people, something that actually works well on bare metal.