Macros are the most powerful tool for making DSLs, which means they pop up in a lot of &quot;specialized&quot; niches, like web dev.  You can make DSLs in other ways, but without the ability to inspect and decompose code at the per-token level, there are limitations to what can be done.<p>Elixir macros are like Scheme macros; they&#x27;re fully hygienic (no variable namespace issues), and they evaluate at compile time.  The main difference is that Scheme&#x27;s main syntax construction is the linked list, and Elixir uses a richer data structure, almost equivalent to JSON.  Aside from the particular structure the macro&#x27;s manipulating, the concepts are the same.<p>Elixir macros are also used idiomatically to allow &quot;smart&quot; loading of modules, e.g. specifying additional code to run in the caller&#x27;s context rather than the callee&#x27;s.  They fit nicely for this purpose.