1 个不稳定版本
0.0.1 | 2020 年 2 月 7 日 |
---|
4 在 #nim 中
280KB
7.5K SLoC
包含 (ELF 可执行文件/库, 90KB) tests/expectations/cdecl
nbindgen
──
nbindgen 为公开 C 类 API 的 Rust 库创建 Nim 头文件——如果你的库与 cbindgen
一起工作,它也可能与 nbindgen
一起工作。
它基于 cbindgen 的分支——实际上,大部分代码是相同的,很多代码还没有更新以支持 Nim,你将发现许多关于 cbindgen
和 C
的过时引用需要更新。
虽然你可以手动完成这项工作,但这并不是特别好的时间利用方式。与基于你的实际 Rust 代码的机器生成头文件相比,这更有可能出错。cbindgen 开发者也与 Rust 开发者紧密合作,以确保我们生成的头文件反映了 Rust 的类型布局和 ABI 的实际保证。
使用 nbindgen 的有两种方式:作为独立的程序,或作为库(可能在你的 build.rs 中)。实际上并没有太大的实际差异,因为 nbindgen 是一个没有有趣依赖的简单 rust 库。作为程序使用意味着构建你的软件的人需要安装它。在库中使用意味着人们可能需要更频繁地构建 nbindgen(例如,每次他们更新他们的 rust 编译器时)。
值得注意的是,cbindgen 的发展很大程度上是临时的,因为新功能都是为了支持维护者的用例而添加的。这意味着 nbindgen 可能会随机地无法支持某些特定情况,仅仅是因为还没有人投入精力来处理它。如果您遇到这种情况,请提交一个问题。虽然我们都有其他工作要做,您可能也需要做实施工作:)
快速开始
要安装 nbindgen,您只需运行
cargo install --force nbindgen
(--force 仅在已安装的情况下将其更新到最新版本的 nbindgen)
要使用 nbindgen,您需要两样东西
- 一个配置(nbindgen.toml,可以留空开始使用)
- 一个带有公共 C API 的 Rust crate
然后,您只需要运行它
nbindgen --config nbindgen.toml --crate my_rust_library --output my_header.h
有关更多选项,请参阅 nbindgen --help
。
示例
我们目前没有很好的定制示例应用程序,但测试包含了许多我们功能的有趣示例。
您也可能对浏览使用 nbindgen 的生产项目感兴趣
- 谁将是第一个?
如果您正在使用 nbindgen
并希望被添加到这个列表中,请发起一个 pull request!
未来方向
rust 编译器生成 llvm
ir,nlvm 也是如此nlvm。将两者融合并在统一构建中直接使用 llvm IR 会更好。在此之前,这也不是一个坏选择:)
依赖项
~3–13MB
~150K SLoC