| The more important problem solved by Scheme's macros is
/not/ the one solved by gensym/uniq. Consider
for example (let oaf 1
(when 2 3))
With unhygienic macros, this may or may not work
depending on the definition of WHEN. There is no
way of fixing this with UNIQ. Here is a definition
of WHEN for which the above code breaks (mac when (test . body)
`(x ,test (do ,@body)))
(mac oaf (test conseq)
`(if ,test ,conseq))
In other words, to use any Arc non-primitive syntax
with any confidence, the programmer has to know the full
definition of all the macros involved. In other words,
non-hygienic macros do not define closed
abstractions.While this may be less of a problem in a multi-namespace Lisp, it certainly becomes more of an issue in a single-namespace language like Arc. |