[racket] Plea for neologism (was: Re: letoverlambda)
On Wed, Nov 24, 2010 at 11:49 AM, John Clements
<clements at brinckerhoff.org> wrote:
>
> Hang on... you're still using the term "hygienic" in the non-Felleisen way. That is, if we accept that a hygienic system is one that has well-defined behavior but where you can bind new names when you explicitly ask to, then
That's too loose a definition. The Common Lisp macro system has
well-defined behavior,
and you can bind new names when you explicitly ask, yet it is not hygienic.
I expect that Kohlbecker has a reasonable definition (but I'm too lazy
to look it up right now),
but I'd say that `hygiene' at the very least involves a default
behavior of preserving
the lexical scope at the point of macro use. I'd say that having the
ability to inject new
bindings or shadow existing ones is perhaps an `advanced feature' that
may be desirable,
but not necessary. (Frankly, I'm very opposed to injecting any sort
of binding or name
that does not appear as a literal identifier near the point of use,
but I don't really care if
other people want to write bad code.)
It is the default behavior that is of interest. It allows me to
understand code fragments
such as:
(let ((x 22))
(frob x)
x)
and to *know* that alpha-renaming `x' does not involve looking at the
expansion of `frob'.
--
~jrm