[racket] letoverlambda

From: Matthias Felleisen (matthias at ccs.neu.edu)
Date: Sat Nov 20 21:58:08 EST 2010

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. The idea is roughly that 
the __macro system__ (as a whole) should respect the 
lexical structure of your program. That is, by default
no programmer should be able to accidentally write a 
macro that messes up lexical bindings in a subtle way. 

Roughly speaking, macro hygiene is like safety. The latter
also is a property of the language, meaning all programs
have it, no matter the skill of the programmer who uses
them. In particular, it doesn't make much sense to say
an individual macro is hygienic or that an individual 
program is safe. You can 'prove' certain fail-safety 
properties about each but that's all. The word 'prove'
is meant in the general sense that reasoning about 
programs constitutes an attempt to make sure it is always
exhibiting the desired properties, no matter the context, 
input, or whatever. 

(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.))

-- Matthias

Posted on the users mailing list.