Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macros 什么';宏和编译器插件的区别是什么?_Macros_Rust_Rust Compiler Plugin - Fatal编程技术网

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,后者会定期更改

唯一的主要限制是,它们只能访问调用它们的内容,或者可以从调用它们的内容中派生出来的内容(除了一些额外的、已经存在的上下文信息):它们不能访问或处理任何不存在的内容。例如类型、名称的含义或表达式的值


好吧,有一件事编译器插件做不到,宏可以做到:跨不同版本的编译器稳定工作。(然而)

只有使用编译器扩展才能在不调用宏的情况下扩展现有语法。例如,创建新的
衍生
-可识别特征。