[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Can, could, may, might, must, ...

I disagree with some people's opinions about what packages should
contain what.

LISP should contain only those things that are in the Silver Bible, or
ECO'd extensions.  It should not include user interface things like QUIT

There should be a package that is defined by the vendor which contains
that vendor's EXTENSIONS.  Symbolics has the Symbolics-Common-Lisp
package (aka SCL).  This package contains language extensions and
external user interface items ONLY.  It is NOT the system package and it
does NOT contain the implementation details (at least as exported
symbols) of LISP or the extensions.  This package is the one to :USE
when writing Common Lisp programs specific to the vendor's system.  To
write portable code, :USE the LISP package.  The extended package either
uses and reexports all symbols in LISP, or imports and reexports to get
the same effect.  (This allows a package to :use the extended package
without having to :use both.  Maybe that isn't such a good idea, but
that's who Symbolics does it and it doesn't bother me.)

As stated above, the SYSTEM package is yet another beast.  In the
Symbolics system (and probably the other derivitives from the MIT Lisp
Machine project), there are two rather different classes of things that
show up in here.  One class is the external interface to the operating
system, such as SYSTEM:DISK-READ to issue a disk read.  The other class
is the internal interface to the machine, such as instructions.  This
has bothered me for a while, but I haven't had time to think about it

The USER package can either use CL or use the extended CL package.
Symbolics makes it use the extended CL package since the extended
package contains a lot of user interface and is generally more useful
than the bare CL package.  USER does NOT use SYSTEM.  The USER package
is for dealing with the language and user interface, NOT the internals
of the implementation or the operating system.

Personally, I always specify a default for MAKE-PACKAGE :USE.  That's
probably because our default is to :USE only LISP, which I think is the
right thing.  :USE'ing any other packages would lead to name conflicts
KMP is trying to avoid.

The most important thing that I agree with KMP about is that the LISP
package contains only those symbols in CLtL.