10 ms·
If somebody had found himself in Edinburgh in 1986 and bumped into a tall gentleman called Robin, who was a bit familiar with this new-fangled thing called comp
by mafribe 10y ago
If somebody had found himself in Edinburgh in 1986 and bumped into a tall gentleman called Robin, who was a bit familiar with this new-fangled thing called computers, and had asked Robin, what kind of programming language should one learn to use these computer thingies, what would Robin have said? Not sure, but maybe something along the lines of "well ... there are many interesting languages, and different languages are suitable for different purposes. But if you are interested, I'm dabbling in programming language design myself. Together with my students I've been developing a language that we call ML, maybe you find it interesting. With my young colleagues Mads and Robert, I'm writting a little book on ML, do you want to have a look at the draft?"
Maybe such a person would have chosen to learn ML as first programming language. If this person had then gone on to work in programming for 3 decades, and if you'd asked this person 30 years later, i.e. today, what's new in programming languages since ML, what might have been his answer?
Maybe something along the lines of: "To a good first approximation, there are three core novelties in mainstream sequential languages that are not in ML:
- Higher kinded types (Scala, Haskell).
- Monadic control of effects (Haskell).
- Affine types for unique ownership (Rust).
Could I be that somebody?
- catnaroek 10y agoHaskell isn't quite “mainstream”, so I'm taking the liberty to add innovations from other “not quite mainstream” languages: - Hygienic macros as a scalable tool for extending and redefining languages, and furthermore, making the extensions interoperable with each other (Racket). - Language support for building reliable massively distributed systems in spite of individual node failures (Erlang). - General-purpose programming with growable arrays, hash tables and no other data structures (okay, these ones are very mainstream).
- mafribe 10y agoGood points. ML originally had Lisp-like macros, not sure about hygiene. Note also that one doesn't always want hygiene in meta-programming, although it is nice to have the option of hygienic macro expansion. I explicitly restricted the comparison to languages for sequential computing. There has been a lot of novely in concurrent programming. Arrays and hash tables are data-structures that you can implement as libraries in ML, so I'd say that's not a language issue. Progress in data structures and algorithms has been considerable.
- catnaroek 10y ago> I explicitly restricted the comparison to languages for sequential computing. There has been a lot of novely in concurrent programming. Oops, yes, my bad! > Arrays and hash tables are data-structures that you can implement as libraries in ML, so I'd say that's not a language issue. Yes, but the point is that nowadays we have languages in which it's “convenient” to design entire large applications around nothing but arrays and data structures. Also, that one was snark. > Progress in data structures and algorithms has been considerable. In CS, yes. In everyday programming, regress in data structures and algorithms has also been considerable.