Lisp for the Web is a familiarization tutorial for doing Web development with Common Lisp, written by Adam Peterson. It uses some portable, open source Lisp libraries to develop a simple but useful Web application (or, well, it would be useful if the subject matter were less silly — but that’s easily fixed and doesn’t require any coding expertise itself). Adam says, in a bit of foreshadowing about what he’ll do with the Web application developed in the course of the tutorial:
develop a small, embedded domain specific language tailored for my application,
extend the typical development cycle by modifying code in a running system and execute code during compilation,
and finally migrate from data structures in memory to persistent objects using a third party database.
I’ll do this in a live system transparent to the users of the application. Because Lisp is so high-level, I’ll be able to achieve everything in just around 70 lines of code.
He cheats a little, here — because it would surely require more than 70 lines of code if he wasn’t using libraries to do some of the heavy lifting — but that’s still probably pretty impressive to the average Java developer who has never used a high-level, dynamic language.
I haven’t read the whole thing, but what I have read is very clear, straightforward, and well-presented. In short, it looks great. In fact, it looks like exactly what I would like to have, if it used Scheme instead of Common Lisp.
See, the problem is that I’m working on learning Scheme right now — and using it, in turn, to (re)learn some Computer Science concepts. Part of that involves trying to work my way through the exercises in SICP. Anyway, the point is that I’d like to learn to do this sort of thing in Scheme instead of Lisp, to help with learning practical application of Scheme rather than just getting lost in the land of theory.
There are about three or four such Web development tutorials I’ve found for Scheme. Unfortunately, they all use a Web development framework that only works on PLT Scheme. Well, hell — I don’t want to have to change Scheme implementations every time I want to work on something in a new problem domain. Isn’t there something like this that uses portable Scheme libraries, rather than using something particular to a specific implementation?
I know why this kind of problem surfaces, of course. It’s because, in every Scheme version up through R5RS, there has never been a standardized module system for libraries. Every implementation of any RnRS such that
(<= n 5) uses its own idiosyncratic (and incompatible with others) module system, except in some cases of forks. R6RS specifies a standardized module system, but R6RS is relatively new and somewhat controversial, so it doesn’t have nearly the support amongst the old-school Scheme hackers that R5RS and previous versions did. Maybe R6RS will start accreting libraries of the sort that used to be implementation-specific in previous versions, given time, but for now I’m SOL, as far as I’ve been able to determine.
Bah, humbug. If you know of any exceptions to the “No Scheme Web Development Tutorials Use Implementation Nonspecific Tools” rule, please let me know. Otherwise, it’ll probably be a year at least before I get to learn to do Web development in Scheme, since I’ll have to figure it out from scratch (well, to some extent, borrow ideas from others’ code, but I have to learn to grok others’ code well enough to do so) if I don’t want to have yet another implementation of the same language installed on my damned laptop. I already have three of ’em (that I remember off the top of my head).