原文链接: https://doc.rust-lang.org/nomicon/

Rust死灵书

黑魔法 之 Rust高级与非安全程序设计

注意:本文档讨论了诸多Rust尚未稳定的特性,可能包含一些错误或者过时的信息。

我一直期待的程序代码并未出现,取而代之的竟是这令人战栗的黑暗与不可名状的孤独。我看见了!那个让所有人都噤声不语的恐怖事实,那个不可言说的秘密中的秘密——这个精心构建的Rust语言,其实并不像它最初看起来那般坚固不朽。事实上,它竟然是非安全的,它的身躯散发着古怪的气味,滋生着诡异的寄生生物。而我,对这一切束手无策,因为它们都是在编译期发生的。

这些知识按“原样”提供,不提供任何形式的明示或暗示的保证,包括但不限于释放难以理解的恐怖的保证,这些恐怖因素会激怒你的心理,并在毫无意义的无限COS中设定你的思维方式。

本书将深入挖掘Rust非安全(unsafe)编程中的一些必要但是又可怕的细节。

如果你仍然期待着拥有一个长期且快乐的Rust编程生涯,那么现在就转身离开,彻底忘掉你曾经见到过这本书——你并不会感到生活有什么缺憾。但是,如果你计划编写非安全代码——或者仅仅是想探究一下这门语言的内在秘密——本书将给你许多有用的信息。

《Rust程序设计》那本书不同,本书假设你具备一定的基础知识。特别是你应该已经熟练掌握了基本的系统编程和Rust语言。要是还没有的话,请考虑先读这本书。我们并不假设你一定去读了,也会在适当的时候复习一下相关的基础知识。你可以跳过上面那本书直接阅读本书,但要了解我们并不会把每一个知识点都从头讲起。

本书主要作为《Rust语言参考》的高级伙伴而存在。语言参考书的存在详细描述了语言各部分的语法和语义,而死灵书的存在则描述了如何将这些部分一起使用,以及这样做时你会遇到的问题。

语言参考将告诉你引用,析构函数和展开(unwinding)的语法和语义,但不会告诉你将它们组合在一起会导致异常安全问题或如何处理这些问题。

应该注意的是,在最初编写这本书时,《Rust语言参考》处于完全失修的状态,语言参考应该涵盖的许多内容最初仅在此处记录。在那之后,尽管尚未完成,但《语言参考》已得到振兴并得到适当维护。通常,如果两个文档不一致,则应假定语言参考是正确的(它并未被认为是规范的,只是因为更好地被维护)。

本书范围内的主题包括:(不)安全的含义,语言和标准库提供的不安全原语,使用这些不安全原语创建安全抽象的技术,子类型和变体,异常安全(panic/unwind-safety),使用未初始化的内存,类型双关(type punning),并发,与其他语言(FFI)互操作,优化技巧,如何构建低于编译器/操作系统/硬件原语的方法,如何不让人们对内存模型感到恼火,以及使内存模型让人生气,等等。

死灵书并不是一个详尽描述标准库中每个API的语义和保证的地方,也不是一个详尽描述Rust的每个功能的地方。