r - 如何从Rust程序宏生成文件?

标签 r rust rust-proc-macros

我正在为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/

相关文章:

remDr$open() 将 RSelenium 与 phantomjs 一起使用时出现意外错误

rust - 推断调用包的名称以在过程宏中填充一个 doctest

rust - 如何创建类似函数的过程宏?

javascript - 查询嵌入在 Shiny 应用程序中的数据表的状态/属性

r - 在 Shiny 中仅从复选框组获取一次值

r - 如何对具有多个组的数据集对每个组进行 PCA?

postgresql - 在 rust-postgres 中使用固定精度数字的正确方法是什么?

data-structures - "overflow while adding drop-check rules"实现手指树时

rust - 如何使用 no_std 且没有分配器将输出格式化为字节数组?

rust - 实现 proc 宏时的循环包依赖