Common Lisp is intended to meet these goals:
- Commonality
- Common Lisp originated in an attempt to focus the work of several implementation groups, each of which was constructing successor implementations of MacLisp1 for different computers. These implementations had begun to diverge because of the differences in the implementation environments2: microcoded personal computers (Zetalisp3, Spice Lisp4), commercial timeshared computers (NIL-the ``New Implementation of Lisp''5 ), and supercomputers (S-1 Lisp6 ). While the differences among the several implementation environments of necessity7 will continue to force certain incompatibilities among the implementations, Common Lisp serves as a common dialect to which each implementation makes any necessary extensions8.
- Portability
- Common Lisp intentionally excludes features that cannot be implemented easily on a broad class of machines. On the one hand, features that are difficult or expensive to implement on hardware without special microcode are avoided or provided in a more abstract and efficiently implementable form. (Examples of this are the invisible forwarding pointers and locatives of Zetalisp9. Some of the problems that they solve are addressed in different ways in Common Lisp10.) On the other hand, features that are useful only on certain ``ordinary'' or ``commercial'' processors are avoided or made optional. (An example of this is the type declaration facility, which is useful in some implementations and completely ignored in others. Type declarations are completely optional and for correct programs affect only efficiency, not semantics.) Common Lisp is designed to make it easy to write programs that depend as little as possible on machine-specific characteristics, such as word length, while allowing some variety of implementation techniques.
- Consistency
- Most Lisp implementations are internally inconsistent in that by default the interpreter and compiler may assign different semantics to correct programs11. This semantic difference stems primarily from the fact that the interpreter assumes all variables to be dynamically scoped, whereas the compiler assumes all variables to be local unless explicitly directed otherwise. This difference has been the usual practice in Lisp for the sake of convenience and efficiency but can lead to very subtle bugs. The definition of Common Lisp avoids such anomalies by explicitly requiring the interpreter and compiler to impose identical semantics on correct programs so far as possible12.
- Expressiveness
- Common Lisp culls what experience has shown to be the most useful and understandable constructs from not only MacLisp but also Interlisp, other Lisp dialects, and other programming languages13. Constructs judged to be awkward or less useful have been excluded. (An example is the store construct of MacLisp.)
- Compatibility
- Unless there is a good reason to the contrary, Common Lisp strives to be compatible with Lisp Machine Lisp14, MacLisp, and Interlisp15, roughly in that order16.
- Efficiency
- Common Lisp has a number of features designed to facilitate the production of high-quality17 compiled code in those implementations whose developers care to invest effort in an optimizing compiler18. One implementation of Common Lisp, namely S-1 Lisp19, already has20 a compiler that produces code for numerical computations that is competitive in execution speed to that produced by a Fortran compiler [11]. The S-1 Lisp compiler extends the work done in MacLisp to produce extremely21 efficient numerical code22[19].
- Power
- Common Lisp is a descendant of MacLisp, which has traditionally placed emphasis on providing system-building tools23. Such tools may in turn be used to build the user-level packages such as Interlisp provides24; these packages are not, however, part of the Common Lisp core specification. It is expected such packages will be built on top of the Common Lisp core25.
- Stability
- It is intended that Common Lisp will change only slowly and with due deliberation26. The various dialects that are supersets of Common Lisp may serve as laboratories within which to test language extensions, but such extensions will be added to Common Lisp only after careful examination and experimentation27.
The goals of Common Lisp are thus very close to those of Standard Lisp [31] and Portable Standard Lisp [51]2829. Common Lisp differs from Standard Lisp primarily in incorporating more features, including a richer and more complicated set of data types and more complex control structures30.
This book is intended to be a language specification rather than an implementation specification31 (although implementation notes are scattered throughout the text32 ). It defines a set33 of standard language concepts and constructs that may be used for communication of data structures and algorithms in the Common Lisp dialect34. This set of concepts and constructs is sometimes referred to as the ``core Common Lisp language'' because it contains conceptually necessary or important features35. It is not necessarily implementationally36 minimal37. While many features could be defined in terms of others by writing Lisp code, and indeed may be implemented that way, it was felt that these features should be conceptually primitive so that there might be agreement among all users as to their usage38. (For example, bignums and rational numbers could be implemented as Lisp code given operations on fixnums. However, it is important to the conceptual integrity of the language that they be regarded by the user as primitive, and they are useful enough to warrant a standard definition39.)
For the most part, this book defines a programming language, not a programming environment. A few interfaces are defined for invoking such standard programming tools as a compiler, an editor, a program trace facility, and a debugger, but very little is said about their nature or operation. It is expected that one or more extensive programming environments will be built using Common Lisp as a foundation, and will be documented separately40.
There are now many implementations of Common Lisp, some programmed by research groups in universities41 and some by companies that sell them commercially42, and a number of useful programming environments have indeed grown up around these implementations43. What is more, all the goals stated above have been achieved, most notably that of portability44. Moving large bodies of Lisp code from one computer to another is now routine45.
- Long dead, nothing to do with apple, still has some web presence [↩]
- So even before symbolics? [↩]
- this was the lisp on the lisp machine, which then split off into symbolics [↩]
- became CMUCL, which branched off to SBCL. Should I read SBCL code as an example of a good lisp program? [↩]
- From wiki: Although unsuccessful in meeting its goals as a used language, NIL was important in several ways. First, it brought together Jon L. White, Guy L. Steele Jr., and Richard P. Gabriel, who were later to define Common Lisp. Second, Jonathan Rees worked on part of the NIL project during a year away from Yale University. On returning to Yale, he was hired by the computer science department to write a new Lisp, which became the optimizing, native code Scheme system named T. In part, NIL begat this name, since "T is not NIL".
Shall I put in another link to the MP article?
[↩] - dead, can anyone find the source? it was supposed to have been written in lisp [↩]
- why is this necessary? [↩]
- Aha, so common lisp only describes the common parts, the rest is all up in the air, and so we have the situation of today [↩]
- These sound very cool, what were they? [↩]
- I hope these are documented somewhere [↩]
- What? This is going to be fun to learn [↩]
- vague, first "explicit" and "require", next "so far as possible" [↩]
- This sounds like advertising [↩]
- Other name for ZetaLisp as far as I can figure out, why use this name instead? [↩]
- Deady, very [↩]
- I you re-read froin the start, then the first lisp mentioned was MacLisp and now "Lisp Machine Lisp" is the most important one. What gives? [↩]
- What defines "high-quality" in this context? [↩]
- In the others, they don't care, the losers [↩]
- The dead version [↩]
- had [↩]
- how extreme? [↩]
- No information in this sentence other than to provide an excuse for the link [↩]
- Empty sentence [↩]
- Apple traditionally place emphasis on providing media producing tools. Such tools may in turn be used to produce the images such as any random porn site provides. [↩]
- Hahahahahaha uch uch uch. [↩]
- This came true, but for different reasons than the author probably had foreseen [↩]
- This was to be done by scientist, between those spare moments when they where not looking at the climate [↩]
- Fuck, even here they were split, 3 ways!!! [↩]
- The PSL code is available. The first version of this site on the wayback machine is from 2016 and says *** Very soon major version update will be released. ***". The same words are still there. [↩]
- We are BETTER and more COMPLEX than those fuckers [↩]
- So this one is not CLHS, but something else? [↩]
- Although on second thought, maybe it still could be an implementation specification? [↩]
- In this book we defined a set [↩]
- You can give me any set of words and I'll make a sentence out of it! It will not mean anything, but it sort of hints at something cool [↩]
- Let's just continue, yes? What is it concepts, constructs or features or a bit of all of these? [↩]
- Look mam, I made a new word [↩]
- It's a whole lot of shit, sorry we could not minimize it [↩]
- Fuck you [↩]
- And fuck you again [↩]
- and die in flames [↩]
- the losers [↩]
- the bastards [↩]
- you know, "a number", like 0. That's a perfectly fine number. You can use it to add or multiply, it is a bit harder to use in division. [↩]
- Hahahahaha uch uch uch, BTW can you make multiple referrals to the same footnote in mp-wp? [↩]
- Yes I just saw some large bodies moving about on the street! and their talk was definitely a bit off with losts of sss in there [↩]
There's a whole bunch of "text((" which prevents the text from turning into a footnote (there needs to be a space before "(("?).
> BTW can you make multiple referrals to the same footnote in mp-wp?
AFAIK it's not possible, but you can probably hack your way around it by manually inserting a link, e.g. Zetalisp. The "[↩]" backreference to that particular link would be missing though.
Spyked;
Thank you, I hope I now put in all the spaces