In CL, macros can be not hygienic, and sometime this is necesary for introducing advanced side-effects. Sometime they have dynamic-binding, because they capture the content of public variables at run-time.
In Scheme, macro are hygienic by construction, but they are less powerfull.
A good apporach can be:
- allows non hygienic-macro
- warn if some part of the macro is potentially non-hygienic
- the programmer can put a meta-info note, saying that he is aware of the fact, and it is intendeed