[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Portability and performance, standards and change
The multiple goals in language design of portability and high
performance, standard definitions and the ability to change system
definitions are often in conflict. You sometimes have to give up one to
get the other.
The primary goal of Common-Lisp (above and beyond Franz, NIL, LispM etc)
was to be COMMON. Further along the road to allowing each implementor to
decide the exact semantics of MAPC lies the current proliferation of
MacLisp dialects.
Nailing down what the mapping functions do in the presence of structure
modification on the argument list may (a) result in performance
degradations in some cases and (b) tie you to design decisions that you
will wish later that you could change, but those are in fact the real
costs of standardization and portability.
If standardization and portability are precisely the problem with
Interlisp (as Moon put it), they are also its strengths. If you have a
STANDARD, then you can't go off and change the semantics of your
implementation without in fact changing the STANDARD. Leaving it
unspecified or saying "it is an error" does not avoid the issue. It
merely increases the number of programs which will not transfer from one
"common" lisp to another (or even from one release to the next, if Moon
really meant what I thought he did) without tracking down dependence on
features which are not detectable by static or runtime analysis.