49个版本 (重大变更)
0.34.0 | 2024年7月9日 |
---|---|
0.32.1 | 2024年3月21日 |
0.30.0 | 2023年10月11日 |
0.29.1 | 2023年6月30日 |
0.2.0 | 2015年12月30日 |
#749 in 过程宏
100,805 每月下载量
在 2 crates 中使用
82KB
2K SLoC
Rustler
Rustler是一个用于在安全Rust代码中编写Erlang 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.56.1。这是在 .clippy.toml
中配置的版本。
支持的 OTP 和 Elixir 版本
Rustler 致力于支持最新的三个主要 OTP 版本以及最新的三个 Elixir 小版本。
支持的 NIF 版本
库应通过 Cargo 功能定义最小的支持 NIF 版本。默认情况下,目前是 2.15
(Erlang/OTP 21)。要使用 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 License,版本 2.0,(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 https://open-source.org.cn/licenses/MIT)
您可选择。
贡献
除非您明确声明,否则您根据 Apache-2.0 许可证定义的任何有意提交的工作成果,都应按上述方式双许可,不附加任何额外条款或条件。
依赖项
~315–770KB
~18K SLoC