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.