> Is this like the difference between C's type system and ML's?

No, maybe I wasn't clear. It's hard to come up with a precise definition of the 
class of macros that John's talking about. When Matthias et al invented 
hygienic macro systems, the idea was that the system would "get scope right" 
(an intentionally vague phrase) by having the right defaults. But it's all 
defined at the level of mechanism; no one's ever been able to identify actual 
guarantees provided by hygienic macro systems.

In my work, I identified a restricted model where you *could* give precise 
definitions to these things, but that model was not the same as Scheme/Racket. 
It purposefully left out problematic programs.

> Racket allows for unhygienic macros

What this whole thread has been about is that "unhygienic macros" is a nonsense 
phrase.

> so does Racket not implement a "hygienic macro system"?

Racket is hygienic in that it has mechanisms to make scope work out "the way 
you want" most of the time by default. That you can override the defaults and 
write macros that do funky things does not make it unhygienic. Notice that I 
say "that do funky things" and *not* "that are unhygienic" because, again, the 
idea of an unhygienic macro is just pretty ill-defined in Scheme. The technique 
of "Petrofsky abstraction," while it doesn't demonstrate exactly what Al 
Petrofsky claims it does, actually demonstrates the principle that the 
intuition usually given (an "unhygienic macro" is one that captures an 
identifier that "didn't come from its input") is flawed.

Regardless, whether or not you can come up with a quasi-precise notion of what 
such macros that John's asking for a name for, the question of terminology is 
historical, not mathematical. And Matthias coined the term with the idea that a 
hygienic macro system is one that has the right defaults for scoping, 
regardless of whether you can break out of the defaults. Which means Racket is 
no less hygienic than a system with just `syntax-rules'.

Dave

_________________________________________________
  For list-related administrative tasks:
  http://lists.racket-lang.org/listinfo/users

Reply via email to