背景
高性能或底层场景里,Rust 项目经常需要少量 unsafe。问题不在于有没有 unsafe,而在于是否可审计。
审计清单
- 每个 unsafe block 有明确不变量说明
- 边界输入做前置校验
- 单测覆盖成功与失败路径
- 关键模块做 fuzz 或 Miri 检查
// SAFETY: ptr 来自有效切片起始地址,len 已做边界校验。
unsafe {
std::ptr::copy_nonoverlapping(src.as_ptr(), dst.as_mut_ptr(), len);
}
总结
unsafe 管理的核心是制度化约束,不是个人经验。
能解释安全前提的 unsafe,才是工程可接受的 unsafe。