宏可以做什么编译器插件不能做,反之亦然?
“不能”,我的意思是不可能达到相同的目的,而不是可以用不同的方式来达到。
例如,宏可以impl
为结构提供一些特征,编译器插件可以derive
为结构提供一些特征。它们都可以自动impl
成为结构的特征。
宏可以做什么编译器插件不能做,反之亦然?
“不能”,我的意思是不可能达到相同的目的,而不是可以用不同的方式来达到。
例如,宏可以impl
为结构提供一些特征,编译器插件可以derive
为结构提供一些特征。它们都可以自动impl
成为结构的特征。
编译器插件宏可以做所有macro_rules!
宏可以做的事情,还有更多。编译器插件可以注册派生宏、合成新标识符、解构 AST 节点、解析字符串、执行文件 IO等。列出 所有内容将毫无意义,因为它相当于复制内部编译器 API,它会定期更改.
关于唯一的主要限制是它们只能访问它们被调用的内容,或者可以从它们被调用的内容中派生出来(除了一些额外的,已经存在的上下文信息):它们不能访问或使用任何尚不存在。喜欢类型,或者名称的含义,或者表达式的值。
好吧,好的,编译器插件无法做到宏可以做到的一件事:跨不同版本的编译器稳定工作。(然而。)