The Kernel Programming Language

This page is Copyright John N. Shutt 2004–2008.  Here's what you're allowed to do with it.
Last modified: 16-Mar-08.

FREE SPEECH ONLINE BLUE RIBBON CAMPAIGN

I'm developing a programming language called Kernel.  Kernel is a conservative, Scheme-like dialect of Lisp in which everything is a first-class object.

"But," you may ask, "aren't all objects first-class in Scheme?"  (I'm glad you asked.)  No, they aren't.  Special-form combiners are second-class objects.  To borrow a phrase from the original description of first- and second-class objects by Christopher Strachey, they have to appear in person under their own names.  (There are also several other kinds of second-class objects in Scheme, but special-form combiners are the most commonplace.)

The idea of first-class operative combiners, i.e., first-class combiners whose operands are never evaluated, has been around a long time.  Such creatures were supported by mainstream Lisps through the 1970s, notably under the name FEXPRs, but they made a mess out of the language semantics because they were non-orthogonal to the ordinary variety of procedures constructed via lambda.

Kernel eliminates the non-orthogonality problem by breaking the classical lambda constructor into two orthogonal parts, one of which is the Kernel constructor for first-class operatives.

First-class operatives aren't all there is to Kernel, just the most immediately obvious difference from most Lisps.  The mandate of the Kernel language is to have a clean design, flowing from a broad design philosophy as refined by a series of more specific design guidelines — just one of which is that all manipulable entities should be first-class.  Some other neat (IMHO) features of Kernel are

The Revised -1 Report on the Kernel Programming Language is available in gzipped postscript and pdf.

My doctoral dissertation, which I'm writing now, addresses the combiner-semantics of Kernel specifically. 


See also: My Academic Work page.