Last week I attended the SBCL 20th anniversary
workshop, held in Vienna, Austria. Here
are some rough impressions - I wish I had detailed enough notes to
recreate the experience for those who did not attend, but alas, this
is what you get! It’s incomplete and I’m sorry if I’ve left out
someone unfairly - you have to go yourself next time so you don’t miss
a thing.
Structure of the gathering
I didn’t go to SBCL10, so I didn’t know what to expect. There were few
speakers announced, and I worried (to myself) that this was a sign of
insufficient participation, but I couldn’t have been more wrong.
Philipp Marek played host at his employer,
BRZ. We had a large room laid out with
several tables, ample power, notepads, markers, and treats, fresh food
and drink, and a stage area with chairs set out for an audience.
The conference lead off with a BRZ representative who explained BRZ’s
purpose with an English-language video and encouraged qualified people
to consider joining the company.
Christophe Rhodes acted as master of ceremonies. He put the conference
in historical context and explained the format. While there were only
a small number of planned talks, the remainder of the two-day
conference was intended for brainstorming, reminiscing, hacking, and
impromptu talks by anyone with an interesting idea, demo, or
controversial proclamation. He challenged all of us to pick something
to work on and present it by the end of the conference.
With everyone in the same room, it was nice to see people help each
other in unexpected ways. People describing a problem would get
interrupted by people who could help. And not “Have you tried
installing My Favorite Linux?”-type unhelpful speculation - it was
always valuable in one form or another. The breadth and depth of SBCL
and Common Lisp knowledge meant that, for example, someone could
explain why a certain decision was made in CMUCL 30 years ago, why
SBCL went in a different direction 20 years ago, and how things could
be improved today.
I chose to revisit a problem I first wrote about five years
ago. It
boils down to this: can a third party (Quicklisp, in this case)
control the dynamic environment of each load-system operation when
recursively loading a system? The SBCL connection is a little loose,
but it relates to how SBCL’s compiile-time analysis warnings should be
shown prominently for local development, even when loading systems
with ql:quickload
.
A lot of people pitched in with ideas and suggestions. Mark Evanson in
particular acted as a sounding board in a way that helped me get to
the essence of the problem. Unfortunately, I wasn’t able to find a
solution before the end of the conference.
Robert Smith and Lisp at Rigetti
Robert gave an introduction to the math behind quantum computing, and
then described the success Rigetti has had with SBCL and Common Lisp
for building its quantum computing
simulator and
compiler. CL allows exploring and
adopting new ideas at a very quick pace. I liked that it wasn’t
high-level “Lisp is great!” preaching to the choir, but gave some
specific practical examples of how CL features made life easier.
Charlie Zhang and RISC-V
Charlie is a newcomer to SBCL development as of 2019. In the span of a
few months added a new compiler backend for fun. He talked about the
challenges of understanding and extending SBCL, and some of his future
plans.
He generated backend the assembly with the Lisp assembler - it gave
full advantages of Lisp for code manipulation at the assembly
level. First and only backend to do so!
Funniest fact I overheard at dinner after the workshop: “I don’t even
use Common Lisp for anything, I just hack on the compiler!”
Doug Katzman and SBCL as a Unix program
Doug Katzman talked about his recent work at Google aimed at making
SBCL play well with Unix tools. Specifically debugging and profiling
tools that expect a binary to act in a certain way and to provide
debugging and stack info in a specific format. This makes it easier to
provide insight into how SBCL is spending its time when there are
many, many instances running across many, many computers. And with so
many instances running, the benefits of improving performance add up
in significant ways.
This use case is far removed from my typical live, ongoing,
interactive development session with SBCL. It was interesting to learn
about the constraints and requirements of Lisp servers in that kind of
environment.
Other talks
There were a dozen or more short presentations and talks about various
topics. Luís talked about porting an
application to SBCL from another Lisp and some of the good and bad
parts along the way. Charlie talked about contification
optimization for
SBCL. There were quick talks about tuning the GC, SIMD extensions,
missing features of SBCL,
Coalton, CL support in
SWIG, and several more.
Bits and pieces
- There are more commits to SBCL now than ever before, despite there
being fewer people contributing overall
- It would nice to have support for good CL interaction in popular new
editors, but some of the existing components
(e.g. LSP) are insufficient to support
SLIME-like levels of interaction
- Siscog has more than 60 people who work on
Lisp programs - biggest collection in the world?
Closing wishlist items
Christophe solicited wishlist items to close out the conference. Here
are a few that I jotted down:
- Debug-oriented interpeter, e.g. with macroexpand-always behavior
(the current interpreters do not especially improve the debug
experience)
- Profile-based compilation feedback (sort of like tracing jit but not
exactly?)
- Class sealing
- Full configurable numeric tower
- Arbitrary-precision floats
- Concurrent GC - GC pauses cited by more than one person as a pain
point
Overall
I had a great time at SBCL20 and it renewed my energy for working on
Common Lisp projects. It’s great to see in person the people you are
helping when you create or contribute to a community project.
Thanks to everyone who attended and spoke, to Philipp Marek for
hosting, and to Christophe Rhodes for acting as MC and much more.
It’s too long to wait for SBCL30. How about an SBCL25, or even sooner?
See you there!