[racket] Plea for neologism
> 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