min*_*ree 12 macros module rust
我最近在一个项目中编写了很多宏.我只想到Rust的模块系统对管理"名称空间"有多么有用,我开始怀疑:
为什么决定宏不应该遵守模块系统?是因为宏观使用普遍罕见吗?还是因为其他一些基本的编译过程限制了它?
是否可以"命名"Rust宏?
这个问题不是出于迫切的需要,而是来自一般的好奇心:-)
宏扩展在"模块系统"之前运行,因此在那时没有真正设置名称解析/搜索.此外,宏可以实际创建整个模块,所以它并不一定能有整个解析系统的工作.这也是宏以声明顺序运行的原因之一(Rust中唯一真正重要的地方),因此可以定义名称和宏的可预测顺序.
所以,有一些技术问题.然而,至少有一些形式的命名空间宏真的很好.
肯定有可能(并且基本上是必要的)在板条箱之间有名称空间,也就是说,如果板条箱a和b两者都定义foo!,那么以下内容应该能够合法化
#![feature(phase)]
#[phase(plugin)] extern crate a;
#[phase(plugin)] extern crate b;
fn main() {
a::foo!();
b::foo!();
}
Run Code Online (Sandbox Code Playgroud)
这还没有实现,但我们希望最终会有这种形式.
是否可以"命名"Rust宏?
总结:不,除了通过C-namespacing : mylib_mymodule_mymacro!().