Earlier this week I attended SBCL's 10th Anniversary Workshop at Goldsmiths, University of London. It was great.

Monday started off with a status update from Nick Levine on his upcoming O'Reilly book called Lisp Outside the Box. He talked about the difficulties of fitting so much material in relatively few pages and gave us printed copies of one of the draft chapters. Everyone should go read the latest draft chapters and send Nick some feedback at his blog.

Later that morning, Martin Cracauer gave us a very juicy presentation about various technical details pertaining to ITA's usage of SBCL for their high-performance flight search engine. I scribbled down some notes:

Things like SBCL's optimized struct layout and slot access and bitfield operations provide for space- and speed-efficient memory representations.

They seemed quite happy about SBCL's fixnum efficient representation. (E.g., fixnum tags end in zeroes which among other things means some arithmetic can be performed directly with the CPU's native instructions without prior untagging.) I would expect other Lisps (besides CMUCL, obviously) to have similar characteristics but I've never actually checked.

SBCL's tremendously useful declaration semantics simultaneously provide important assertions when testing and high performance in production, e.g. when dealing with 32-bit arithmetic.

They use mmap() to directly use C-struct-like data from Lisp.

to directly use C-struct-like data from Lisp. Array bounds-checking is left enabled since disabling it is not worth the enourmous trouble one might get into otherwise.

GC performance is good but they use pre-allocation where usage is predictable. Earlier versions had a cons cache — which got a lot of laughs from the audience — which turned out to actually slow things down in SBCL for various reasons.

In summary, they seemed pretty happy with how things turned out with SBCL, after having used, IIUC, three other Lisp implementations in the past. In an unrelated note, I found it nice that they do automated performance regression tests with customer datasets and queries. I like that sort of stuff and I wish we had infrastructure to do this sort of thing with open-source CL libraries.

After a free lunch — the best kind of lunch — hacking and brainstorming started. It was interesting to learn that all of the windows in that building could be used as whiteboards (translucid boards?). In the afternoon some lightning talks took place. I didn't take notes at this point but I recall that Christophe Rhodes talked a little bit about his recent Unicode-related work, James Knight described his initial attempt to hook the high-level bits of SBCL's compiler into LLVM, Paul Khuong described his library for implementing lock-free algorithms, and Attila Lendvai and Levente Mészáros demoed their impressive DWIM web framework stuff.

We had dinner at a Turkish restaurant which was very good. Surprinsingly so, perhaps, because their entrance prominently displayed a “Fully Licensed” sign. Fun UK trivia: “off licensed” means an establishment may sell alcoholic drinks but they must be consumed elsewhere whereas a “fully licensed” establishment can both sell the drinks and, erm, harbour inebriates.

Hacking resumed tuesday morning and throughout the day, with some interruptions for more lightning talks. Rudi Schlatte gave us a quick intro to the magnificent org-mode, Attila and Levente showed us some nice pieces of software like the Stefil test framework, cl-rdbms, perec, and a partial evaluator. But, David Lichteblau won the gold medal of lightning talks by giving four or five talks about gencgc incremental allocation and dynamic-space relocation, his recent work on Hemlock (including a brand new Qt backend), interfacing with C++ (e.g., his own CommonQT), and some other stuff I lost track of. (See the workshop's website for more details.)

Afterwards there was some discussion about the future of SBCL. Among other things an official move to a git repository seems eminent, there was some discussion about using more of Launchpad's functionalities (e.g. for dealing with incoming patches), and the possibility of SBCL bundling some CL libraries was raised.

The day ended with everyone going to a local pub (fully licensed, I hope) where I had plenty of fun talking with Levente and Attila about life, the universe, and everything, pretty much. Levente gave us some nice math/logic puzzles to exercise our brains; it was a great evening.

Many thanks to Christophe Rhodes for organising this great workshop and to my employer for kindly sponsoring my participation and enabling my proud response to the question “What do you do?” — “I'm a Lisp programmer!” :-) I was happy to meet lots of people I regularly interact with on-line and/or whose Lisp code I have used or read at some point. Unfortunately I didn't get to chat with everyone but I hope we'll have future opportunities.

Looking forward to ELS 2010 already which, quite conveniently for me, will take place right here in Portugal with less freezing temperatures (London is rough!) and the right kind of electricity sockets and voltages.