剖析 map、filter、fold 等组合子,理解 Rust 编译器如何将链式迭代器激进优化为无边界检查的向量化汇编代码。
1. 迭代器的惰性特性 (Lazy Evaluation)
在调用消费型适配器(如 collect()、sum())之前,迭代器适配链条不会执行任何实际计算:
let v1: Vec<i32> = vec![1, 2, 3];
let v2: Vec<_> = v1.iter().map(|x| x + 1).filter(|x| x % 2 == 0).collect();
2. 零成本性能测试
在基准测试中,Rust 的迭代器往往比手动编写的 for i in 0..len 循环更快,因为编译器能够推导出索引安全从而完全省略循环体内部的边界检查(Bounds Check)。