A Road to Common Lisp (2018)

AlexeyBrin1 pts0 comments

A Road to Common Lisp / Steve LoshA Road to Common Lisp<br>Posted on August 27th, 2018.<br>I've gotten a bunch of emails asking for advice on how to learn Common Lisp in<br>the present day. I decided to write down all the advice I've been giving<br>through email and social media posts in the hopes that someone might find it<br>useful.

One disclaimer up front: this is a road to Common Lisp, not the road to<br>Common Lisp. It's what I followed (without some of the dead ends) and has<br>a lot of my personal opinions baked in, but it is by no means the only way to<br>learn the language.

This post has been translated into<br>Japanese.<br>I can't vouch for the accuracy of any translations.

ContextHistory<br>ConsequencesEscaping the Hamster Wheel of Backwards Incompatibility<br>Practicality Begets Purity<br>Extensibility<br>Power<br>Ugliness

A Road to Learning Common LispGet a Lisp<br>Pick an Editor<br>Hello, Lisp<br>A Gentle Introduction<br>Getting Practical<br>Make Something<br>Lisp as a System<br>Learning Paradigms<br>Switch Things Up<br>Recipes for Success<br>Final Patterns

Where to Go From HereMacros<br>Object-Oriented Programming with CLOS<br>Low-Level Programming<br>Web Development<br>Game Development<br>Window Management<br>Unit Testing<br>More Implementations

Modern Common LispStructurePackages<br>Systems<br>Projects<br>Recap

Common LibrariesAlexandria<br>Bordeaux Threads<br>CFFI<br>CL-PPCRE<br>Drakma<br>Iterate<br>local-time<br>lparallel<br>Named Readtables<br>Roswell<br>SERIES<br>st-json<br>usocket

Good Luck!

Context

I think it's important to have a sense of where Common Lisp came from and what<br>kind of a language it is before you start learning it. There are some things<br>that will seem very strange if you're coming straight from modern languages,<br>but will make more sense if you've got a bit of background context.

History

Common Lisp has a long, deep history. I'm not going to try to cover it all here<br>— if you're interested you should check out some of the following (in roughly<br>increasing order of detail):

Wikipedia's History of Lisp and History of Common Lisp.

The Where it Began section in Practical Common Lisp.

The History: Where did Lisp come from? section of the comp.lang.lisp FAQ.

Common Lisp: the Untold Story by Kent Pitman.

The Evolution of Lisp by Guy Steele and Richard Gabriel.

I realize you probably won't want to read all of the links above immediately, so<br>here's a whirlwind tour of sixty years of Lisp.

Lisp began in the late 1950's. It was invented by John McCarthy at MIT.

Over the next twenty or so years various versions and dialects of Lisp grew and<br>flourished. Some of the more notable dialects were Maclisp, BBN Lisp/Interlisp,<br>Franz Lisp, Spice Lisp, and Lisp Machine Lisp. There were others too. The<br>point is that there were a lot of different implementations, all growing,<br>changing, and trying out different things.

(Scheme also originated in this time frame, but took a very different route and<br>diverged from the path we're looking at. I won't cover Scheme in this post.)

In the early 1980s people decided that having a whole slew of<br>mutually-incompatible dialects of Lisp might be not be ideal. An effort was<br>made to take these different languages that had grown organically and produce<br>one common language that would satisfy the needs of everyone (or at least<br>a reasonable subset of "everyone"). In 1984 the first edition of Guy Steele's<br>Common Lisp: the Language was published.

If you do some math you'll see that at the time the book was published Lisp had<br>around twenty-five years of real-world use, experimentation, experience, and<br>history to draw upon. Even so, the book alone didn't quite satisfy everyone and<br>in 1986 a committee (X3J13) was formed to produce an ANSI specification for<br>Common Lisp.

While the committee worked on the standardization process, in 1990 the second<br>edition of Common Lisp: the Language was published. This was more<br>comprehensive and contained some of the things the committee was working on<br>(see the comp.lang.lisp FAQ linked above for more on this). At this point the<br>Lisp family of languages had over thirty years of experience and history to<br>draw upon. For comparison: Python (a "modern" language many people think of as<br>also being "kind of old") was released for the first time the<br>following year.

In 1992 the X3J13 committee published the first draft of the new Common Lisp<br>ANSI standard for public review (see Pitman's paper). The draft was approved in<br>1994 and the approved specification was finally published in 1995. At this<br>point Lisp was over thirty-five years old. The first version of Ruby was<br>released in December of that year.

That's the end of the history lesson. There has not been another revision of<br>the ANSI specification of Common Lisp. The version published in 1995 is the one<br>that is still used today — if you see something calling itself "an<br>implementation of Common Lisp" today, that is the specification it's referring<br>to.

Consequences

I wanted to give you a quick overview of the history of Common Lisp because I<br>want you to know what you're getting yourself into. I want you to...

lisp common history road language published

Related Articles