Rainer Joswig
Hamburg, Germany
Email: joswig@lisp.de

Home > Lisp News > 22. February 2009

Common Lisp in Ten Documents

Common Lisp grew out of many years (1958-1982) of experience developing and using Lisp dialects (Lisp 1.5, MacLisp. Lisp Machine Lisp, Scheme, ...) and it was designed from 1982 on, until the ANSI Common Lisp standard got published in 1994. It is a very stable language which has some extensibility built in. At least ten implementations are actively maintained and these implementations have extended the standard Common Lisp with a lot of features and development tools. Common Lisp is based on a standard document and does not have a single leading implementation. Instead there are many competing implementations with widely different goals and capabilities.

At the core Common Lisp is a programming language for complex software that is best developed in an incremental and interactive development style. Understanding this will save the user from making a lot of wrong assumptions. Common Lisp has not been designed for the development of static software in a batch process (like C, C++, Java, Fortran, and many others). Thus both the language looks different and it has to be used differently. Long edit/compile/test/debug cycles are replaced with interactive software development (with its own set of advantages and problems). Other than that Common Lisp can be used for software development in many application domains and not just artificial intelligence software. Common Lisp is a tool for more advanced developers who need a flexible, extensible and interactive programming language.

So what is Common Lisp and how can you use it? I have tried to answer this question by selecting ten documents that cover the language, its usage and its tools.

To understand Common Lisp it is not enough to read the reference document for the language. It is also necessary to understand the usage of the programming language and the reason for its features. Peter Seibel motivates in his book Practical Common Lisp many of those features in terms that are understandable by readers new to advanced Lisp systems. Paul Graham explains in detail what Common Lisp has to offer with its code as data philosophy and its programmable macro system.

Most Common Lisp implementations have gained many facilities over the years. The commercial implementation LispWorks is now based on more of twenty years of development and maintenance. It is available on several platforms, provides support for threads, database access, application delivery, portable graphical user interfaces, networking and a portable graphical development environment - to mention a few features. Similar capabilities are also provided by Allegro CL from Franz, Inc. The non-commercial implementations are not far behind. I have referenced the CMU Common Lisp core documentation. It describes the advanced compiler of CMU Common Lisp, which supports type inferencing and which makes heavy use of type declarations to generate fast code.

There is a lot of material about Common Lisp. Here I have selected ten works that are available as PDF and/or HTML versions. The areas covered are language descriptions, language introductions, introductions to programming in Lisp and advanced programming concepts, descriptions of real implementations, their extensions and tools. Beginners should start with the introductory texts and look from time to time into the reference documents. If you want to dig deeper, then read the more advanced texts, read the reference from start to end and read the manuals and user guides.

These ten documents should give you a broad knowledge about Common Lisp technology. Writing them took a long time. You may also need time to read, understand and apply it. Don't hurry.

1: ANSI Common Lisp Standard, X3J13, 1994 (PDF, Web)
The work on a Common Lisp language standard started in 1982 and resulted in the publication of the ANSI Common Lisp standard in 1994. Usually one refers to the Common Lisp HyperSpec (compiled by Kent Pitman), but I have also referenced a PDF which contains a full Draft of the ANSI Common Lisp Standard (1360 pages). The ANSI CL standard is an important reference for every Common Lisp user and implementor.

2: Common Lisp the Language, Second Edition, Guy L. Steele, 1990 (PDF, Web)
CLtL2 describes a variant of Common Lisp slightly before ANSI CL and is also enhanced with some additional material which is not found in the ANSI Common Lisp standard. It is not as authorative as the ANSI Common Lisp specification, but might be slighty more readable for some topics. 1029 pages.

3: Common Lisp: A Gentle Introduction to Symbolic Computation, David S. Touretzky, 1990 (PDF)
This book provides a gentle introduction to symbolic computation with Common Lisp. It is a good introduction into the language itself. So this is a good start for people wanting to learn some of the core concepts (here: computing with symbolic expressions) of Lisp.

4: Common Lisp, An Interactive Approach, Stuart C. Shapiro, 1992 (PDF)
Another useful introduction for the Common Lisp language. It does not use extensive examples, but explains many of the language features.

5: Practical Common Lisp, Peter Seibel, 2005 (Web)
This book is an excellent introduction into programming with ANSI Common Lisp. It uses more 'modern' examples and background information. The examples are beyond toy examples and help understanding how various parts of Common Lisp work together. This book is best read when you have some general programming experience and want to read a non-AI Lisp introduction. Highly recommended. 500 pages.

6: On Lisp, Paul Graham, 1993 (PDF)
On Lisp is famous for its material of macro programming in Common Lisp. Out of print. The printed version is hard to get. Fortunately there is a PDF version. 432 pages.

7: Common LispWorks User Guide, 2008 (PDF, Web)
LispWorks provides a portable integrated development environment. This document describes the various development tools. It gives a good overview of the tools that are available in a modern Common Lisp implementation. Working with an interactive development environment requires a different approach. The old-fashioned way of reading the manual of the provided tools is highly recommended.

8: LispWorks User Guide, 2008 (PDF, Web)
LispWorks also provides an extended version of Common Lisp (like most implementations). This document is a good overview of the typical facilities that Common Lisp implementations provide on to of the ANSI Common Lisp standard. Again, reading the manual is highly recommended.

9: CMU Common Lisp User's Manual, Robert A. MacLachlan, (PDF, Web)
CMU Common Lisp is a public domain implementation of ANSI Common Lisp. This document explains some of the extensions that are provided. CMU Common Lisp is famous for its introduction of type-inference and type-checking, which allows the native-code compiler to generate fast machine code. SBCL is a fork of CMU CL and offers similar capabilities (including the optimizing native code compiler).

10: Performance and Evaluation of Lisp Systems, Richard P. Gabriel, 1985 (PDF)
Richard P. Gabriel describes the famous benchmark suite for Lisp systems. It might be interesting to compare the results from 1985 with systems of today. One of the design goals of Common Lisp was good performance on normal hardware (workstations and PCs with RISC or CISC processors). When Common Lisp was designed users complained that the implementations were slighly too large (for computers with RAM sizes between 8 and 32 MB). Gabriel's benchmarks are more concerned with execution speed, though. The benchmarks are still available, have been extended and even ported to other programming languages.

Let me know if you would prefer another Common Lisp document that is available online.

Keywords:
BOOK COMMON-LISP LEARNING-LISP

Feedback for this Lisp news item.
Please add to the Number 605 the Number 1 and put the result in the Number input field below.
Name:
Email:

Feedback:



Terms of use: no crawlers, no wget, no site copying, use of pictures and text only with permission. No excessive rss feed checking.

Website by Rainer Joswig, Copyright 2003-2009, feedback to joswig@lisp.de