用途:面向 Rust 元编程,讲解宏与泛型的取舍,以及声明宏与过程宏的编写模式。资料对比宏与泛型:宏侧重代码变换,泛型侧重类型抽象;宏编译成本对增量友好,泛型有单态化开销;宏报错可能晦涩,泛型更清晰;宏可减少样板,泛型适合通用算法。
主要能力:提供四类模式。声明宏 macro_rules! 做模式匹配与代码生成;派生宏(proc_macro_derive)为结构体生成 Builder 等代码;函数式过程宏(proc_macro)在编译期解析校验并生成代码;属性宏(proc_macro_attribute)包装函数,如生成缓存。还列出重复匹配语法:$()、$($x),*、$($x),+ 以及 :ty、:expr、:pat、:ident、:path、:tt 等匹配器,并给出 create_struct 示例。
使用方式:先判断能否用泛型解决,再选宏类型;声明宏适合简单匹配、编写快但能力有限;过程宏能访问完整 AST、适合复杂变换,但需独立 crate 且编译较慢。调试用 cargo expand 查看展开,可指定模块或测试;验证命令包括 cargo expand、cargo expand path::to::module、cargo check -p my-proc-macro、cargo test --all-features。常用 crate:syn、quote、proc-macro2、derive-more、darling。
适用场景与限制:适合减少样板、语法变换、派生实现与编译期校验。需注意卫生性(避免变量捕获冲突)、设计友好错误信息、控制过程宏编译时间、测试展开结果。审查清单包括是否可改用泛型、是否文档化展开、错误信息是否可读、边界是否测试、是否使用 cargo expand 验证、编译开销是否可接受、是否引入不必要的过程宏依赖。资料未提供具体收费、平台或其他事实。