[racket] Plea for neologism (was: Re: letoverlambda)

From: Joe Marshall (jmarshall at alum.mit.edu)
Date: Wed Nov 24 15:51:00 EST 2010

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)
and to *know* that alpha-renaming `x' does not involve looking at the
expansion of `frob'.


Posted on the users mailing list.