Skip to the content.

Introduction(引言)

全书定位

作者(Gankra,Rust 标准库集合模块的前维护者)经常被问”如何用 Rust 实现链表”,答案取决于具体需求、难以当场说清,于是写这本书一劳永逸地回答。全书通过实现 6 种链表来教授从基础到进阶的 Rust 编程。

本书基于 Rust 2018 edition(rustc 1.31,2018-12 发布)。使用更新的工具链即可;用更老的工具链会触发书中未提及的额外编译错误(作者戏称为 “hardmode”)。

将实现的 6 种链表

  1. A Bad Singly-Linked Stack —— 糟糕的 Box 单链栈
  2. An Ok Singly-Linked Stack —— 合格的单链栈(泛型、Option、借用、迭代器)
  3. A Persistent Singly-Linked Stack —— 基于 Rc 的持久化(函数式)单链栈
  4. A Bad But Safe Doubly-Linked Deque —— 基于 Rc + RefCell 的安全双端队列
  5. An Unsafe Singly-Linked Queue —— 用 unsafe + raw pointer 实现的单链队列
  6. TODO: An Ok Unsafe Doubly-Linked Deque —— 更完善的 unsafe 双端队列(成书时未完成)
  7. Bonus: A Bunch of Silly Lists —— 附录:各种搞笑链表

学习目标(覆盖的 Rust 概念)

链表之所以是绝佳的教学载体,正是因为它”足够糟糕”,以至于在实现过程中会真实碰到上述所有概念。

开发环境

> cargo new --lib lists
> cd lists

学习前提与教学方式

PSA:作者痛恨链表(以及为什么不重要)

核心立场:linked list 是糟糕的数据结构。在 Rust 程序中,99% 的场景应该用 Vec(array stack),剩下 1% 中的 99% 应该用 VecDeque(array deque)。原因:分配次数更少、内存开销更低、真正的随机访问、cache locality。链表的适用场景(大量 split/merge、lock-free 并发、内核 intrusive list、纯函数式语言)都是罕见例外而非普遍情况。

常见反驳及作者的回应

本站所有文章转发 CSDN 将按侵权追究法律责任,其它情况随意。