[racket] letoverlambda

From: Eli Barzilay (eli at barzilay.org)
Date: Sat Nov 20 22:23:26 EST 2010

An hour and a half ago, Greg Hendershott wrote:
> Anaphoric macros are deliberately unhygienic.

Not necessarily -- see syntax parameters.  The idea is that there is
an identifier (like `it') which is managed like all other identifers,
and it has some use only inside some lexical context (like the
consequence branches of an `if').

> [...]  To put it another way, is the negative reaction here due to
> him dissing hygiene, or is it reflective of a deeper and broader
> disagreement with the entire approach of putting macros on a
> pedestal?

In my case, my negative reaction is to CLers who think that hygiene is
somehow equivalent to `syntax-rules', and because `syntax-rules' has
the limitations that it does, they conclude that hygiene as a whole is
an academic toy.  One that you dump when you get to write Real Code.

20 minutes ago, Matthias Felleisen wrote:
> On Nov 20, 2010, at 9:01 PM, Greg Hendershott wrote:
> > But I didn't get the impression that all or even most of the macro
> > techniques were unhygienic.
> Hygiene is a technical term. [...]

BTW, there's a good number of CLers that object to the actual term,
since they see it as something that implies that their macros are

> (When I coined the phrase 'hygienic macro' I was reading 
> a paper by Barendregt who used it in a similar context 
> for dismissing detail concerns about substitution in LC. 
> (My coauthors loved the term and so we took it. Another
> candidate had been 'synthetic' or something like that.))

[IMO, a good term would be one that makes CL macros be "symbolic" or
"concrete" -- something that indicates that the good macros are ones
where you don't usually care about the actual characters that make up
an identifier in code that you write...]

40 minutes ago, Robby Findler wrote:
> (like the paragraph that complained about booleans in Scheme; it
> didn't make much sense to me).

I think that it is just a confused criticism -- he *probably* intended
to praise the CL property that false is the same as the empty list,
and that many core functions (like `car' and `cdr') return nil when
given it instead of throwing an error.  If this is wrong, then he
knows so little about scheme that he should never have mentioned it.
If it's true, then it indicates bad sloppiness on his part -- the kind
that exposes biased opinion.

10 minutes ago, Shriram Krishnamurthi wrote:
> In particular, something many people miss -- because of the way
> hygiene is presented -- is that a hygienic macro system must have a
> deep understanding of the underlying language, at least up to the
> level of the binding structure of its constructs.  That is how it
> can even be sure what is a binding, where it is bound, and thus what
> can be painted/renamed/closed over/tweaked/whatever.

+1.  I like to say that CL macros make a huge jump from CPP or M4:
from unstructured text to structural "pre-parse" trees.  And due to
what Shriram says, hygienic macros make an equally huge jump to having
information about the binding structre (more or less) of the code.
(And in this context "hygienic macros" really mean all
hygiene-breaking `syntax-case'-style macros -- since the information
was there even if some macro chose to inject a concrete name.)

          ((lambda (x) (x x)) (lambda (x) (x x)))          Eli Barzilay:
                    http://barzilay.org/                   Maze is Life!

Posted on the users mailing list.