As someone who has spent a _lot_ of time writing declarative and procedural macros, the important thing to ask before digging into a macro is whether you need a procedural macro at all. Complex proc macros absolutely do slow builds down. In many cases, a proc macro only need to be a stub that can delegate to a declarative macro. You may not need to use syn/quote, but if you are doing any sort of processing/parsing of…
It's interesting seeing this discussion in Rust because it's the same discussion that's been happening around macros in Scheme for decades. It's one of those things where there probably is no universal correct answer, so might as well allow both in your language and let the programmer decide what's best for their case.
D also show the programming world that you don't need to go macro, or Ruby styled 'macro' that can create complicated franskeintein codes in order to achieve good metaprogramming capability [1].
[1] Metaprogramming is less fun in D (88 comments):