Rust的宏编程,除了上一节讲到的声明宏,还提供另一种宏:过程宏。过程宏提供基于AST(抽象语法树 Abstract Syntax Tree),以派生宏为例:在宏展开的过程中,遇到派生宏时,会将整个结构体(或enum、union)展开成TokenStream作为派生宏函数的输入;然后,基于输入的TokenStream进行功能派生(扩展TokenStream),最后一起返回进行后续的语法分析和编译,从而实现在编译阶段对结构体、enum等进行特性派生等。过程宏的类属性宏、类函数宏与派生宏原理类似,本文将一探究竟