Rust 标准库中的模式
Rust 标准库通过其类型系统实现了零成本抽象。
| 模式 | 位置 | 作用 |
|---|---|---|
| 迭代器 | core/iter/traits/iterator.rs | Iterator trait — 零成本抽象的可组合序列处理 |
| 写时复制 | alloc/src/borrow.rs | Cow<'a, B> — 写时克隆智能指针 |
| Arena 分配器 | bumpalo lib.rs | Bump — Rust 经典 arena 分配器,被 wasm-bindgen 和 Deno 使用 |
| 工作窃取 | Tokio worker.rs | Core::steal_work — 多线程异步运行时的工作窃取 |
| 依赖图 | Cargo resolver/ | 基于 DAG 的依赖解析,确定 crate 编译顺序 |
| 引用计数 | alloc/src/sync.rs | Arc<T> — 跨线程共享所有权的原子引用计数 |
| 驻留 | rustc symbol.rs | Symbol 是全局驻留器中的 u32 索引——所有标识符驻留实现 O(1) 比较 |
| 信号量 | Tokio semaphore.rs | Semaphore — 异步感知的有界并发控制 |
模式如何组合:编译一个 Crate
当 cargo build 编译 Rust crate 时,编译器和运行时协同使用这些模式:
cargo build▼Rust 的零成本抽象哲学意味着这些模式没有超出手写 C 实现的运行时开销。Iterator trait 编译后生成的机器码与手动循环完全相同。Cow<T> 在数据仅被读取时避免克隆。Arc<T> 仅在实际共享时才使用原子操作。