dllaurence edited this page Sep 13, 2010 · 11 revisions
Clone this wiki locally

The Nil Wiki

A wiki for a language that doesn’t exist yet. :-)

Nil stands for “Not an Implementation of Lisp”. It is a somewhat quixotic quest to build a minimal lisp-like language using the LLVM IR as our assembly language. It is explicitly called Not an Implementation of Lisp to avoid angering “true” Lisp programmers (a “real” lisp would never tolerate being named with a non-recursive acronym, right?).

For the latest status, check out our developer blog: http://stoneknives.posterous.com


Nil’s design is inspired by a paper Paul Graham wrote based on McCarthy’s original which lists the minimal primitives necessary for a metacircular lisp interpreter:


More is needed for an implementation that can’t borrow from a host lisp, but the paper is still very useful for understanding what must be done for a minimal lisp.

Steele and Sussman wrote a famous (in lisp circles, i.e. unknown to the rest of us) series of papers sometimes known as the “Lambda papers” after the “Lambda the Ultimate Foo” naming pattern of many of them. The series is archived here


Of particular interest is The Art of the Interpreter, as it presents in detailed, metacircular form interpreters for a whole series of little lisps, roughly corresponding to the evolution of the language.

“The Art of the Interpreter” has a

A rich archive of early Lisp code and documentation is available at the lisp project archive


of the Software Preservation Group. If I’d had that when I started, I might have decided to just translate the earliest source code I could find into LLVM IR. Notable items of interest there are an earlier lisp project called ‘nil’


which resembles our Nil project in about the way that a US Navy program to build the flagship of a new class of nuclear carriers resembles building a canoe in the backyard. Also of interest is a follow-on lisp called ‘t’:


which Paul Graham (http://www.paulgraham.com/thist.html) admires for it’s clean choice of syntax (lisp has syntax?—who knew?) and keywords. It would be reasonable for our Nil to follow those choices, if we got to the point of intending it for useful work. Since it is Not an Implementation of Lisp we too can break the backwards compatibility that horribly cruds up Common Lisp’s syntax.