知其然,知其所以然
Rust 内部机制 2026-10-02

From、Into 与类型转换

用真实编译与计数分配器验证 From / Into:标准库的无损转换(i64::from(i32)、String::from、Vec::from、HashMap::from)与有损转换没有 From(E0277);为自己的类型实现 From 让 ? 自动转换错误;impl Into<String> 参数传 &str 分配 1 次、传 String 分配 0 次;From 自反。

Rust From Into 类型转换 真实验证 动画演示
Rust 内部机制 2026-10-02

TryFrom 与失败转换

用真实运行验证 TryFrom:数值转换越界返回 Err(PosOverflow / NegOverflow),而 as 会悄悄截断(300 as u8 = 44);自己的类型 Port 实现 TryFrom<i32> 带多种校验;无损转换的 TryFrom 错误类型是 Infallible(0 字节);切片转 [u8; 4] 长度不符返回 TryFromSliceError。

Rust TryFrom TryInto 类型转换 真实验证 动画演示
Rust 内部机制 2026-10-02

Display 与 Debug

用真实运行验证 Display 与 Debug:{} 对只有 Debug 的类型报 E0277;字符串、字符、浮点的两种输出差别与 {:#?};宽度、对齐、填充、精度、符号、进制等格式化说明符;自定义 Display 用 write! 会忽略宽度而 f.pad 遵守;用 debug_struct 手写 Debug 遮掉敏感字段。

Rust Display Debug 格式化 真实验证 动画演示
Rust 内部机制 2026-10-02

Iterator Trait

用真实运行验证 Iterator trait:只有 next() 是必需的、耗尽返回 None、迭代器本身要 mut(E0596);size_hint 在 map/filter/chain/take/无穷迭代器上的上下界;next_back、by_ref、nth;from_fn、successors、repeat_with、once 现成工具。

Rust Iterator size_hint 真实验证 动画演示
Rust 内部机制 2026-10-02

自定义 Iterator

用真实运行验证自定义 Iterator:斐波那契迭代器只写 next 就获得 take/filter/count/last;带生命周期的借用型迭代器 Pairs 零拷贝产出相邻元素对;rev 需要 DoubleEndedIterator(E0277)、len 需要 ExactSizeIterator;size_hint 让 collect 的 capacity 从 1024 变成刚好 1000。

Rust Iterator 自定义迭代器 真实验证 动画演示
Rust 内部机制 2026-10-02

IntoIterator 的三种遍历方式

用真实运行验证 IntoIterator 的三种遍历:for x in &v 得 &T、&mut v 得 &mut T、v 得 T(并移动 v,E0382);为自己的集合 Bag 实现三个 IntoIterator impl,缺 &Bag 的 impl 报 E0277;数组按值迭代、BTreeMap 的键值对类型。

Rust IntoIterator for循环 所有权 真实验证 动画演示
Rust 内部机制 2026-10-02

Drop Trait 与资源释放

用真实运行验证 Drop 的执行时机与顺序:局部变量逆序、结构体字段与 Vec 元素按顺序;let _ 与 let _x 的区别;mem::drop 提前释放、mem::forget 跳过、手动调用 .drop() 报 E0040;移动后只 drop 一次;panic 展开会 drop,process::exit 不会。

Rust Drop 析构 所有权 真实验证 动画演示
Rust 内部机制 2026-10-02

Vec 扩容机制

用真实运行验证 Vec 的扩容:Vec::new 不分配,第一次 push 后 cap 为 4(u8 为 8,元素超过 1024 字节为 1),之后翻倍;逐个 push 1000 个 u64 要 1 次 alloc 加 8 次 realloc,with_capacity 只要 1 次;reserve 与 reserve_exact 的区别;扩容搬家导致 E0502。

Rust Vec 扩容 内存分配 真实验证 动画演示
Rust 内部机制 2026-10-02

VecDeque 环形缓冲区

用真实运行验证 VecDeque 的环形缓冲区:as_slices 暴露出逻辑连续的数据在物理上分成两段,元素地址证明回绕到槽位 0;make_contiguous 整理成一段;5 万次头部插入 Vec::insert(0) 最快 74.46 ms,VecDeque::push_front 最慢 0.074 ms;&VecDeque 不能当 &[T](E0308)。

Rust VecDeque 环形缓冲区 数据结构 真实验证 动画演示
Rust 内部机制 2026-10-02

LinkedList 为什么通常不是首选

用真实运行验证 LinkedList 为什么不是首选:1000 个 u64 要 1000 次 alloc,每节点 24 字节;遍历 100 万个元素 LinkedList 0.659 ms、Vec 0.132 ms;push_back 也慢于 VecDeque;优势只有 append/split_off 拼接(209ns 对 715.5µs);没有下标,E0608。

Rust LinkedList 数据结构 内存分配 真实验证 动画演示
Rust 内部机制 2026-10-02

HashMap 的哈希与扩容

用真实运行验证 HashMap:默认哈希带随机种子,4 次运行得到 4 种遍历顺序,固定种子则可复现;逐个 insert 时 capacity 3→7→14→…→1792,每次扩容 alloc 一块新表并释放旧表;remove 不释放内存、shrink_to_fit 才缩;f64 不能当键;恒为 0 的哈希让插入从 0.493 ms 涨到 29.903 ms。

Rust HashMap 哈希 扩容 真实验证 动画演示
Rust 内部机制 2026-10-02

BTreeMap 与 HashMap 对比

用真实运行对比 BTreeMap 与 HashMap:BTreeMap 遍历有序、支持 range 与前驱查询,键要 Ord;HashMap 没有 range。100 万个随机 u64 键,插入 HashMap 30.71 ms 对 BTreeMap 119.13 ms,查找 26.05 ms 对 128.90 ms;范围查询 BTreeMap 1.209µs 对 HashMap 全表过滤 2.609166ms。

Rust BTreeMap HashMap 有序 真实验证 动画演示
京ICP备2026067502号-1京公网安备11010502063487号