宏和编译器插件之间有什么区别?

时间:2016-09-17 18:00:49

标签: macros rust rust-compiler-plugin

宏可以做什么,编译器插件不能,反之亦然?

“不能”,我的意思是不可能达到同样的目的,而不是以不同的方式实现。

例如,一个宏可以impl某个结构的特征,编译器插件可以derive结构的某些特征。它们都可以自动impl结构的特征。

1 个答案:

答案 0 :(得分:2)

编译器插件宏可以完成macro_rules!个宏可以做的所有事情,还有更多。编译器插件可以注册派生宏,合成新标识符,解构AST节点,解析字符串,执行文件IO,等。等。列出一切都没有意义,因为它会相当于重现内部编译器API,它会定期更改。

关于唯一的主要限制是他们只能访问他们所调用的内容,或者可以从他们调用的内容中获取(除了一些额外的,已经存在的上下文信息):他们无法访问或工作任何尚未存在的东西。类似于类型,或者名称的含义,或者表达式具有什么价值。

嗯,好吧,有一个的东西,编译器插件不能做那个宏可以:在不同版本的编译器上稳定工作。 (然而。