Chris Hart <chriscorp@...> writes:
> I've just hopped on sbcl after the Allegro trial refused to handle a large
> heap package ( http://www.isi.edu/licensed-sw/halogen/ ). Of all the Lisps
> I've tried, sbcl is the only one that gives me the error message in the
> subject line, anyone knows what causes it? It looks like a syntax glitch, but
> what exactly? And why would CMU CL and GNU CL handle this better?
"better" is a difficult word :-)
In the first Common Lisp standard, defined by Guy Steele in (the first
edition of) _Common Lisp the Language_, there were two standardized
Lisp packages, named by "LISP" and "USER". "LISP" was the package
containing all the functions defined by the standard; "USER" was a
guaranteed-clean package for user's interactive use.
Time passed, and software was written. Back in the bad old days,
software authors didn't worry too much about modularity violations --
in particular, they didn't worry too much about scribbling over a
notionally shared package, rather than building their own. So you
would see code[*] starting with (in-package "USER") and proceeding
with a load of definitions, which could in principle overwrite or be
overwritten by some other software package's definitions.
Along came the ANSI standard for Common Lisp, which was incompatible
with the previous (CLtL) standard in some ways. The "LISP" package
was renamed to "COMMON-LISP", and the "USER" package to
"COMMON-LISP-USER". Some Common Lisp vendors maintained the old names
as nicknames for the new, a practice which was at least slightly
problematic, given that some operators had subtly changed their
semantics in the transition, but nonetheless, old code continued
mostly to work. Newer implementations (of which SBCL is conceptually
one, despite its 20+ year history; likewise OpenMCL :-), however, do
not necessarily support this pseudo-backwards-compatibility, because
the existing standard does not mandate or even encourage it.
I hope that gives some feeling for the reason. Quick workarounds for
your problem would be to find any mention of the "LISP" and "USER"
packages, and convert references (including package prefixes, for
instance) into "CL" and "CL-USER" (nicknames for the rather more
verbose names); alternatively,
(rename-package "COMMON-LISP" "COMMON-LISP" '("CL" "LISP"))
(rename-package "COMMON-LISP-USER" "COMMON-LISP-USER" '("CL-USER" "USER"))
will get it up and running. I do encourage you, however, to contact
the author of the software to update it for the 1994 standard.
[*] I don't know if this applies to this particular software.
http://www-jcsu.jesus.cam.ac.uk/~csr21/ +44 1223 510 299/+44 7729 383 757
(set-pprint-dispatch 'number (lambda (s o) (declare (special b)) (format s b)))
(defvar b "~&Just another Lisp hacker~%") (pprint #36rJesusCollegeCambridge)