Rust 实现 Vec
我们要把所有的内容汇总起来,从头开始写一个std::Vec
。因为所有编写非安全代码的工具都是不稳定的,这个项目只保证短期有效(从Rust 1.9.0开始)。除了分配器API,我们要用到的大部分不稳定代码都尽量保证和最新的形式一致。
不过,如果可能的话,我们会尽量避免使用不稳定代码。特别是,我们不会使用内在函数(intrinsics),虽然它可以使代码更好更高效,但它是永久不稳定的功能。尽管许多的内在函数已经在一些地方稳固使用了(std::ptr和str::mem使用了很多内在函数)。
也就是说我们的实现不会借助所有可能的优化手段,即使部分手段其实已经比较成熟了。我们还会深入探究种种内在的细节,哪怕实际问题并不需要这样做。
你想要高级的,我们就给你高级的。
我们先来看看结构体的布局。Vec由三部分组成:一个指向分配空间的指针、空间的大小、以及已经初始化的元素的数量。简单来说,我们的设计只要这样:pub struct Vec<T> { ptr: *mut T, c ...