Scott: That’s a good question, and I don’t actually know the answer.
Most Scheme implementations take a distantly-related approach. They generally have two different hygenic macro systems:
- A “low-level” macro system, which works roughly like LISP, but which provides hygiene by default, but also provides the ability to violate hygiene selectively. This tends to be a bit fiddly to use.
- A “high-level” macro system, which is based on hygienic rewrite rules. This is very easy to use, and will work for nearly all common macros.
Of course, using the low-level macro system, you can easily implement Lisp-style non-hygienic macros.
The PLT people have recently added another very slick feature to the standard Scheme toolkit: The ability the selectively violate hygiene from inside rewrite rules, in a carefully controlled fashion. This is a really nice feature, and we’ve been using it at work with great success.