New core languages and their sins

There are two great (in the sense of “immense, prominent”) system languages and two great application languages. The former two are C and C++, the latter two are Java and C#. These four languages underly the vast majority of software systems, they total to the vast majority of lines of code, they consume the vast majority of CPU cycles. They are all closely related; C++ being successful because of its closeness to C, Java being successful because of its closeness to C++, C# being successful because of its closeness to Java.

There are some more recent languages which are trying to complement or supplant the entrenched four. I’m familiar with a few of them and I’m interested how many of them try to solve the same problems or reproduce the same flaws as their antecedents.

D: The oldest of the new core languages, coming out the year after C#. It is less byzantine than C++ and allows lower-level work than Java. However, like both languages, it is enormous and deeply wedded to the conventions of the C family of languages.

Go: Sponsored by Google, co-created by nerd deity Rob Pike, and historically rooted in the cult classic OS Plan 9. It’s currently limited to the same kind of work as Java, with mandatory garbage collection. The SCM-based package system is already showing obvious flaws, and the heavy reliance on void types (interface{}) where most other modern languages would use generics is evidence of the limits of Go’s minimalist philosophy.

Rust: New, unstable, focusing on concurrency and a relatively complex type system. It’s a big language albeit not as big as C++ or D, and it has binary-level compatibility with C. People are even writing experimental kernels in it. At the moment, its biggest flaw is also its biggest sell — the type system with its ownership model feels like you’re spending a lot of time handholding the compiler.

Nimrod: The cleanest break from the C world of these four, being more closely related to Python than anything. The great sin of Nimrod, other than building the tower of Babel, is that its compiler is desperate for you to lead it by the nose with pragma upon pragma.