首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有没有可能在一个纯Rust宏中编写像‘`print!’这样复杂的东西?

有没有可能在一个纯Rust宏中编写像‘`print!’这样复杂的东西?
EN

Stack Overflow用户
提问于 2018-05-27 02:14:16
回答 2查看 763关注 0票数 8

我刚开始学习Rust宏,但文档有些有限。这很好--我想,这是一个专家特性。虽然我可以进行基本的代码生成、特征的实现等等,但一些内置宏似乎远远超出了这些,比如各种print宏,它们检查字符串文字并将其用于代码扩展。

我查看了the source for print!,它调用了另一个名为format_args的宏。不幸的是,这似乎不是在"pure Rust“中构建的,注释只是说”编译器内置“。

有没有可能在一个纯Rust宏中编写像print!这样复杂的东西?如果是这样的话,会怎么做?

实际上,我对构建“编译时trie”很感兴趣--基本上将某些固定字符串识别为在编译时固定的“关键字”。这将是性能(可能),但最主要的是我只对代码生成感兴趣。

EN

回答 2

Stack Overflow用户

发布于 2018-05-27 05:56:26

format_args是在编译器本身的libsyntax_ext机箱中实现的。该名称在register_builtins function中注册,处理该名称的代码在expand_format_args function中具有入口点。

不能使用macro_rules!构造来定义执行这种详细语法处理的宏。它们可以用procedural macro来定义;但是,这个特性目前是不稳定的(只能与夜间编译器一起使用,并且会受到突然的、未宣布的更改的影响),并且文档非常稀少。

票数 4
EN

Stack Overflow用户

发布于 2018-05-27 04:12:09

Rust宏不能解析字符串文字,因此不可能创建format_args!的直接Rust等效项。

您可以使用宏将类似函数调用的语法转换为以某种方式表示Rust类型系统中的可变参数列表的内容(例如,作为异类单链表或构建器类型)。然后可以将其与格式字符串一起传递给常规的Rust函数。但是,您将无法以这种方式实现格式字符串的编译时类型检查。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50545742

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档