
Explorer "Almost Scheme" status - February 11, 1989

What exists now has been rather hastily thrown together.  It is usable,
but is not complete, stable, or reliable.  Currently, it has most of the
features of the Revised^3 Report plus many additional features from PC
Scheme.  There are also a few features included for compatibility with
MIT's "Pseudoscheme" and the TI internal Scheme to Common Lisp translator.

The known omissions from the Scheme report are:
 * Section 4.2.1 -- COND does not support the optional "=>" syntax.
 * Section 4.2.6 -- The special form symbols QUASIQUOTE, UNQUOTE, and
   UNQUOTE-SPLICING are not supported (but the equivalent syntax "`",
   "," and ",@" does work).
 * Section 6.5.2 -- The concept of exactness of numbers is not
   implemented, although the associated functions and syntax are
   supported and try to do something reasonably close to the intent.
   Integers and ratios are considered to be exact and floating point
   numbers are considered inexact.
 * Section 6.5.7 -- Numerical output formats RAT, RECT, and POLAR are
   not yet supported by NUMBER->STRING.
 * Section 7.1.1 -- The complex number syntax is not yet supported.

The following features of PC Scheme are not supported yet:
 * Creating windows or changing their attributes.
 * Graphics functions SET-CLIPPING-RECTANGLE and SET-PALETTE!.
 * SCOOPS.
 * Engines.
 * The object hash table (functions OBJECT-HASH and OBJECT-UNHASH).
 * Environments as first-class objects.  (However, there is an
   experimental partial implementation in file "ENVIRONMENTS".)
 * AUTOLOAD-FROM-FILE.

If you are interested in any of the missing features above, you are
invited to volunteer to implement it.

Refer to file "GUIDE.TEXT" for information on using the system.

Refer to file "PROPOSAL.TEXT" for the design goals and intentional
restrictions.  In particular, note that continuation objects are limited
to having dynamic extent.

The file "INDEX.TEXT" contains an alphabetical list of the functions
that are currently defined and the file in which each is defined.

A lot of work remains to complete the functionality of PC Scheme, to
test it all, and to address performance issues.  A major handicap is the
lack of a comprehensive set of regression tests.

Some currently known bugs (besides the missing features noted above):

  * In the evaluator, DO does not create new bindings each time around
    the loop; this affects the semantics of any closures over the
    iteration variables.  It should be working correctly in compiled
    code.

  * If the argument of STRING->NUMBER contains a decimal point, the
    value will be considered to be base 10 regardless of the radix
    argument.

  * COMPILE-FILE compiles the whole file and then loads the whole file,
    which doesn't exactly match the PC Scheme behavior of installing
    each function as it is compiled.

  * Some things are defined by macros which will be broken if the user
    creates local bindings that shadow primitives such as CAR, CONS,
    AND, OR, NOT, or APPLY.

  * Symbol names are not permitted to contain colons except as used to
    designate an existing Common Lisp package.

  * The current implementation of streams does not exactly match PC
    Scheme in that streams are implemented as lists instead of being a
    distinct data type.  This has an efficiency advantage, but has the
    disadvantages that STREAM? is not meaningful and hence is not
    implemented, and the null stream is indistinguishable from an empty
    list.

  * The reader considers a number that ends in a period to be a decimal
    integer instead of a floating point number.

  * The function CURRENT-COLUMN sometimes returns a value smaller than
    it should be when the port is a file.  [This is actually due to a
    deficiency in Explorer Common Lisp -- ref SPR 5952]

  * Use of *THE-NON-PRINTING-OBJECT* has the intended effect only when
    used as the value returned from a function executed at top level.
    If it is assigned to a variable, the false object is stored.

  * After switching back and forth between windows, the Listener
    sometimes forgets that it should be displaying the Scheme mode
    prompt (even though it is still evaluating in Scheme mode).

  * Complex numbers are written and read using Common Lisp syntax.

  * TRACE-ENTRY, TRACE-EXIT, BREAK-ENTRY, and BREAK-EXIT are defined,
    but don't produce quite the same results as in PC Scheme.

  * Names defined by DEFINE-INTEGRABLE cannot be shadowed by a local
    binding.

Other minor differences from PC Scheme:

  * Floating point constants default to single precision, while PC
    Scheme uses only double precision.  Note that constants can be
    prefixed with #L to make them double precision.  The default can be
    changed to double precision by:  
     (SET! LISP:*READ-DEFAULT-FLOAT-FORMAT* 'LISP:DOUBLE-FLOAT)

  * PCS-INTEGRATE-DEFINE defaults to false instead of true since that
    way is more efficient on the Explorer.

  * Uninterned symbols are written with the prefix "#:".  If this is
    considered undesirable, it can be prevented by:
      (FLUID-LET ((LISP:*PRINT-GENSYM* #F)) ... )

  * When SORT! is called with only one argument, strings are placed
    after lists, while PC Scheme puts strings before symbols and lists.

  * Changing the value of PCS-DEBUG-MODE has no effect.

  * A DO without any expressions following the test does not return the
    value of the test.

There are currently no plans to support this as a product.  It may be
released as part of the "PUBLIC" directory in some future release.

If you would like to be on a mailing list to possibly receive notices
about future upgrades, add yourself to the file
"DSG:MAILING-LISTS;SCHEMERS.MLIST".  

Bug reports are welcome; send Explorer mail to GRAY@DSG.  However, since
this is not a supported product, bug fixes will mostly be done on an 
"if and when I feel like it" basis.   If you would like to fix something
yourself, send me the fix and I will incorporate it as soon as I can
verify its correctness.

				-- David N. Gray