Amy Farrell wrote up some impressive notes from a talk last week that Adam Jones and I gave on the clojure programming language to the pdxfunc functional programming interest group in Portland. My part of this was presented as a long-time Lisper but new to Clojure. I'm not sold on Clojure yet - I like the idea of a mostly functional, concurrent Lisp, and I like the idea of Lisp for the JVM. But is it a better choice than JScheme or SISC or the other more (IEEE and ANSI) standard Lisps? Maybe for those reasons above, but it also seems gratuitously unlike the standard Lisps.
(Update: Rich Hickey (Clojure's author and impressive dynamic force when you consider what he creates per unit of time) responds in the comments here to some of my observations in my talk. I should also say when you consider a new Lisp for the 21st century, Clojure is probably the better fit than Arc. Probably a better fit than Scheme or CL per se. Although Gambit Scheme and an evolution of Termite would be up on my list.)
This talk was patterned after the BOF on Erlang I held at last year's OSCON -- I like talking through things while evaluating them "live". At OSCON I typed everything live and that went fine. Last week I had a new laptop, and even though I like the keyboard very much (MacBook), I thought I might fumble-finger too much. So I set up all the expressions in a file beforehand and using emacs all I did was talk and type c-x-c-e to evaluate each expression in the clojure sub-process.
Not sure what's in store for the May meeting but in June pdxfunc may have a good discussion on a new set of open source web libraries for Haskell from Galois. Several Haskell enthusiasts (or more) attend pdxfunc, so maybe I'll get back into that whole typing, lazy functional thing, and learn from experts at some point.
1 comment:
Hi Patrick,
Thanks much for speaking and writing about Clojure. I'm sorry you currently find it gratuitously unlike the standard Lisps. In time, I'd hope you'd find it no more gratuitously different from Scheme and CL than they are from each other, i.e., not much at all, since the differences reflect real differences in function or perspective.
There are a few things in the notes I can clarify:
car and cdr are missing from Clojure for 2 reasons - they are not particularly descriptive, and their traditional meaning is to name cells of a two-slot data structure. Clojure uses first and rest as an interface to a sequence abstraction that is independent of any particular representation, and it is an important part of the learning curve of Clojure for Lispers to disassociate sequences from cons cells.
In Clojure, nil means "nothing" and consing 1 onto nothing, and 1 onto the empty list, both yield a list containing only 1.
Braces and brackets are not surface syntax but real data structure literals as deeply integrated in the code-as-data mechanism as are parenthesized lists.
Thanks again, and I hope you continue to investigate Clojure and participate in the group, where I'd be happy to address any questions.
Rich
Post a Comment