繁体   English   中英

如何从 Rust 过程宏生成文件?

[英]How can I generate files from Rust procedural macros?

我正在为 Rust 中的 R 构建扩展 API。 我使用过程宏注释我的函数以生成 C 包装器,并进行适当的转换和错误处理:

use extendr_api::*;

#[export_function]
fn hello() -> &'static str {
    "hello"
}

这会生成一个 C function hello__wrapper__ ,可以使用.Call机制从 R 调用。

除此之外,我们需要为 R 元数据生成一个 NAMESPACE 文件:

export(hello)
useDynLib(libhello, "__wrap__hello")

还有一个文件lib.R

hello <- function() {
  .Call("__wrap__hello")
}

扩展 cargo 或 rustc 以编写此附加信息的最简单方法是什么? 我猜从程序宏代码编写文件是个坏主意。

据我了解,过程宏在编译时生成代码,但它必须是有效的 Rust 代码。 在这种情况下,我认为程序宏不是通往 go 的方法。

一种可能的解决方案是创建一个脚本,该脚本将通过 go 并在 Rust 文件中找到您导出的函数,并生成您需要的 2 个额外文件。 如果你想在 Rust 中进行所有解析,你可以制作一个在编译之前运行的构建脚本,否则我会建议像 Python 这样的东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM