Before Common Lisp
Lisp (LISt Processing) was proposed by John McCarthy at MIT in 1958 and described in a 1960 paper; the first widely used version was Lisp 1.5 (1962). In the 1960s and 1970s it split into dialects that shared ideas and little else: MacLisp (MIT’s Project MAC, for the PDP-10), Interlisp (BBN, then Xerox PARC, with its structure editor and a Do What I Mean spelling corrector), Lisp Machine Lisp (the language of the MIT Lisp Machines, which grew into Symbolics’s and LMI’s Zetalisp, with flavors for objects), Franz Lisp (a MacLisp-like Lisp for Unix), NIL and S-1 Lisp, Spice Lisp (Carnegie Mellon) and Scheme (Guy Steele and Gerald Sussman, 1975, with lexical scope and one namespace). Each system had its own file formats, its own ways of defining functions and its own libraries, so programs did not move between them.
Common Lisp
| Date | Step |
|---|---|
| 1981 | Lisp implementers meet (after an ARPA meeting in April) and agree to unify the MacLisp family. Guy Steele edits the specification. The name Common Lisp is adopted. |
| 1984 | Common Lisp: the Language by Guy L. Steele Jr. (Digital Press), CLtL1. It defines the language for the first time, with MacLisp’s names, Lisp Machine Lisp’s lambda lists and keywords, Scheme’s lexical scope, and no object system, no condition system and no standard loop. |
| 1986 | The ANSI committee X3J13 is formed to standardise Common Lisp. It works for eight years, resolving numbered issues (the HyperSpec still has its issue write-ups). |
| 1988 | X3J13 adopts CLOS (the Common Lisp Object System), which grew from the object systems of Xerox, Symbolics and Lucid, and a condition system. |
| 1990 | Common Lisp: the Language, 2nd edition (Digital Press), CLtL2, 1029 pages: CLtL1 updated with the changes the committee had made so far, including CLOS, the condition system, extended loop, pretty printing and format additions. It is not the final standard and differs from it in details; it is still the most readable reference for the language. |
| 1994 | ANSI approves X3.226-1994, American National Standard for Information Technology: Programming Language: Common Lisp (approved in December 1994). The standard is now held by INCITS, the successor of the X3 committee, as INCITS 226-1994, and has been reaffirmed since. The text is sold by ANSI. It is not an ISO standard. |
| 1996 | Kent Pitman publishes the Common Lisp HyperSpec through Harlequin, now LispWorks: the ANSI text as hypertext, with a symbol index, cross-references and the issue write-ups. Its licence allows reading and downloading and not redistributing; it is the usual free reference. |
No new edition has followed. The language is extended by implementation features and libraries, and by community specifications such as the Common Lisp Document Repository (CDR) and the Common Lisp Wiki. The extensions that matter to a reader of source files are in ASDF (Systems and implementations), the Metaobject Protocol (CLOS), the portable libraries and the implementations’ own packages.
What the standard added to CLtL1
- CLOS:
defclass,defgeneric,defmethod, method combination, and the generic functions of initialisation and printing. CLtL1 had only structures (defstruct) and no object system. - The condition system:
handler-case,handler-bind, restarts,define-condition, and the condition type hierarchy. CLtL1 hadcatch/throw,error,cerror,warn,ignore-errorsandunwind-protect. - The extended loop and its standard grammar (CLtL1 described only the simple
loop). - Pretty printing (
pprint-logical-block,*print-pretty*, the~<and~_directives offormat), and many newformatdirectives and printer variables. - Packages and symbols:
defpackage(CLtL1 hadin-packagewith options),*package*at load time,with-package-iterator, and package rules for theCOMMON-LISPpackage. - Characters: bits and fonts were dropped from the standard (
char-bits,#\Control-A) andstring-charwas removed in favour ofbase-charandcharacter, and the repertoire ofcharacteris left to the implementation. - Pathnames: logical pathnames and
translate-logical-pathname. - Names:
special-form-pbecamespecial-operator-p;declaimandwith-compilation-unitwere added;eval-whengot its situations:compile-toplevel,:load-topleveland:execute;defconstant,define-setf-expander,define-symbol-macroandsymbol-macrolet,multiple-valuemacros,destructuring-bindandnth-valuearrived. - Types:
deftypeand the type system (subtypep,upgraded-array-element-type) were made precise.
The dialects by name
The ways in which a .lisp file can differ from the standard are in three kinds: it is Common Lisp using implementation extensions (the feature expressions #+sbcl and the like), it is Common Lisp of the CLtL1 era ((declare (special …)), string-char, no defpackage), or it is another Lisp. The viewer’s detection of the other Lisps is described on Other Lisps: Emacs Lisp, Scheme, Racket and Clojure have their own pages on this site, and AutoLISP, ISLISP, PicoLisp, newLISP, Interlisp and Lisp Machine Lisp are named but not described in full.