3 ms·
I think this an excellent article, and mostly agree with the author's somewhat controversial thesis. Broadly speaking, I have noticed that language features fa
by seertaak 10y ago
I think this an excellent article, and mostly agree with the author's somewhat controversial thesis.
Broadly speaking, I have noticed that language features fall into two categories. The first gives you some kind of new ability. For example, late binding allows polymorphism. On the other hand, the second category entails deliberate restrictions and hurdles imposed upon the programmer with the putative goal of reducing errors. An example of this category is the checked exception mechanism of e.g. Java.
For reasons I don't deign to fully understand, many programmers seem to be rather attracted to the features from the second category, whereas I myself am more attracted to features in the first category. Languages with a strong emphasis on the second category include Haskell and Rust.
My criticism of those languages is that they seem to neglect that language design almost always involves tradeoffs. This is because there exists a complexity budget -- related to the our ability to hold multiple pieces of information in our very imperfect brains. During my forays into Haskell -- which I tested on simple scripts in the hedge fund I was working -- I always was struck by the beauty and power of the language. That said, it was hard not to notice how concept-heavy even simple scripts were; scripts that would be absolutely trivial in other languages now involved tortuous use of monads within monads.
C++, the language I use for my current app (https://zenaud.io https://zenaud.io), is a bit of a Jekyll and Hyde language in this sense. In my opinion, it is telling that the category 1 feature that is templates was wildly successful. By contrast, the category 2 feature which is concepts appears to be struggling (although in fairness, the jury is still out [and anyone who has read the Design and Evolution of C++ knows that it's a brave man who bets against the language-design savvy of Bjarne Stroustroup]).
Last point: Rust seems to me a category 2 heavy language. For this reason, I'm steering clear. What I really want is C with templates, destructors, late-binding (but with value types a la Sean Parent), and operators, and very little of the rest of the crap you get in C++.
- AnimalMuppet 10y ago> What I really want is C with templates, destructors, late-binding (but with value types a la Sean Parent), and operators, and very little of the rest of the crap you get in C++. Then just use those parts of C++. It's explicitly intended that you can use just the parts you want. (Until you have to interface with someone else's code...)
- steveklabnik 10y agoRust may or may not be for you, but we definitely understand there's tradeoffs. I even wrote a blog post about it http://words.steveklabnik.com/the-language-strangeness-budget http://words.steveklabnik.com/the-language-strangeness-budge... There's a language you might like, but I can't _quite_ find it right now, gah. EDIT: Oh! Zig! https://github.com/andrewrk/zig https://github.com/andrewrk/zig
- seertaak 10y agoZig looks interesting -- thanks for the pointer!