safer_ffi
使用指南
项目介绍
safer_ffi
是一个 Rust 框架,旨在轻松且安全地生成外部函数接口(FFI)。该框架主要用于注释 Rust 函数和类型,以生成 C 头文件,而不会在 Rust 代码中引入不安全代码。它受到 #[wasm_bindgen]
的启发,主要用于通过 FFI 将 Rust 暴露给 C(允许 C 代码调用 Rust 代码)。此外,它还支持通过 FFI 从 C 调用 Rust 代码(例如回调或 extern [ ]
头文件)。
项目快速启动
安装依赖
首先,确保你已经安装了 Rust 和 Cargo。然后,将 safer_ffi
添加到你的项目依赖中:
[dependencies]
safer_ffi = "0.3.0"
创建一个简单的 Rust 库
创建一个新的 Rust 库项目:
cargo new --lib my_ffi_lib
cd my_ffi_lib
在 Cargo.toml
中添加 safer_ffi
依赖:
[dependencies]
safer_ffi = "0.3.0"
在 src/lib.rs
中编写你的 Rust 代码:
#[safer_ffi::ffi_export]
fn greet(name: &str) -> String {
format!("Hello, {}!", name)
}
生成 C 头文件
运行以下命令生成 C 头文件:
cargo build
生成的头文件将位于 target/debug/my_ffi_lib.h
。
在 C 中调用 Rust 函数
创建一个 C 文件 main.c
:
#include "my_ffi_lib.h"
#include <stdio.h>
int main() {
char* greeting = greet("World");
printf("%s\n", greeting);
free(greeting);
return 0;
}
编译并运行 C 程序:
cc -o main main.c -L target/debug -l my_ffi_lib
./main
应用案例和最佳实践
应用案例:Ditto
Ditto 是一个使用 safer_ffi
的实际案例。它展示了如何在实际项目中使用 safer_ffi
来安全地生成 FFI 接口。
最佳实践
- 避免不安全代码:尽可能使用
safer_ffi
提供的注解来避免在 Rust 代码中使用unsafe
。 - 类型安全:使用
safer_ffi
提供的类型安全特性,如Option<&mut T>
和repr_c::Box<T>
。 - 自动生成检查:利用
#[ffi_export]
自动生成的检查来确保 FFI 接口的安全性。
典型生态项目
safer_ffi
生态项目
wasm_bindgen
:虽然不是直接相关,但safer_ffi
受到了wasm_bindgen
的启发,两者都旨在简化 Rust 与其他语言的互操作。cbindgen
:用于从 Rust 代码生成 C 头文件的工具,与safer_ffi
结合使用可以进一步简化 FFI 接口的生成。
通过以上步骤和案例,你可以开始使用 safer_ffi
来编写更安全的 FFI 代码。