可以编写什么样的Rust插件/语法扩展以及它们在哪里记录?

Lin*_*ope 12 rust

从1.0开始,这个站点在Rust中有六种类型的语法扩展.Decorator,Modifier,MultiModifier,NormalTT,IdentTT,和MacroRulesTT.

不幸的是,它们与这些(和相关编译器扩展)项目的文档的所有链接似乎都已不存在.实际上,即使手动搜索Rust文档中的SyntaxExtension甚至语法模块也不会产生任何结果.它似乎仍然存在于主分支的主要Rust存储库中,所以显然不仅仅是在托儿所的某个地方.

值得注意的是,该页面在某个时刻"很快"(从1.0开始)提到MultiModifier并且Modifier可能合并,但由于文档消失,我无法确认当前的Nightly.

本书只记录了基本的lints和"程序宏",它们的范围似乎相当有限.

那么,截至目前,还有6种语法扩展类型吗?他们的文档是否在某个新位置保持最新?他们每个人的表现还是和1.0左右一样吗?

Tha*_*yne 1

该网站已经过时了 \xe2\x80\x94 它来自 Rust 稳定之前。Rust 1.20 中唯一支持的“插件/语法扩展”是宏示例和自定义派生,两者都在Rust 编程语言中。不稳定的 Rust 也有自定义属性程序宏,但这两者在稳定之前可能会发生变化。

\n\n

该站点中列出的扩展类型到当前宏类型的粗略映射如下:

\n\n
    \n
  • 装饰器 -> 自定义派生
  • \n
  • 修饰符、MultiModifier -> 自定义属性
  • \n
  • NormalTT -> 程序宏
  • \n
  • IdentTT -> 程序宏(我不完全理解它们是什么,所以我不确定)
  • \n
  • MacroRulesTT -> 宏示例(又名声明性宏)
  • \n
\n\n

宏的例子很容易找到(例如stdlog板条箱广泛使用它们)。该serde_derive板条箱可能是使用自定义派生的最佳示例。

\n\n

更新:

\n\n

过程宏(包括自定义属性)在 Rust 1.30 中得到了稳定。请参阅https://doc.rust-lang.org/stable/book/ch19-06-macros.html

\n