12个稳定版本
2.4.3 | 2024年8月5日 |
---|---|
2.4.2 | 2024年7月9日 |
2.4.1 | 2024年5月29日 |
2.4.0 | 2024年3月20日 |
2.0.0 | 2019年9月7日 |
#115 在 FFI
85,292 每月下载量
在 8 个crate中(2个直接)使用
52KB
1K SLoC
Rustler
Rustler是一个库,用于在安全的Rust代码中编写Erlang NIF。这意味着你的Rust NIF代码不应该能够崩溃BEAM(Erlang虚拟机)。该库提供了与BEAM交互的模板代码生成功能,处理Erlang术语的编码和解码,并在它们回滚到C之前捕获rust恐慌。
该库为Erlang和Elixir提供了功能,但截至目前,Elixir更受欢迎。
功能
安全性:你编写的Rust NIF代码永远不会能够崩溃BEAM。
互操作性:将rust值解码和编码为Erlang术语就像调用一个函数一样简单。
类型组合:使用单个属性使Rust结构可编码和可解码到Erlang或Elixir。
资源对象:允许你安全地将Rust结构的引用传递到Erlang代码中。该结构将在不再被引用时自动删除。
入门
最简单的方法是使用rustler Elixir库。
- 将rustler Elixir库添加到你的项目的依赖项中。
- 运行
mix rustler.new
在项目中生成一个新的NIF。按照说明进行操作。 - 如果您已经在使用
serde
或之前使用过serde_rustler
,请确保在 NIF crate 的Cargo.toml
文件中启用了serde
功能,针对rustler
依赖项。
它看起来像什么
这是添加两个数字并返回结果的极简 NIF 代码。
#[rustler::nif]
fn add(a: i64, b: i64) -> i64 {
a + b
}
rustler::init!("Elixir.Math");
最低支持的 Rust 版本 (MSRV)
Rustler 目前最低支持的 Rust 版本 (MSRV) 为 1.70。这是在 .clippy.toml
中配置的版本。
支持的 OTP 和 Elixir 版本
Rustler 旨在支持最新的三个主要 OTP 版本以及最新的三个 Elixir 小版本。
支持的 NIF 版本
库应通过 Cargo 功能定义最低支持的 NIF 版本。默认值目前为 2.15
(Erlang/OTP 22)。要使用 NIF 版本 2.16
(Erlang/OTP 24)或 2.17
(Erlang/OTP 26)的功能,必须在依赖项上启用相应的功能标志。
[dependencies]
rustler = { version = "...", features = ["nif_version_2_16"] }
社区
您可以在 Matrix 上的 #rustler:matrix.org
频道或 Elixir 语言 Slack 中的 #rustler
频道找到我们。
许可证
许可方式为以下之一
- Apache 许可证 2.0 版(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非您明确说明,否则您有意提交给作品以供包含的任何贡献,根据 Apache-2.0 许可证的定义,应如上所述双重许可,不附加任何额外条款或条件。
lib.rs
:
到 Erlang NIF API 的低级 Rust 绑定。
依赖项
~10–325KB