我正在为Rust中的R构建扩展API。我用程序宏注释函数,以生成具有适当转换和错误处理的C包装程序:
use extendr_api::*;
#[export_function]
fn hello() -> &'static str {
"hello"
}
这会生成一个可从R调用的C函数hello__wrapper__
使用.Call
机制。除此之外,我们需要为R生成一个NAMESPACE文件
元数据:
export(hello)
useDynLib(libhello, "__wrap__hello")
和一个文件lib.R
hello <- function() {
.Call("__wrap__hello")
}
扩展 cargo 或使用rust 的最简单方法是什么写这些额外的信息?我正在猜测
从程序宏代码写入文件是
一个坏主意。
最佳答案
据我了解,过程宏会在编译时生成代码,但它必须是有效的Rust代码。在这种情况下,我认为不应该使用程序宏。
一种可能的解决方案是创建一个脚本,该脚本将在Rust文件中查找并找到导出的函数,并生成所需的2个额外文件。如果要在Rust中进行所有解析,可以制作一个build script在编译前运行,否则我建议使用类似Python的方法。
关于r - 如何从Rust程序宏生成文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62535291/