Archive for January, 2011

“Let Over Lambda” by Doug Hoyte – a fawning review

Friday, January 7th, 2011

I have never had as much fun reading a computer language book as I have had reading Doug Hoyte’s “Let Over Lambda“. Some of it was chortling along with his unabashed Common Lisp triumphalism. Some of it was marveling at the (ab)uses to which macros can be put when conventional wisdom is turned on its head. Some of it was being tickled by his wicked choice of names (pandoric macros, flub languages). But mainly it was being propelled through 355 pages of well-paced narrative written with style, vim and brio. (Well, not so much vim as nvi, I imagine.)

This was the first book I ordered from Lulu. The quality of materials and construction seems very good. The colophon says ‘Made with lisp’, and the typography and layout are clear and familiar – ‘HCSW’ and ‘Hoytech’ have done their job well. This LOL is an attractive and pleasantly-sized monograph.

The content is fascinating and deliberately provocative. I found this highly entertaining. It seems, from the ‘Clarifications‘ section Hoyte has felt he has had to add to the book’s site, that others didn’t. Lighten up, guys. If you disagree with something someone says, the remedy is not to shout down the speaker, but to make your own case – more speech, not less. Hoyte says: “If this book has only one purpose, it is to inspire the study and research of macros… I hope readers of this book might also be so inspired that some day I might enjoy even better lisp macro tools and even more interesting lisp macro books.” This theme continues throughout LOL. Take him up on it – I would love to read more books like this one.

“Let Over Lambda” is truffled with interesting observations: macrolet is for codewalking; referential transparency is (usually? often?) a bad thing; there exists sub-lexical scope (and super sub-lexical scopes); opening closures can be fun and profitable. And with thought-provoking constructs: defmacro! and its o!vars and g!vars (which I never got comfortable with, but which I can certainly see having great utility in iterative development); #` (that’s SHARP-BACKQUOTE – which I did get very used to); alambda, dlambda and plambda; with-pandoric. And so much more: declarations, compiler-macros, cons-pools, benchmarking, sorting networks, Forth – and the power of the duality of syntax… There is something to provoke, entertain and ponder on almost every page.

And every few pages Hoyte gives a new name to a phenomenon. Since most of these don’t seem to have a name yet, this is a valuable contribution to the task of exploring and mapping the uncharted spaces of macro combination…

If you can’t bear to have your preconceptions challenged with energy but good humour, don’t buy this book. Otherwise “Let Over Lambda” really deserves a place on your bookshelf.