Thursday, September 1, 2011

Mortal combat

A slightly confused anonymous commenter (I get to say such things about anonymous commenters, right?) reminded me of this quote by Ray Dillinger:
The scheme community is now very invested in its macrology; they got there by long hard work and emotional processing and yelling and screaming and weeping and gnashing of teeth, and they still remember the pain of not having a standard macrology. You will not pry it away except from their cold dead fingers, and you will not redefine it without defeating them in mortal combat.
I think the commenter misunderstood my earlier post. Syntactic extension is absolutely necessary, and modern Scheme macro systems are a fine way to do it.


patrickdlogan said...

Have you had a chance to re-read Dybvig's "Expansion Passing Style"? I really see that as a far-too-neglected work, because it came along about the same time as the fervor over "hygiene". I'd much rather have the power over the hygiene, if I had to choose. It's trivial to implement, and then defining new expansions is just as easy.

Manuel Simoni said...

Yes, but I drank so much hygiene kool-aid, that you will not pry it away except from my cold dead fingers, and I must say that I find Kernel's story even more convincing (the basic idea being to never quote in the first place).

patrickdlogan said...

Too bad. :^(

Manuel Simoni said...

Patrick, I don't know what your objections to hygienic macro systems are. Recent variants such as SRFI 72 are an advance over old-school Lisp macros on all fronts. And Kernel shows that fexprs make it even easier to be hygienic - by dropping macros-as-preprocessors, and instead making lexically-scoped fexprs the core part of the language, thereby being able to reuse plain old lexical scope itself for hygiene - as it was meant to be all along.

dmbarbour said...

"Syntactic extension is absolutely necessary"

Syntactic abstraction is necessary. I'm not at all convinced about the 'extension' aspect, though. Recently, I'm aiming at user-definable syntax without extensibility.