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

Re: Lisp Compatibility, Lisp differences



INVITATION TO JOIN LISP-DISCUSSION:

In June, a group of us (namely those currently on
Lisp-Discussion@MIT-MC) got together and generated an outline of what
we believed to be the major areas of divergence among the popular lisp
dialects of the ARPA community.

I am interested in turning this outline into a publication, because I
think that currently there are more differences than most folks
suspect. This of course would be useful to anyone seriously
considering Lisp "standardization", because every area of divergence
would necessarily have to be addressed in any proposed standard. I
don't know enough about all of the dialects of Lisp to finish the
document myself. Since there seems to be some recent interest on
Lisp-Forum@MIT-MC on standardization, I invite those interested to join
Lisp-Discussion@MIT-MC. My plan is to send out questions and edit together
the responses. I'll send future messages only to
Lisp-Discussion@MIT-MC.

--------
SOME GROUND-RULES:

There are several ways to discuss differences between dialects,
easiest to characterize by the kinds of questions you wish to address.
For example, one might wish to

(1) take an implementation of dialect A and turn it into an
implementation of dialect B on the same machine.

(2) write a "compatibility package" which will sit on top of any
implementation of dialect A and turn it into dialect B (this is
different from (1) because in this situation, the implementation of A
is hidden)

(3) write an automatic translator of dialect A to dialect B, which
will handle most cases and accurately (100%) flag any areas which
might require hand-translation

(4) same as (3), but the translator need only work for "most" programs

(5) translate a single (perhaps large) program from dialect A to
dialect B

(6) switch from programming in dialect A to programming in dialect B

-----------

It seems important to concentrate on "low-level" differences first, in
that things like the nature of the debugger, and the kind of window
system you use, while most important to those in situation (6), are in
some sense "external". Thus, I'd like to leave out, at least for now,
discussions of facilities which reside in the "library" of one dialect
but could in theory be written in any other dialect.

Also, I would like to concentrate on <factual> descriptions of
<current> differences, leaving opinions about what "should" be done to
some other document.

The dialects being considered (please be sure to join in if you know
of others which should be included) are:

Interlisp 
(Interlisp-10 and Interlisp-D)
MacLisp (implementations on 10s and Multics)
LispMachine Lisp
Standard Lisp (multiple implementations)
NIL (VAX)
Franz (VAX)
UCI-Lisp (10s)
Lisp/370 (370)
Lisp 1.6 (10s)

Major areas of divergence:

Data structures
Evaluation
Control structures
input/output
other

Example:

CAR/CDR of non-lists:

While Lisp systems are consistent in the interpretation of CAR and CDR
as applied to objects returned by CONS, there is divergence in the
interpretation of those operations when applied to other data objects.
In general, the implementations say that the result is "undefined",
but there are important exceptions:

	Interlisp and MacLisp define CAR/CDR of NIL to be NIL.
	Otherwise, result is undefined. Interlisp-D has switch which
	causes CAR/CDR of other data to cause an error. Lisp Machine
	Lisp invokes the message passing mechanism, which ...? NIL
	distinguishes between the empty list () and the atom NIL.
		CAR/CDR of NIL is (an error/undefined)
	other dialects ...?