Saturday, July 18, 2009

I need to stop reading about programming languages

Every once in a while, I start reading about the cool things going on with programming languages. I'm not one of those people who generally spends his days musing over tuples, continuations, and monads (I still have no idea what they are), but it I do find it interesting to take some time to think about the tools that I use on a constant basis on a more meta level.

There is a lot of cool stuff going on in programming languages now and pretty much since the beginning of time, i.e. January 1, 1970. How to handle concurrency is one of the biggest things facing the language world right now, but there are tons of other things, like JIT optimizations and experiments in language interoperability (such as Parrot).

One example of a solution to the "concurrency is hard and threads suck" problem is the Termite language. It is built on top of the Gambit Scheme compiler/interpreter and implements the message passing style of concurrency. Take a look at the paper describing Termite; it has some cool examples of what you can do with message passing stuff. Of course, this is all stuff that Erlang has been doing forever, but nobody seems to want to use Erlang for anything but telco systems, for whatever reason.

Of course, as an Emacs fan(atic), talk of a cool Lisp-family language immediately got me thinking about a replacement for the desperately-outdated Emacs Lisp. That lead me to a proposed plan for replacing Emacs Lisp with Scheme... from 1996. It's been more than a decade, and as far as I can tell, there has been nearly zero progress in actually making that happen. The plan makes it sound like it would be relatively easy to do (barring some incompatibilities between Scheme and Elisp), but there is not any hint of it being in a better state now than it was then.

This is not a criticism of the people working on it; there are a lot of brilliant Emacs hackers, and the fact that it hasn't happened already means that it is a really hard problem to solve. It is more of an example of why I need to avoid spending too much time reading about programming languages: it's depressing. In comparison to most everything else in the computing industry, languages seem to move at a positively glacial pace. I get all excited about how some cool asynchronous, message-passing, migratable dialect of Scheme could be used to make a concurrent and fast Emacs implementation; then I go back to PHP for my programming, which doesn't have namespaces, integrated packaging support, or even a decent threading system, and cry a little inside.

I blame you, Steve Yegge. You made me dream again.