Rustler使用 Rust 编写 Erlang NIF 库
Rustler 实现了用安全的 Rust 代码编写 Erlang NIF 的库。 这意味着应该没有办法让BEAM(Erlang VM)崩溃。 该库提供了用于生成样板的工具,用于与BEAM交互,处理Erlang术语的编码和解码,并在它们展开到C之前捕获 Rust 错误。
Erlang 的 NIF(Native Implemented Function)被用来扩展erlang的某些功能,一般用来实现一些erlang很难实现的,或者一些erlang实现效率不高的功能。
NIF使用C开发,效率和C接近,比纯erlang实现要高。NIF会编译成动态库,直接动态加载到erlang进程空间调用,也是erlang扩展新方法最高效的做法。调用NIF不用上下文的切换开销,但是也有代价,NIF的crash会导致整个Erlang进程crash。
该库提供了 Erlang 和 Elixir 的功能,但目前 Elixir 更受欢迎。
特性:
- 安全 - The code you write in a Rust NIF should never be able to crash the BEAM.
- 互操作 - Decoding and encoding rust values into Erlang terms is as easy as a function call.
- 类型组合 - Making a Rust struct encodable and decodable to Erlang or Elixir can be done with a single attribute.
- 资源对象 - Enables you to safely pass a reference to a Rust struct into Erlang code. The struct will be automatically dropped when it's no longer referenced.
开始使用
最简单的入门是使用 rustler elixir library.
- 为你的项目添加 rustler elixir library 依赖
- 运行
mix rustler.new
生成一个新的 NIF
注意: 如果你以前用过 Rustler, 你需要先运行 mix archive.uninstall rustler_installer.ez
来移除之前生成的 NIF。
示例代码:
use rustler::{Encoder, Env, Error, Term}; mod atoms { rustler::rustler_atoms! { atom ok; } } rustler::rustler_export_nifs!( "Elixir.Math", [ ("add", 2, add) ], None ); fn add<'a>(env: Env<'a>, args: &[Term<'a>]) -> Result<Term<'a>, Error> { let a: i64 = args[0].decode()?; let b: i64 = args[1].decode()?; Ok((atoms::ok(), a + b).encode(env)) }
评论
Rust Doom用 Rust 编写的 Doom 渲染器
Rust Doom 是一个用 Rust 编写的 Doom 1 & 2 渲染器。这些代码主要是
Rust Doom用 Rust 编写的 Doom 渲染器
0
Rust Doom用 Rust 编写的 Doom 渲染器
RustDoom是一个用 Rust 编写的Doom1&2渲染器。这些代码主要是基于DoomWiki和非官方的DoomSpecs,并不是将原始的DoomC源代码移植到Rust中;构建说明Rust
Rust Doom用 Rust 编写的 Doom 渲染器
0
eCouchCouchDB的ErLang客户端库
eCouch是一个用ErLang语言编写的应用程序,用于访问CouchDB服务器。主要的特性包括:eCouchisanapplicationthatprovidesanAPItoaCouchDbser
eCouchCouchDB的ErLang客户端库
0
Rust SGX SDK用 Rust 编写 Intel SGX 应用
RustSGXSDK是一个来自百度安全实验室的开源项目,它将Rust语言和IntelSGX技术进行结合,可通过该项目用Rust语言编写IntelSGX应用程序。环境要求Ubuntu16.04Intel
Rust SGX SDK用 Rust 编写 Intel SGX 应用
0