On May 1, 2009, at 5:24 PM, Michael Wood wrote:

I don't think it's so hard and fast.  I think of it more like somefunc
is the usual thing, and somefunc* is similar, but not as commonly
used.  Maybe someone else has a better explanation/definition.

The special forms are documented at http://clojure.org/special_forms. It's that definitive description of the behavior of each special form that Clojure programmers should program to. Exactly how a special form is implemented is not a promise of the Clojure language. Instead, it's an internal detail of a specific implementation of Clojure.

The special forms should generally be considered as fundamental building blocks in Clojure. Whether or not there are quarks inside those protons is something that the vast majority of Clojure programmers will never need to care about. [1]

Roughly speaking, the macro expansion process produces code that's all special forms which is then compiled. [2]

In one of Rich's presentations, he noted that one reason he wanted Clojure to be a Lisp was so that as an individual he had some prayer of writing a compiler for it. This property of Lisp--that ultimately only a small number of constructs actually generate code--helped make that possible.

--Steve

[1] Those that are interested in how things work beyond that level of detail should read the source code for the particular implementation of Clojure they're working with.

[2] In reality a few more things generate code. I'm not an expert in Clojure compilation, but it seems the compiler would need to generate code for: data literals, data structure literals, function calls, dereferencing of objects represented by symbols and perhaps a few other constructs. The point is that the entire set things for which the compiler needs to generate code is tiny compared to a non-Lisp language like Java.

Attachment: smime.p7s
Description: S/MIME cryptographic signature

Reply via email to