Monday, December 25, 2006

Christmas Status Report

Things are proceeding slower than I would have liked for Alpha One. The good news is that almost all of the new features have been written, but I have not had the time to test and integrate them into the code base. The most painful problem has been with Mac OS X, which has some interesting idiosyncrasies in its dynamic library loader that have made the dynamic subsystems much more complicated to implement. While I appreciate Apple's efforts at breaking new ground with OS X, I really wish they would either clearly document workarounds for their little innovations or keep them out of the POSIX / GNU / C level of their API's. (In specific, the loading program cannot export symbols to be loaded by dynamic libraries loaded at run time. An intermediate shared library that contains these definitions must be used, despite Apple's claims of 100% compatibility with other dlopen/dlsym implementations.) This has forced a near total rewrite of the build system, which, for 1.0, will probably break the ability of waspc to produce standalone binaries. This isn't a terrible thing, since I've wanted to move to autoconf for a while; we have wasted far too much time on our own build system and I would like things like Canadian Cross and VPATH builds. The Sqlite3 subsystem was trivial to write, taking about a night to write and test. I hope this is a good indication of how easy it will be to write third party subsystems for Wasp. Quick, informal tests show it to be somewhat faster than the Python module I have been using, which is reassuring. Work on the Streams and Channels reform has also been a bit of a struggle. I have a fairly clear idea of where I want Channels and Streams to be -- easy to expand, easier to debug, and better performing. And the C files in the current source tree reflect the new Channels fairly well. The miserable part, as usual, is integrating these clean, neat abstractions with the OS.