A list of libraries written in pure Common Lisp - that is, with no foreign dependencies - that may be of particular interest
to people developing games and similar interactive applications in Common Lisp.
You won’t find libraries for pushing pixels and playing sounds here (for now). Those tend to require interfacing with a
native platform API (or a foreign, usually C, library abstracting native platform APIs). But there’s still plenty you can
do without leaving the Lisp world.
The list
Unless otherwise stated in remarks, all libraries are available through the official Quicklisp distribution, as of 2017-11-24.
Allows to explose Lisp-allocated buffers directly to foreign code. Useful for saving performance on moving bits beteween Lisp code and foreign dependencies.
Improves performance of octet-vector and octet-stream IO. Can optionally use static-vectors for extra performance in passing buffered data to foreign code.
A simple yet potentially useful building block for solving variety of problems.
?
Motivation
Foreign libraries involve working with, and shipping, foreign dependencies. Doing that correctly, for all important platforms, is
a quite tricky and painful process. It can be done (see e.g. this article by borodust), but the less foreign libraries you have
to deliver, the less hassle you have. Moreover, the developent process itself can get tedious - even though projects like
cl-autowrap do a great job at making things easier, you might still hit a library wrapper that will require you (or people you share
your code with!) to have a whole LLVM environment to even build the ASDF system.
Unlike many popular dynamic languages, Common Lisp is actually performant, with implementations like SBCL generating code
that can compete in speed with C (if properly written and instrumented). This opens the possibility of using pure Common Lisp code
for interactive applications without taking a huge performance hit.
Contributing
If you see a library that a) can be useful in game development (or closely related areas), and b) is pure Common Lisp, i.e. has no
foreign dependencies that need to be managed through FFI, feel free to include it and send a Pull Request.
Corrections to any information in this list are welcome too. I have only so much patience to check e.g. licenses :).
Also, I’m considering starting a section with usage examples for libraries that are meant to be
used with typical foreign gamedev dependencies - e.g. how to use pngload to load a texture for cl-opengl. Any such examples
are welcome too.