#erlang #nif

sys rustler_sys

使用C NIF API在Rust中创建Erlang NIF模块

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日

#115FFI

Download history 20276/week @ 2024-05-02 17978/week @ 2024-05-09 27454/week @ 2024-05-16 26268/week @ 2024-05-23 22325/week @ 2024-05-30 30569/week @ 2024-06-06 26007/week @ 2024-06-13 26549/week @ 2024-06-20 28219/week @ 2024-06-27 25357/week @ 2024-07-04 25860/week @ 2024-07-11 24606/week @ 2024-07-18 22990/week @ 2024-07-25 18089/week @ 2024-08-01 20098/week @ 2024-08-08 19431/week @ 2024-08-15

85,292 每月下载量
8 个crate中(2个直接)使用

MIT/Apache

52KB
1K SLoC

Rustler

文档 | 入门 | 示例

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

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 许可证的定义,应如上所述双重许可,不附加任何额外条款或条件。


lib.rs:

Erlang NIF API 的低级 Rust 绑定。

依赖项

~10–325KB