> Rust procedural macros are like external tools, manipulating the AST as a structure.
Isn't viewing them as like external tools just a C centric view, based on C's (and C++'s) capabilities? Didn't Lisp have macros that manipulated the language as an AST prior to C even existing, inside the language?
Well, Rust is closer to C++ than Lisp :)
If you look at the API https://blog.rust-lang.org/2018/12/21/Procedural-Macros-in-R...
it works on the level of raw tokens, not even the AST. So you have to construct your own AST via the parser if you want to manipulate AST.
Rust procedural macros are like external tools, manipulating the AST as a structure. In D, compile time code is seamlessly interleaved with other code – you just have `static if`, `static foreach` etc. in your code.
I'm not sure what you mean by "new pseudo-language to work with mixins". The term "mixin" is unfortunately overloaded: the `mixin()` call just splices a string into the code, while `template mixin` is a way to expand a template where you want it. Neither introduces new complex structures.