The Language Game
Those of you who know me well, may know of my aborted attempt at language design. While working on it, I hit what I call the \”language design singularity\” — a point at which you realize you\’re headed down the wrong path, and make that jump to the right one. I imagine a lot of would-be language designers hit the singularity. People get interested in design because they recognize the problems with the current system, and seek to improve the situation. At this point, their path begins to move closer to the singularity, eventually there is a jump, like when a metal rod slides close enough to a magnet, and you find yourself in a world where your problems don\’t exist.
For me, it happened like this …
Every language I had seriously worked with had problems that felt solvable to me. One was the fact that you have to type
Foo x = new Foo()
everywhere. Why did I have to tell it the name twice, couldn\’t the compiler figure that out? Another was metaprogramming; Java\’s lack of enums seemed like it just needed a simple text transformation in order to be added. Etc., etc., etc. The former led me to type inference and Haskell, the latter to Lisp and its macros. It didn\’t take long before I realized that trying to adopt these features into the Algol family was a waste of time: I crossed the singularity.
What\’s on the other side? Well, it\’s not as easy as saying \”functional programming\”. I mean, sure, that\’s here; it\’s a necessary but not sufficient condition. Part of it is the Lisp syntax, the ease of manipulation, the idea of pattern matching (not regexes), better models of concurrency, etc. The world of programming has really been a different place since I jumped.
So, have I given up language design? Not in the least. I\’m reading about concepts like rho- and pi-calculus, streching my brain before I take on the much more challenging task of improving a language on this side. This isn\’t the kind of brain stretching that happens when you learn J2EE; that\’s like the sides bulging from shoving too much in, this is like enlarging your capacity. Things aren\’t perfect over here, but the problems are ones you don\’t get to think about on the other side, because there are so many more trivial ones that need to be dealt with first.
I have ideas for a new language. And you can expect that it will be a Lisp. I remember before it happened … the syntax was something that prevented me from making the jump for a while. But it wasn\’t worse, just different, and it opened up so many more possibilities. The need for a new language seems much lower than before, maybe just because I haven\’t run to the boundaries of this set yet, but I have a feeling that could take longer than I have available.