Older blog entries for emk (starting at number 3)

ICFP2000 Contest

The 72-hour hacking run is now over (I'm wasn't a participant; just an observer). Bruce, andreas and igor wrote some utterly amazing code. The big suprise, though, was Gabor Greif, who magically produced an optimizing compiler for the input language. These guys are absolutely incredible.

Meta-Programming

(This is a big rant; you may want to skip it unless you're a language geek.)

General purpose programming languages are great. You aren't limited to any one problem domain, and you can build big, modular software without too much trouble.

Special purpose languages are also great, but at a price. Consider MatLab. You can write all sorts of signal processing code without breaking a sweat, but you'll quickly run out of gas if you stray outside the problem domain. (Same goes for Perl 4 and text processing.)

Common LISP tries to balance these two extremes. It's a general purpose programming language, but it also includes an extensive customization toolkit. You can define new control constructs for your problem domain, and bundle them into a library. In essence, you can embed your special-purpose language inside of an existing general-purpose language.

LISP has always been popular in the AI community, because every new theory requires a new programming language. But for a completely trivial example of meta-programming, you might want to look at this Dylan snippet for locking a POSIX mutex.

My Favorite Toy Language

I'm designing Yet Another Programming Language. This may take a few years to get right. :-) For the sake of discussion, I'll call it MFTL.

MFTL has three design goals, not all of which are entirely compatible:

  1. Scripting. MFTL should be a convenient, easy-to-learn scripting language, on par with Python or JavaScript. This means the language should adhere to modern C/Unix/Java naming conventions, and should be implemented as an embedable C library.
  2. Compilation. It should be realtively easy to write very-high-performance code in MFTL, and compile it (probably to C). Ideally, I'd like to match the performance of C for number-cruching, but even 0.75C would be a big win. (I've published some Dylan benchmarks which might be of interest; you can find code in the Gwydion CVS server.)
  3. Meta-Programming. Many popular scripting languages are specific to a single problem domain. But these specialized languages also tend to be whimpy and annoy serious programmers. I think that meta-programming might strike a nice balance here.

Dylan succeeds on points (2) and (3), but does a somewhat poor job on point (1). I think it's possible to do a really excellent job in all three categories.

Feedback

Wow! Several members of the Gwydion Dylan team are participating in the ICFP Programming Contest this year. They're cranking out 3D-rendering code at an impressive rate.

Unfortunately, my girlfriend leaves for college in a few days, so I can't participate in a 72-hour sleepless hacking run. I've offered to beat d2c's optimizer with a cluestick, if necessary, since nobody on the contest team will have time to figure out my documentation on high-speed collection types. (My code is basically a hack--it uses some hand-coded type substitutions instead of a fully general template model.)

Good luck to andreas, igor and Bruce!

Ugh. I'm taking a day off to change phase the hard way. So I've decided to kill time until the sun goes down. Potential time-killers: Laundry, cleaning and hacking on mod_virgule.

SQL in the config file? Ick.

Well, I'm working on the CustomDNS backend this afternoon. I'm trying to make it completely portable across different membership databases, preferably without requiring sysadmins to write any Java code. Maybe I can just put some table and column names into the config file.

(Will I run into trouble with crypted/non-crypted/MD5-hashed passwords? These all require different SQL code. Do I really have to put SQL code into my config file? Yuck.)

I always forget how much I like Java. Sun's politics are just awful, and some of the standard libraries are pretty silly, but there's something fundamentally sleek about the language itself. IMHO, a good language ought to be expressive, extensible, blindingly fast, and sleek. If nothing else, Java is sleek. :-)

(Is anyone working on a completely free implementation of J2EE, by the way?)

Long-winded philosophical stuff

welisc feels that Eiffel is sleeker than Java. I think we're using totally different criteria here. :-)

I hack on various parts of d2c, a compiler maintained by the Gwydion Dylan project. Now don't get me wrong--I like Dylan way better than I like Java. Dylan has closures, generic functions, multimethod dispatch, hygenic macros, and all sorts of other features that Java doesn't have.

From my (blatantly biased) perspective, Dylan is as almost as sexy as a language can get. But it's not sleek. Let me explain.

Dylan is tricky to optimize well (d2c gets 90% of C's performance for certain kinds of number crunching, but only with help from CMU's amazing optimizer code). Dylan doesn't have a well-defined notion of separate compilation. And Dylan has quite a few warty little features buried away in various places.

Dylan is a great language to hack in, but after doing some tricky optimizer debugging, I can safely say that Dylan is unnecessarily hard to implement.

Java, in comparison, is decades behind the state-of-the-art in language design. But it still provides garbage collection, separate compilation, dynamic class loading, introspection and a clean--but minimal--object model. And Java accomplishes all this and more without being especially hard to implement.

That's what I mean by "sleek". It's a term of admiration for compiler writers who understand Larry Wall's virtue of laziness. :-)

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!