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 日

#111Rust 模式

Download history 18385/week @ 2024-05-04 20461/week @ 2024-05-11 29965/week @ 2024-05-18 21592/week @ 2024-05-25 23981/week @ 2024-06-01 30732/week @ 2024-06-08 24348/week @ 2024-06-15 25770/week @ 2024-06-22 25020/week @ 2024-06-29 27602/week @ 2024-07-06 22590/week @ 2024-07-13 25461/week @ 2024-07-20 24835/week @ 2024-07-27 20823/week @ 2024-08-03 25227/week @ 2024-08-10 19197/week @ 2024-08-17

94,334 每月下载量
用于 7 crates

MIT/Apache

265KB
6K SLoC

Rustler

文档 | 入门 | 示例

Build Status Hex.pm package version Crates.io package version Last Updated

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-2.0许可证定义的,您有意提交的任何贡献,用于包含在作品中,应如上双许可,不附加任何额外条款或条件。

依赖项

~0.3–1.3MB
~27K SLoC