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

Re: CSI LISP



[Andy:  I hope this gets to you.  Our mailer rejected SU-SUSHI.ARPA,
so I'm trying SU-AI.ARPA.]



    Price and wonderful support aside, is CSI Lisp T?

No. Jonathan says it's neither upwards nor downwards compatible.  But
"conversion" has not been a problem for us, and we have a LOT of T code.

    Does it implement the language in the manual?

Yes, mostly.

    If it doesn't, what are the differences?

There's a 25-page document describing the differences (not including
the system-specific stuff like graphics) and the reasons we changed
things.  A new manual for the whole language is in the works.  Here's
a brief summary of the differences, in three categories:  removed,
changed, and added.

************ Removed: *************
ARGSPECTRUM, CASE, DEFINE-METHODS, ENV-SYNTAX-TABLE, LIST-TERMINATOR,
LOCALE, MAKE-LIST-READER, REPL-ENV, REPL-EVAL, REPL-READ,
RUN-COMPILED-CODE, *SCRATCH-ENV*, STREAM-READ-TABLE, XCASE, XCOND,
XSELECT.

************* Changed: *************
(), #F, #T -- standard boolean values, self-evaluating
T -- evaluates to #T, not T
BOOLEAN? -- true for standard boolean values only

ANY, EVERY, ANYCDR, ...  -- they really do take multiple lists

MAKE-STYPE, DEFINE-STRUCTURE-TYPE -- allow methods (e.g., DEFINE-METHODS)

EVAL, LOAD, REQUIRE, HERALD, IMPORT -- these use "workspaces," which
contain a read-table, a syntax-table, and an environment

FORMAT -- now a macro, has additional commands

LASTCDR, NTHCDR, LINE-LENGTH  -- settable

MAKE-FILENAME -- takes "directory name" args, supports native syntax

MAKE-LOCALE -- environments are no longer permanent

SELECT -- takes a predicate


************* Added: *************
BREAK, WATCH -- breakpoints, performance measurement

buffers -- pooled strings that behave like output streams

byte-vectors -- released

clocks, timers, CURRENT-TIME, DECODE-TIME, ENCODE-TIME, TIME=,
FILE-WRITE-TIME, ...

dirnames -- file directories, supporting native syntax (e.g., ->DIRNAME,
DIRECTORY-EXISTS?, DIRECTORY-CONTENTS)

DEFINE-READMACRO

HELP, APROPOS -- documentation on every name in the system

tables -- released, hash on EQ? or EQUIV?.  [We use them for everything.]

MAYBE-READ-CHAR, etc. -- conditional input

READ-LINE-INTO-STRING

PRETTY-PRINT, PRETTY-PRINT-CODE -- better indenting, smart about special forms

VALUES, RECEIVE -- multiple-value returns (much stricter than Common Lisp)

VALID-SYNTAX?, etc. -- automatic syntax-checking at standard-compile time



The interpreter  has  two  separate  phases,  RELOCATE-COMPILED-CODE and
RUN-RELOCATED-CODE, that replace RUN-COMPILED-CODE, so  variable-lookups
are done  only  once,  forward  references  are  handled correctly, etc.
Procedures are interpreted by compiled procedures that have matching
argspectrums, not lexprs.  Contours are vectors, not lists.  It's faster
than the T (Tau) interpreter.  (We used the Gabriel/Stanford benchmark
suite for measuring.)

The Apollo version supports arbitrarily large heap sizes (for the Terns)
and various system-interface tools (DEFINE-APOLLO, INVOKE,
OPEN-WINDOW-PANE, ...), as well as a graphics system (bitmaps as
streams).

-- Jim
-------