Spice Lisp Status

This file contains status information on Spice Lisp.  We will attempt to keep
it up to date.  This means that this file will change frequently and should be
consulted often by Spice Lisp users.

This file lists all known problems and bugs in the Spice Lisp system.  Except
for items listed here, Spice Lisp is supposed to be a legal implementation of
Common Lisp as described in the latest Common Lisp Reference Manual.  If the
user spots any differences between the Lisp system and the manual that are not
reflected here, please report the problem to Spice@Spice.

This file corresponds to Spice Lisp version 2.0 and to the Mary Poppins
edition of the Common Lisp Reference Manual, dated November 1983.

The items below are divided somewhat arbitrarily into "major" and "minor"
classes.  Major problems are either pervasive or are specific items that the
average Common Lisp user is likely to encounter frequently.  Minor problems
are obscure things that are unlikely to cause trouble, but that nevertheless
need to be fixed.
←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←

THE FOLLOWING MAJOR ITEMS ARE EITHER INCOMPLETE OR INCORRECT, ACCORDING TO THE
CURRENT EDITION OF THE MANUAL:

For the present, some of the irrational numeric functions are broken.  These
will be fixed VERY soon.

There are currently a number of holes in the "system interface" and
"miscellaneous" functions.  PROVIDE, REQUIRE, INSPECT, and DRIBBLE are
not currently implemented.  Most of the time functions are unimplemented,
although the TIME macro will print information about the elapsed real-time.

The TRACE function cannot trace macro expansion. 

Complex numbers are not implemented.  The functions CONJUGATE, CIS, COMPLEX,
REALPART, and IMAGPART are not implemented.  Complex numbers are currently
optional in Common Lisp and at present we have nobody working on this.

A number of the things in the file system interface chapter are not
implemented.

Logical names and relative pathnames are not supported.

←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←

THE FOLLOWING MINOR ITEMS ARE EITHER INCOMPLETE OR INCORRECT, ACCORDING TO THE
CURRENT EDITION OF THE MANUAL:

The package system is installed and running.  When the Lisp starts up,
however, you will find yourself in the Lisp package, not the User package.
There are still a few symbols (e.g. debugger commands) that have not been
exported from the Lisp package, so using other packages may be inconvenient.
We expect to fix this VERY soon.

The :INVISIBLE option to DEFSTRUCT does not work.

The circular printer is not yet incorporated into the main body of the
printer. This means that setting *PRINT-CIRCLE* has no effect at the moment.
Interactions between the various print switches has not been thoroughly
checked out.  A new scheme for handling all the printer switches is being
worked on.

The pretty-printer does not call structure-print functions, but rather prints
structures in the default #S(...) syntax.

Use of (format nil ...) in structure-print functions can result in lossage.

The feature whereby one can pass a string with a fill-pointer to format as
the stream argument, and have the output pushed on it is not implemented.

A number of format's more obscure features either are implemented as
described in an earlier version of the language or don't quite right.
Beware of indirection "?" and iteration "{".

Read-from-string is not implemented.

The version of with-input-from-string with the supplied string is not
implemented.

*read-base* is not implemented.

#, does not do load-time evaluation

There are a number of bugs and relics from previous ages in defstruct.
Including structures does not work quite right.  In particular:
  With more than one level of inclusion, the type predicate will be
    incorrect.
Specifying more than one constructor does not result in the creation
of more than one contructor function.
Copier functions are not implemented.

←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←

THE FOLLOWING ITEMS ARE ALLOWED BY THE MANUAL, BUT ARE EITHER INEFFICIENT OR
AWKWARD TO USE IN THE CURRENT IMPLEMENTATION:

Bignum and ratio arithmetic is fairly slow, since operations on these numbers
are performed by Lisp code instead of microcode.  Bignums and ratios are
certainly usable, but one probably doesn't want to be doing arithmetic
involving such numbers in critical inner loops.

Double precision floating pointer numbers ("long floats") take quite a while
to print.  On the other hand, they are printed with the only correct floating
point number printing algorithm that exists.

While using Spice Lisp, if you should ever get a strange error message and
find yourself talking to a program called the "Spice Lisp Microcode Debugger",
you have encountered a rather fatal error.  Type "quit" followed by a
carriage-return, and the Lisp will go away.