47 个版本 (重大更改)
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.1.0 | 2015 年 8 月 18 日 |
#111 在 Rust 模式
94,334 每月下载量
用于 7 crates
265KB
6K 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
中的rustler
依赖项上启用serde
功能。
它的样子
这是添加两个数字并返回结果的极简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版本
库的最小支持的NIF版本应通过Cargo功能定义。默认情况下,目前是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, Version 2.0, (LICENSE-APACHE或http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT或http://opensource.org/licenses/MIT)
任选其一。
贡献
除非您明确声明,否则根据Apache-2.0许可证定义的,您有意提交的任何贡献,用于包含在作品中,应如上双许可,不附加任何额外条款或条件。
依赖项
~0.3–1.3MB
~27K SLoC