SuperAPI AI 工具集

rust-unsafe-ffi

编程与开发

查看项目

更新于 10-15 21:48

技能介绍

用途:处理 Rust 中安全代码无法表达的操作,包括裸指针、NonNull、unsafe 函数与 trait、union、MaybeUninit、ManuallyDrop、内存布局、pinning、分配器、手动 Send/Sync、C ABI 绑定、回调、句柄及所有权转移。普通所有权设计应转向 rust-stable,并发架构转向 rust-concurrency,UniFFI 多语言绑定转向 rust-uniffi-building,通用构建脚本转向 rust-cargo-build,审查报告转向 rust-code-review。

主要能力:把 unsafe 视为证明义务,要求为每个 unsafe 操作写明安全契约,覆盖指针来源、非空性、对齐、可解引用范围、初始化与有效性、别名与可变性规则、生命周期与所有权转移、线程安全与重入、ABI 与布局、调用约定、整数宽度、错误约定以及跨边界 panic 或外部异常行为。要求用 #![deny(unsafe_op_in_unsafe_fn)] 保持 unsafe 块最小化,仅在能内部建立并维护全部不变量时才暴露安全包装器。

使用方式:先说明安全契约再写代码,对公开 unsafe API 使用 # Safety 文档、在证明处写 // SAFETY 注释。保守实现裸内存操作,ptr.add 仅限同一分配对象内或越界一位;区分对齐与非对齐读取;用 MaybeUninit 跟踪初始化状态;优先 from_ne_bytes 或显式字段转换而非 transmute。用 #[repr(C)]、#[repr(transparent)] 精确布局,padding 视为可能未初始化。FFI 边界保持狭窄,使用 std::ffi 的 C 类型或生成绑定。验证时运行 cargo fmt --all --check、cargo check --workspace --all-targets --all-features、cargo test --workspace --all-targets --all-features、cargo clippy --workspace --all-targets --all-features -- -D warnings、cargo miri test,并在支持时使用 sanitizer 或 Valgrind。

适用场景:Rust 与 C 及其他语言互操作、回调与句柄管理、手动内存管理和 Send/Sync 实现。

限制:Miri 不执行任意外部代码,测试 Rust 侧内存契约时需隔离或模拟外部调用;本地无法验证的属性必须记录。该技能不收集、存储或传输用户数据,未经授权不得向外部服务发送专有头文件、生成绑定、崩溃转储或内存内容。收费、价格等信息暂未提供。