gpt4 book ai didi

macros - 是否可以使用 "namespace"Rust 宏?

转载 作者:行者123 更新时间:2023-11-29 07:42:50 24 4
gpt4 key购买 nike

我在最近的项目中写了很多宏。我只是在想 Rust 的模块系统对于管理“命名空间”有多么有用,我开始怀疑:

  1. 为什么决定宏不应该也遵守模块系统?是因为宏的使用普遍很少吗?还是因为其他一些基本的编译过程限制了它?

  2. “命名空间”Rust 宏是否完全可能?

这个问题不是出于迫切需要,而是出于普遍的好奇心:-)

最佳答案

宏扩展在“模块系统”之前运行,因此此时名称解析/搜索并未真正设置。此外,宏实际上可以创建整个模块,因此不一定可能让整个解析系统正常工作。这也是宏按声明顺序运行的部分原因(这是 Rust 中唯一真正重要的地方),因此名称和要定义的宏有一个可预测的顺序。

因此,存在一些技术问题。不过,如果至少有某种形式的命名空间宏,真的会很好。

在 crate 之间有命名空间肯定是可能的(并且本质上是必要的),也就是说,如果 crates ab 都定义了 foo!,那么下面应该可以合法了

#![feature(phase)]

#[phase(plugin)] extern crate a;
#[phase(plugin)] extern crate b;

fn main() {
a::foo!();
b::foo!();
}

这还没有实现,但我们希望最终会有这种形式的东西。

Is it at all possible to "namespace" Rust macros?

总结:不,除了通过 C 命名空间:mylib_mymodule_mymacro!()

关于macros - 是否可以使用 "namespace"Rust 宏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24794821/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com