Macros 什么';宏和编译器插件的区别是什么?
宏能做什么,编译器插件不能做什么,反之亦然 我所说的“不能”,是指不可能达到同样的目的,而不是以不同的方式来实现Macros 什么';宏和编译器插件的区别是什么?,macros,rust,rust-compiler-plugin,Macros,Rust,Rust Compiler Plugin,宏能做什么,编译器插件不能做什么,反之亦然 我所说的“不能”,是指不可能达到同样的目的,而不是以不同的方式来实现 例如,宏可以impl结构的某些特征,编译器插件可以派生结构的某些特征。它们都可以自动impl一个结构的特征。编译器插件宏可以做任何事情macro\u规则宏可以做,还有很多。编译器插件可以注册派生宏、合成新标识符、解构AST节点、解析字符串、do文件IO等。列出所有内容都是毫无意义的,因为这相当于重新生成内部编译器API,后者会定期更改 唯一的主要限制是,它们只能访问调用它们的内容,或
例如,宏可以
impl
结构的某些特征,编译器插件可以派生结构的某些特征。它们都可以自动impl
一个结构的特征。编译器插件宏可以做任何事情macro\u规则代码>宏可以做,还有很多。编译器插件可以注册派生宏、合成新标识符、解构AST节点、解析字符串、do文件IO等。列出所有内容都是毫无意义的,因为这相当于重新生成内部编译器API,后者会定期更改
唯一的主要限制是,它们只能访问调用它们的内容,或者可以从调用它们的内容中派生出来的内容(除了一些额外的、已经存在的上下文信息):它们不能访问或处理任何不存在的内容。例如类型、名称的含义或表达式的值
好吧,有一件事编译器插件做不到,宏可以做到:跨不同版本的编译器稳定工作。(然而)只有使用编译器扩展才能在不调用宏的情况下扩展现有语法。例如,创建新的衍生-可识别特征。