By the way Bear, I read John Shutt's papers on Kernel and I wondered what your thoughts on fexprs are.
(1) fexprs are particularly bad when mixed with dynamic scope and lack of name hygiene. Because early Lisps
had dynamic scope and lacked name hygiene, people concluded that fexprs were a bad idea. This conclusion
needs to be revisited, because....
(2) With lexical scope (which mainstream Lisps today have) and name hygiene (which at least one mainstream
Lisp has today), they are a better means of syntactic abstraction than macros.
(3) Yes, even Lisp macros (!!)
(4) They make 'quote' as we have known it unnecessary (!!), and make the semantics of 'quasiquote' actively buggy.
(5) They do kinda screw compilation or optimization when implemented in a straightforward way.
(6) Shutt's language 'Kernel' retains an unnecessary separation of syntax abstraction from function definition, probably
in order to offset the compilation or optimization penalties. So, although more versatile than existing Lisps(!!) it
isn't as clean as I think it could be.
(7) IMO it is better to allow (and enforce) immutable definitions, and do the work of using immutability as an
optimization constraint - this would permit the vast majority of fexprs to be compiled/optimized as though they
were macros, saving the optimization costs of dynamic fexprs for the rare cases that need it.
(
That said, Shutt is doing it right and Kernel is in fact, semantically, a better Lisp than either Scheme or
Common Lisp.
(9) Unfortunately it's still a 'toy language', and in order to become practically a better Lisp than Scheme or
CL, somebody will have to do a hell of a lot of work building libraries and interfaces and optimizing it for
performance.
(10) Shutt is a researcher whose interest is in semantics, not a vendor whose interest is in practical uptake, so I sort of
doubt that Shutt will do the development grunt-work of building those interfaces and libraries and doing that
optimization.