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

问题描述 投票:12回答:1

This网站在Rust中从1.0版开始有六种类型的语法扩展。 DecoratorModifierMultiModifierNormalTTIdentTTMacroRulesTT

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

值得注意的是,该页提到在某个时刻“很快”(从1.0开始)MultiModifierModifier可能会被合并,但由于文件消失,我无法确认这是当前的Nightly。

book只记录了基本的lints和“程序宏”,它们的范围似乎相当有限。

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

rust
1个回答
1
投票

那个网站已经过时了 - 它来自Rust稳定之前。 Rust 1.20中唯一支持的“插件/语法扩展”是宏示例和自定义派生,两者都在The Rust Programming Language中。不稳定的锈也有custom attributesprocedural macros,但两者都可能在稳定之前发生变化。

将该站点中列出的扩展类型与当前类型的宏的粗略映射类似于:

  • 装饰者 - >自定义衍生
  • 修改器,MultiModifier - >自定义属性
  • NormalTT - >程序宏
  • IdentTT - >程序宏(我不完全明白它们是什么,所以我不确定)
  • MacroRulesTT - >宏示例(a.k.a.声明宏)

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

更新:

在Rust 1.30中稳定了Procederual宏(包括自定义属性)。见https://doc.rust-lang.org/stable/book/ch19-06-macros.html

© www.soinside.com 2019 - 2024. All rights reserved.