简介
本书是 Rust 编程语言的主要参考资料。它提供了三种材料:
- 非正式地描述每种语言结构及其用法的章节。
- 非正式地描述内存模型、并发模型、运行时服务、链接模型和调试功能的章节。
- 提供基本原理以及对影响设计的语言的参考的附录章节。
警告: 本书尚未完成。记录所有内容需要一些时间。有关本书中未记录的内容,请参阅 GitHub 问题。
Rust 版本发布
Rust 每六周发布一个新的语言版本。该语言的第一个稳定版本是 Rust 1.0.0,紧随其后的是 Rust 1.1.0 等等。工具 (rustc
、cargo
等) 和文档 (标准库、本书等) 与语言版本一起发布。
本书的最新版本,与最新的 Rust 版本匹配,始终可以在 https://doc.rust-lang.net.cn/reference/ 上找到。以前的版本可以通过在“reference”目录之前添加 Rust 版本来找到。例如,Rust 1.49.0 的参考位于 https://doc.rust-lang.net.cn/1.49.0/reference/。
参考 不是什么
本书不作为该语言的入门教材。 假定读者对该语言有一定的背景知识。 另有一本 书 可用来帮助读者获得这样的背景知识。
本书也不作为对语言发行版中包含的 标准库 的参考。 这些库是通过从其源代码中提取文档属性来单独记录的。 人们可能期望的许多特性在 Rust 中都是库特性,所以你要找的东西可能在那里,而不是这里。
同样,本书通常不记录 rustc
作为工具或 Cargo 的具体细节。 rustc
有自己的 书。 Cargo 有一本 书,其中包含一个 参考。 仍然有一些页面,例如 链接 描述了 rustc
的工作原理。
本书也仅作为对稳定 Rust 中可用内容的参考。 有关正在开发中的不稳定功能,请参阅 Unstable Book。
Rust 编译器,包括 rustc
,将执行优化。 参考不指定允许或禁止哪些优化。 相反,将编译后的程序视为一个黑匣子。 你只能通过运行它、向它馈送输入并观察其输出来探测。 以这种方式发生的一切都必须符合参考中的说明。
最后,本书不具有规范性。 它可能包含 rustc
本身特有的细节,不应将其视为 Rust 语言的规范。 我们打算有一天编写这样一本书,在那之前,参考是我们拥有的最接近规范的东西。
如何使用本书
本书不假设你正在按顺序阅读本书。每一章通常可以独立阅读,但会交叉链接到其他章节,以了解它们所指但未讨论的语言方面。
阅读本文档有两种主要方法。
第一种是回答一个特定问题。如果你知道哪个章节回答了该问题,则可以跳转到目录中的该章节。否则,你可以按 s
或单击顶部栏上的放大镜来搜索与你的问题相关的关键字。例如,假设你想知道 let 语句中创建的临时值何时被释放。如果你还不知道 临时值的生命周期 在 表达式章节 中定义,你可以搜索“temporary let”,第一个搜索结果将带你到该部分。
第二种是全面提高你对该语言某个方面的知识。在这种情况下,只需浏览目录,直到看到你想要了解更多内容的内容,然后开始阅读即可。如果某个链接看起来很有趣,请单击它并阅读有关该部分的内容。
也就是说,没有错误的阅读本书的方式。 按照你认为最适合你的方式阅读即可。
约定
像所有技术书籍一样,本书在如何显示信息方面也有某些约定。 这些约定在此处记录。
-
定义术语的语句包含用斜体表示的术语。每当在该章节之外使用该术语时,通常都是指向包含该定义的章节的链接。
一个 示例术语 是一个正在定义的术语的示例。
-
根据 crate 编译的版本,语言的差异在以粗体开头的 “版本差异:” 开头的引用块中。
版本差异:在 2015 版本中,此语法是有效的,但在 2018 版本中是不允许的。
-
包含有关本书状态的有用信息或指出有用但大部分超出范围的信息的注释在以粗体单词 “注意:” 开头的引用块中。
注意:这是一个示例注释。
-
显示语言中不健全的行为或语言功能的可能令人困惑的交互的警告位于特殊的警告框中。
警告: 这是一个示例警告。
-
文本中的内联代码片段位于
<code>
标记内。较长的代码示例位于语法突出显示的框中,该框的右上角有用于复制、执行和显示隐藏行的控件。
// This is a hidden line. fn main() { println!("This is a code example"); }
除非另有说明,否则所有示例都是为最新版本编写的。
-
语法和词法结构位于以 粗体上标 的 “词法分析器” 或 “语法” 作为第一行的引用块中。
有关更多详细信息,请参阅 表示法。
-
规则标识符出现在每个语言规则之前,用方括号括起来。这些标识符提供了一种引用语言中特定规则的方法。规则标识符使用句点来分隔从最一般到最具体的部分(例如 destructors.scope.nesting.function-body)。
可以单击规则名称以链接到该规则。
警告: 规则的组织目前处于变化之中。暂时而言,这些标识符名称在版本之间是不稳定的,如果它们发生更改,则指向这些规则的链接可能会失败。我们打算在组织结构确定后稳定这些规则,以便指向规则名称的链接在版本之间不会中断。
贡献
我们欢迎各种形式的贡献。
你可以通过打开问题或发送拉取请求到 Rust 参考存储库 来为本书做出贡献。如果本书没有回答你的问题,并且你认为答案在其范围内,请不要犹豫 提交问题 或在 Zulip 上的 t-lang/doc
流中询问。了解人们最常使用本书的原因有助于我们将注意力集中在使这些部分尽可能做到最好。我们也希望参考尽可能具有规范性,因此,如果你看到任何错误或不具有规范性但未专门指出的内容,也请 提交问题。