用途
本技能面向使用 Rust 构建高性能、内存安全的系统软件。资料说明其覆盖所有权、借用、并发、async 编程、unsafe 代码、FFI 以及系统级开发的性能优化。
适用场景
资料列出以下使用时机:
- 构建无需垃圾回收且要求内存安全的系统软件
- 开发使用零成本抽象的高性能应用
- 编写防止数据竞争的并发或并行程序
- 为 I/O 密集型工作负载(Web 服务器、数据库)创建 async/await 应用
- 处理底层代码、FFI 或硬件接口
- 用更安全的替代方案替换 C/C++ 代码
- 构建命令行工具、网络服务或嵌入式系统
- 优化应用中性能关键的代码段
- 创建在编译期保证内存安全的库
- 开发接近原生性能的 WebAssembly 模块
主要能力
所有权模型
资料说明 Rust 的所有权系统是其内存安全保证的基础,规则包括:每个值在 Rust 中恰好有一个所有者;当所有者离开作用域时,值被丢弃;所有权可以转移(移动)给新的所有者。
对于未实现 Copy 的类型,赋值会移动所有权而非复制,从而在编译期防止双重释放和移动后使用错误。对于实现 Copy 的类型(如 i32),赋值是复制而非移动。
借用与引用
借用允许在不获取所有权的情况下临时访问数据。资料给出不可变借用与可变借用的示例,并列出借用规则:
- 可以有要么一个可变引用,要么任意数量的不可变引用
- 引用必须始终有效(不能有悬垂指针)
- 可变借用与不可变借用不能共存
生命周期
生命周期确保引用始终有效。资料以 fn longest<'a>(x: &'a str, y: &'a str) -> &'a str 为例,说明 'a 生命周期参数告诉编译器返回的引用在输入引用有效期间内有效。
共享所有权模式
- Rc(引用计数):用于单线程共享所有权,配合 RefCell 实现内部可变性,借用规则在运行时而非编译期检查。
- Arc(原子引用计数):Rc 的线程安全版本,使用原子操作进行引用计数。
- Box:拥有所有权的指针,将 T 分配在堆上,适用于已知大小的递归类型、不应在栈上复制的大值、动态分发的 trait 对象。
并发模式
资料涵盖线程与消息传递(mpsc 通道)、使用 Mutex 的共享状态,并列出关键并发类型:Mutex<T>(互斥锁)、RwLock<T>(读写锁,允许多个读者或一个写者)、Arc<T>(线程安全共享的原子引用计数)、mpsc(多生产者单消费者通道)。
资料还给出 ThreadSanitizer 检测数据竞争的示例,通过 RUSTFLAGS=-Zsanitizer=thread 启用。
Async 编程
资料说明 Rust 的 async 编程允许并发 I/O 而不阻塞线程。递归 async 函数需要 Box::pin() 使 future 具有已知大小。资料还涵盖 async 闭包的移动语义、借用与可变借用,以及常见错误 E0373(async 块捕获短生命周期变量)及其解决方案(使用 async move)。
Unsafe 代码与 FFI
资料列出使用 unsafe 的场景:解引用裸指针、调用 unsafe 函数或方法、访问或修改可变静态变量、实现 unsafe trait、访问 union 字段。
FFI 部分给出从 Rust 调用 C 函数的示例,包括 #[link(name = "foo")] 与 extern "C" 声明,并说明启用控制流完整性(CFI)时,类型不匹配的 transmute 会导致程序终止,防止控制流劫持。资料还给出使用内联汇编进行系统调用的示例(Windows 内存释放)。
错误处理
资料涵盖 Result<T, E> 与 Option<T>、? 运算符(沿调用栈传播错误,类似异常但在类型签名中显式体现)、自定义错误类型(实现 Display 与 std::error::Error)。
内存安全与 Sanitizer
资料给出 AddressSanitizer 检测栈缓冲区溢出、堆缓冲区溢出、作用域后使用的示例,构建命令为:
export RUSTFLAGS=-Zsanitizer=address RUSTDOCFLAGS=-Zsanitizer=address
cargo run -Zbuild-std --target x86_64-unknown-linux-gnu
性能优化
资料涵盖零成本抽象(迭代器链被优化为简单循环)、内联与单态化(泛型函数为每个具体类型特化)、智能指针开销对比(Box 无额外开销、Rc 每次克隆/丢弃有小开销、Arc 因线程安全开销更高、Mutex 有锁获取开销、RefCell 有运行时借用检查开销)、避免分配(返回引用而非分配新 String)。
常见模式与惯用法
资料涵盖 Builder 模式、Newtype 模式(类型安全)、RAII(资源获取即初始化,通过 Drop 自动释放资源)。
闭包模式与错误
资料给出 E0500(闭包借用冲突)与 E0502(可变与不可变借用)的示例与解决方案。
使用方式
资料未提供该技能的安装命令、调用方式或具体使用步骤,暂未提供。
限制
资料未说明该技能的收费、价格、平台支持范围或效果保证,暂未提供。