June 30, 2003
Packages for Idiots
Erann Gat has put up the first draft of “The Complete Idiot's Guide to Common Lisp Packages” (the c.l.l thread). “I'm interested in getting feedback both from newbies (is it understandable?) as well as experienced Lispers (is it correct?)” [via
Posted by jjwiseman at June 30, 2003 09:58 AM
Usually the "idiot" on titles like "Idiot's guide to whatever" refer to the autor, not the reader, of course.
It seems to explain what it wants to explain well enough. As someone who has only dabbled in Common Lisp, I've always thought packages were one of the most confusing parts. I would download a particular package, but it wasn't obvious to me how to make use of it. Eventually I discovered defsystem, which does not seem to work with the systems I tried (OpenMCL, clisp). Even after I solved that problem, it still confused me. Every package I downloaded seemed to create a "system" definition a little differently. And then there are packages which need a different package managment tool entirely. Ugh.
Anyway, that's all besides the point. It's a good explanation, I just wish there was something like it for newbies that just want to use a package they downloaded.
The above comment shows how confusing Lisp packages are, and how poor the terminology is.
Lisp packages are not software packages! Instead, a lisp package is a namespace. As one would expect, knowing how namespaces work does not help you understand how to install, build, and use software packages (although it may be helpful). It's simply a different issue.
Regrettably, the state of affairs for installing Lisp software packages is not very good. For whatever reason, the defsystem function was never adequately standardized, and it seems that today we are left with three rival quasi-standards, asdf , mk-defsystem, and Allegro's defsystem.
Furthermore, IMHO, the pragmatics (as opposed to the semantics) logical pathnames are not sufficiently standard to support relocating Lisp packages easily. But that's a rant for another day.
Yeah, what you say makes sense. I do realize that packages and "software packages" are not completely the same concept, although since "software packages" use packages to keep namespaces separate, they aren't completely different concepts either. The explanation you give about the lack of standardization is a good one. Thanks.
I've read it and I find it very useful. Only one question: I'm trying the code and after I enable the trace macro for make-symbol I haven't any print when I ask the evaluation of a symbol:
while if I call make-symbol I have the print:
* (make-symbol "foo")
0: (MAKE-SYMBOL "foo")
0: MAKE-SYMBOL returned #:|foo|
Then I suppose that the read of the read-eval-print loop in the CL implementations I'm using (CMU Common Lisp release x86-linux 3.1.2 18d+ and Allegro CL 6.0) don't use make-symbol. Is it true?