cross
|
|
The Lispy item.
|
Sep 8 15:34 UTC 2010 |
This item is for discussion of all things Lisp.
Dating from 1958, Lisp is the second oldest language still in active
use, predated only by FORTRAN. There have been many Lisp dialects
over the years, but only four have any real following:
Common Lisp: by far the largest, and in many ways the most complete
dialect, Common Lisp emerged in the 1980s as a standard to unify the
many research dialects of Lisp then in common usage. It has undergone
something of a renaissance in the past few years.
Scheme: Developed in 1975 by Gerald Sussman and Guy Steele at MIT,
Scheme was originally designed as a vehicle for studying the then-new
Actor model. Originally called "Schemer", the present name is an
artifact of the six character filename length limit on MIT's
Incompatible Timesharing System (ITS), which ran on the PDP-10 Sussman
and Steele used for the development of Scheme. Though often thought
of as a teaching language, because of its simplicity and small size,
it's quite capable. The GNU project uses Scheme as the basis of their
Guile interpreter, the official embedded extension language for GNU
programs.
Clojure: One of the new languages to emerge in the past few years that
targets the Java virtual machine, Clojure is a modern dialect with a
strong concurrency model and excellent Java interoperability support.
Emacs Lisp: The emacs extension language. Not a particularly good
Lisp, by Richard Stallman's own admission. Included just for the
sheer amount of emacs Lisp code out there.
|
cross
|
|
response 1 of 2:
|
Sep 8 15:46 UTC 2010 |
The origins of some Lisp nomenclature....
LISP is short for LISt Processing, and indeed, the eponymous data
structure in Lisp is fundamental.
There are two basic operations for taking lists apart: one to take the
first element in a list, usually called 'CAR' (called "first" in
Clojure), the second to return the rest of the list, usually
called 'CDR' (called "rest" in Clojure). These operations owe their
names to early Lisp implementations on the 36-bit IBM 704, 7090, and
7094, which had operation codes for taking 15 bit values and storing
them in a single 36-bit machine word (the other six bits were used as
flags and the like). These fields were called the address and
decrement fields, and there were instructions that took the 'Contents
of Address Register' and 'Condents of Decrement Register.' The
mnuemonics for these instructions eventually made their way into Lisp;
it is with some sadness that one finds them missing from Clojure.
Paul Graham has written extensively on Lisp and the things that make
it unique. Among others, the notion of 'code as data'; that is, Lisp
code is written as Lisp data (called forms, which are represented as
nested lists). This allows for all sorts of neat manipulations to be
performed on code, which leads to the notion of macros, but not in the
sense of the C preprocessor: Lisp macros work on entire expressions,
and are quite capable of destructuring code. Indeed, the whole of
Lisp is available at compile-time during macro-expansion, leading to
immense power. More of Graham's thoughts on what makes Lisp unique
are here: http://www.paulgraham.com/icad.html
I confess, Lisp is among my favorite programming languages.
|