[英]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.