Rustlings
我使用过一段时间 Rust,但是已经有大约一年时间没使用了,Rustlings 的练习让我重新找回对 Rust 的熟悉感。Rustlings 前面的一些部分都是通过魔改代码,让编译通过并通过测试,从而理解 Rust 的特性。因为魔改的地方就是教学的地方,所以通过魔改少量代码的方式教学,我认为是非常高效的,而 watch 功能则更快捷方便连续地学习,就跟闯关一行。
相比于 Rust-by-Example,Rustlings 更偏向于实践,更方便开发者在了解 C/C++ 等高级语言的基础上,了解 Rust 的内存安全特性,包括所有权、生命周期等机制,迁移到 Rust。Rust 更强大的枚举、元组等类型以及支持更完善的标准库,更方便开发者专注于程序算法本身,而不是对程序的具体过程操心。Rust 的迭代器抽象还能够方便的提供函数式编程,使用一行语句就完成对数组全部操作,在数学上更美观,同时应该也更方便编译器进行优化。
Rustlings 最难的部分应该是一些算法的实现。正如 Rust 的所有权机制,通常对象之间有树形的嵌套关系,而描述双向链表、图这种数据结构则并不适合使用这种关系;其中有一个练习是二叉排序树,但是不要求实现平衡。如果要实现平衡树则要考虑到树的旋转等操作,在这种所有权机制下则更难实现。而对于图,则只能对于整个图整体分配存储、整体管理,最后很容易写出 C 风格的代码,或者使用了大量的 unsafe( algorithm1 的单链表合并中就有大量 unsafe)。我也尝试过使用 Rust 练习 AtCoder,体验堪称坐牢,写 Rust 就是和编译器作斗争。所以使用 Rust 完成漂亮的算法类代码,是一门深刻的艺术。