Vladimir Sedach

Have Emacs - Will Hack

March 29, 2011

Lisp linkdump, March 2011 edition

Topic: Lisp

Here's a bunch of links to interesting Common Lisp stuff I've come across lately:

EOS is a drop-in replacement for the FiveAM test framework without any dependencies on external libraries (one of the dependencies of FiveAM is heavily implementation-specific and does not work on LispWorks 6, among other platforms). I have converted all my FiveAM projects to EOS, and recommend you do the same.

I ported the Multilisp benchmarks from Marc Feeley's PhD dissertation to Eager Future2. The benchmarks tax the multiprocessing facilities of Common Lisp implementations and might reveal bugs. On my 32-bit x86 system, the only implementation to run all benchmarks to completion without segfaulting was SBCL. Try them on yours: load :test.eager-future2 and call benchmark.eager-future2:run-benchmarks.

Speaking of Marc Feeley, here is some other cool work he has been involved in:

Vincent St-Amour and Feeley came up with the PICOBIT R4RS Scheme, which can run Scheme programs in 256 bytes RAM and 8KiB of ROM total (including VM footprint) on PIC microcontrollers.

Feeley gave a talk about the internals of Gambit Scheme at ILC2010. The slides are really informative.

Common Lisp FORMAT continues to amaze. Peter Seibel pointed out Erik Naggum's cool symbol-based format directive hack for printing dates on the Lisp-pro mailing list. I recently learned that instead of passing nil or t or a stream to FORMAT, you can pass a string with a fill-pointer, and "the output characters are added to the end of the string (as if by use of vector-push-extend)."

Jonathan Fischer wrote a good article about feeding binary data from Common Lisp to C.

Other things you can do with C is add s-expressions and macros - c-amplify does just that. c-amplify is motivated by the needs of game development, as was GOAL, Andy Gavin's Lisp system which powered the Jak & Daxter videogame franchise. Now there is a GPL-licensed attempt to create a GOAL-like environment called Score.

Other places besides C you can now run Lisp:

cl-gpu translates a subset of Common Lisp to CUDA GPU kernels. Arduino Lisp translates a subset of Common Lisp to a subset of C++ that can be compiled to run on the Arduino microcontrollers. See the announcement on the Arduino forum.

I keep promoting Tobias C. Rittweiler's named-readtables library. Tobias has more cool libraries you should check out:

Hyperdoc provides a way to quickly look up HTML project documentation for any Lisp project from SLIME or other IDEs, similar to what hyperspec.el does for the Hyperspec.

Parse-Declarations is useful if you are building Lisp translators or code-walking tools.

HN user jfm3 points out that according to X-bar linguistic theory, all natural languages basically consist of s-expressions. The great thing about Common Lisp is, like natural languages, it is both homoiconic and its words have different meanings in different contexts. The English language has Buffalo buffalo Buffalo buffalo buffalo buffalo Buffalo buffalo; Common Lisp has Mike McMahon's let quine (another one of the cool things I learned from Doug Hoyte's Let Over Lambda):

(let ((let '`(let ((let ',let))
               ,let)))
  `(let ((let ',let))
     ,let))

If you have been looking for example code of large Common Lisp web applications, you should check out cl-eshop. cl-eshop currently runs the «ЦиFры» St. Petersburg store chain website and is licensed under the Affero GPL.