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 过程宏

Download history 18389/week @ 2024-05-04 20479/week @ 2024-05-11 29972/week @ 2024-05-18 21599/week @ 2024-05-25 24039/week @ 2024-06-01 30719/week @ 2024-06-08 24365/week @ 2024-06-15 25759/week @ 2024-06-22 25031/week @ 2024-06-29 27570/week @ 2024-07-06 22611/week @ 2024-07-13 25554/week @ 2024-07-20 24745/week @ 2024-07-27 20843/week @ 2024-08-03 25230/week @ 2024-08-10 25634/week @ 2024-08-17

100,805 每月下载量
2 crates 中使用

MIT/Apache

82KB
2K 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 中启用 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-2.0 许可证定义的任何有意提交的工作成果,都应按上述方式双许可,不附加任何额外条款或条件。

依赖项

~315–770KB
~18K SLoC