St Patrick's Day Update on CROMA - An Arc-like Lisp
Friday, March 17, 2006
What could be more fitting on St Patrick's Day than an update on a
Lisp project that is the brainchild of an Irish lisper!
Back in January 2005, John Wiseman
posted some details on CROMA, a new Lisp that Patrick Collison, a
young lisper from Ireland, had developed:
"Croma's partly an attempt to correct everything I see wrong with CL/Scheme (1 namespace and continuations like Scheme, but all sorts of everday useful stuff snarfed from CL like proper lambda-list keywords and so on). It also sticks in various experimental things: 1st class macros (bad idea, I've since decided). I spent a while re-thinking assignment, and Croma uses a strange new idea of "overloading" the values of data objects: you can add in an additional function value (sort of like CL) that'll be used instead of its value in the _function_ position if it exists, to make possible assignment that's generalised and extendable but also idiomatic.When I was in the UK last year, Patrick came over to London for a get-together with me, Daniel Barlow, Donald Fisk, and Matthias Radestock. There were 4 Lisp implementors at the table that night (with me being the only one who hadn't developed a Lisp implementation!), so there were a lot of interesting discussions. Patrick had brought along his laptop, so he gave a demonstration of CROMA. I was really impressed with it and noted at the time that it seemed to embody a lot of the characteristics of Arc (the Lisp dialect that Paul Graham is/was working on). It was extremely easy to create web-based applications using CROMA and the language did look like a bit of a cross between Scheme and CL with first class macros, continuations and a single namespace.
All of this is geared towards an integrated continuation-based web development system. Using a fairly elaborate standard library, you can do stuff like (link "Click here" (fn (hdrs) (str 'you 'clicked "me")) in the middle of HTML pages. And, of course, it gets rid of HTTP transactional/statelessness cruft, as has been documented by Graham and Queinnec."
At the time, I asked Patrick what his plans were for CROMA. He indicated that he intended to make it open source and release it; however, the judging for the European Union's Young Scientist award was due to take place in Moscow later that year and he had "been cautioned by the organisers against saying too much 'till then". So, I made a mental note (the kind you subsequently forget about!) to follow up with him after the awards.
After arriving back from the UK, the next few months were a whirlwind of activity for me as I moved up to Vancouver, Canada and I did forget to follow up with Patrick. However, yesterday my memory was jogged by Heiko Wengler when he asked me whether I knew if CROMA had been released. A bit of googling revealed that Patrick Collison had indeed won a 2nd place award at the 17h European Union Contest for Young Scientists in Moscow in September, a contest in which 120 young scientists (aged 16-20) from 35 countries competed. There were three 1st prizes awarded, three 2nd prizes, and three 3rd prizes. Patrick won one of the 2nd place awards - quite an achievement in such a competitive group of interesting, cross-disciplinary projects! This recognition came on top of the Esat BT Young Scientist of the Year award that he had already won! Congratulations Patrick!
So, I fired off an email to Patrick to see how he's doing and what his plans are now for CROMA. Here is his reply (reproduced with permission with some minor edits and added links):
"Quite a lot happened with Croma in the interim. The University of Limerick, which is close enough to where I live, paid me to work on it for the summer, so I had the time to do quite a bit with it. I decided to rewrite a lot of the underlying structure in C (for performance and compatibility reasons---it's a lot easier to link with existing libraries this way than relying on inconsistent Lisp FFIs, though this will hopefully change). I also added and dropped a number of core features: first-class macros went, and something like Erlang-style multiprocessing came in. (Somewhat unfortunately, I heard about the Termite project about a month after I started this, which was a bit unfortunate, in that I hoped Croma would be the first Lisp to have it.) There's also some kinda neat things like serialisation of continuations, which means, from a web point of view, that these session objects can be stored in a database, and potentially invoked by a different server to that which created it.So, it looks like we'll be seeing a release of CROMA in the near future. I look forward to the release of CROMA and seeing what Patrick comes up with in the future!
Anyway, where does that leave Croma right now? Well, though there's still some rough edges, I think it's actually pretty close to being something releasable. Despite this, there are a few issues that need to be worked out, and I doubt I'll have time for that 'till after my summer exams (A Levels---long story, but I've ended up doing the British final exams a year early, so my free time these days is pretty much non-existent).
I'm adamant that Croma won't be vapourware however (god knows there's enough of that already), so, even if I'm not especially happy with its state come June/July, I'll release it regardless."

