[racket] letoverlambda
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