[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: CSI LISP
- To: Andy Freeman <ANDY@SU-AI>
- Subject: Re: CSI LISP
- From: Jim Meehan <Meehan@YALE.ARPA>
- Date: Thu ,11 Jul 85 21:59:21 EDT
- Cc: linus!ramsdell@MITRE-BEDFORD, JAR@MIT-MC, T-Discussion@YALE.ARPA, Adams@YALE.ARPA
- In-reply-to: Andy Freeman <ANDY@SU-SUSHI.ARPA> (?Invalid domain (host)), Thu 11 Jul 85 12:20:54-PDT
[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
-------