3 ms·
Huh? D metaprogramming is much closer to "normal code executed at compile time". Rust procedural macros are like external tools, manipulating the AST as a stru
by floatboth 7y ago
Huh? D metaprogramming is much closer to "normal code executed at compile time".
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.
- kbenson 7y ago> 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?
- floatboth 7y agoWell, Rust is closer to C++ than Lisp :) If you look at the API https://blog.rust-lang.org/2018/12/21/Procedural-Macros-in-Rust-2018.html 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.