&gt; So, in your rot13 example compiler would rat all the new identifiers with their origins to the tools.<p>How can the compiler know which identifier connects to which origin, unless because the macro complied with some standard&#x2F;restriction&#x2F;protocol? From a certain perspective all I&#x27;m suggesting is making these protocols part of the language standard - that is, <i>define</i> the DSL that&#x27;s used to define DSLs, rather than allowing macros to consist of arbitrary code.