介绍


注意:此版本的书与 The Rust Programming 相同 语言以印刷和电子书格式提供,来自 No Starch 新闻。


欢迎来到 The Rust Programming Language,这是一本关于 Rust 的入门书籍。Rust 编程语言可帮助您编写更快、更可靠的软件。在编程语言设计中,高级人体工程学和低级控制经常是矛盾的;Rust 挑战了这种冲突。通过平衡强大的技术能力和出色的开发人员体验,Rust 为您提供了控制低级细节(例如内存使用)的选项,而无需传统上与此类控制相关的所有麻烦。


Rust 适合谁


出于各种原因,Rust 对许多人来说是理想的。让我们看看几个最重要的组。


开发团队


事实证明,Rust 是一种高效的工具,可以在具有不同系统编程知识水平的大型开发人员团队之间进行协作。低级代码容易出现各种细微的 bug,在大多数其他语言中,只有通过经验丰富的开发人员进行广泛的测试和仔细的代码审查才能发现这些 bug。在 Rust 中,编译器通过拒绝编译具有这些难以捉摸的错误(包括并发错误)的代码来扮演守门人角色。通过与编译器一起工作,团队可以将时间花在程序的逻辑上,而不是追寻错误。


Rust 还为系统编程世界带来了现代开发者工具:


  • Cargo 是随附的依赖项管理器和构建工具,使添加、编译和管理依赖项在整个 Rust 生态系统中变得轻松且一致。

  • Rustfmt 格式化工具可确保开发人员之间的编码样式一致。

  • rust-analyzer 为集成开发环境 (IDE) 集成提供支持,以实现代码完成和内联错误消息。


通过在 Rust 生态系统中使用这些工具和其他工具,开发人员可以在编写系统级代码时提高工作效率。


学生


Rust 适用于学生和对学习系统概念感兴趣的人。使用 Rust,许多人了解了作系统开发等主题。社区非常热情,乐于回答学生的问题。通过本书等努力,Rust 团队希望让更多的人更容易接触到系统概念,尤其是那些刚接触编程的人。


公司


数百家大大小小的公司在生产中使用 Rust 来完成各种任务,包括命令行工具、Web 服务、DevOps 工具、嵌入式设备、音频和视频分析和转码、加密货币、生物信息学、搜索引擎、物联网应用程序、机器学习,甚至 Firefox Web 浏览器的主要部分。


开源开发人员


Rust 适用于想要构建 Rust 编程语言、社区、开发人员工具和库的人。我们很乐意让您为 Rust 语言做出贡献。


重视速度和稳定性的人


Rust 适合那些渴望语言速度和稳定性的人。速度,我们指的是 Rust 代码的运行速度以及 Rust 允许你编写程序的速度。Rust 编译器的检查通过功能添加和重构来确保稳定性。这与没有这些检查的语言中脆弱的遗留代码形成鲜明对比,开发人员通常不敢修改这些代码。通过努力实现零成本抽象,即与手动编写代码一样快地编译为较低级别代码的高级功能,Rust 努力使安全代码也成为快速代码。


Rust 语言也希望支持许多其他用户;这里提到的只是一些最大的利益相关者。总的来说,Rust 最大的雄心是通过提供安全性和生产力、速度和人体工程学来消除程序员几十年来一直接受的权衡。试试 Rust,看看它的选择是否适合你。


这本书是给谁的


本书假定您用另一种编程语言编写了代码,但没有对哪种编程语言做出任何假设。我们试图让来自不同编程背景的人能够广泛地访问这些材料。我们不会花很多时间讨论编程是什么或如何思考它。如果您对编程完全陌生,那么阅读一本专门提供编程介绍的书会更好。


如何使用这本书


一般来说,这本书假定你是从前到后按顺序阅读的。后面的章节建立在前面章节中的概念之上,前面的章节可能不会深入研究特定主题的细节,但会在后面的章节中重新讨论该主题。


在本书中,您将找到两种章节:概念章节和项目章节。在概念章节中,您将了解 Rust 的一个方面。在项目章节中,我们将一起构建小程序,应用您到目前为止所学的知识。第 2 章、第 12 章和第 20 章是项目章节;其余的是概念章节。


第 1 章解释了如何安装 Rust,如何编写 “Hello, world!” 程序,以及如何使用 Rust 的包管理器和构建工具 Cargo。第 2 章是用 Rust 编写程序的动手实践介绍,让您构建一个猜数字游戏。在这里,我们将简要介绍概念,后面的章节将提供更多详细信息。如果您想立即动手,第 2 章就是您的最佳选择。第 3 章介绍了与其他编程语言类似的 Rust 功能,在第 4 章中,您将了解 Rust 的所有权系统。如果你是一个特别细致的学习者,喜欢在进入下一个细节之前先学习每一个细节,你可能想跳过第 2 章,直接进入第 3 章,当你想做一个项目时,回到第 2 章应用你学到的细节。


第 5 章讨论了结构和方法,第 6 章介绍了枚举、match 表达式和 if let control flow 构造。你将使用 struct 和 enum 在 Rust 中创建自定义类型。


在第 7 章中,您将了解 Rust 的模块系统以及用于组织代码及其公共应用程序编程接口 (API) 的隐私规则。第 8 章讨论了标准库提供的一些常见集合数据结构,例如向量、字符串和哈希映射。第 9 章探讨了 Rust 的错误处理哲学和技术。


第 10 章深入探讨了泛型、trait 和 lifetime,它们使您能够定义适用于多种类型的代码。第 11 章是关于测试的,即使有 Rust 的安全保证,这也是确保程序逻辑正确的必要条件。在第 12 章中,我们将从 grep 命令行工具构建自己的功能子集实现,该工具在文件中搜索文本。为此,我们将使用我们在前几章中讨论的许多概念。


第 13 章探讨了闭包和迭代器:来自函数式编程语言的 Rust 特性。在第 14 章中,我们将更深入地研究 Cargo,并讨论与他人共享库的最佳实践。第 15 章讨论了标准库提供的智能指针以及启用其功能的 trait。


在第 16 章中,我们将介绍并发编程的不同模型,并讨论 Rust 如何帮助你无所畏惧地在多个线程中编程。第 17 章着眼于 Rust 惯用语与您可能熟悉的面向对象编程原则的比较。


第 18 章是关于模式和模式匹配的参考,它们是在整个 Rust 程序中表达思想的强大方式。第 19 章包含大量感兴趣的高级主题,包括不安全的 Rust、宏,以及更多关于生命周期、trait、类型、函数和闭包的内容。


在第 20 章中,我们将完成一个项目,在其中我们将实现一个低级多线程 Web 服务器!


最后,一些附录以更类似于参考的格式包含有关该语言的有用信息。附录 A 涵盖了 Rust 的关键字,附录 B 涵盖了 Rust 的运算符和符号,附录 C 涵盖了标准库提供的可衍生特征,附录 D 涵盖了一些有用的开发工具,附录 E 解释了 Rust 版本。在附录 F 中,你可以找到这本书的翻译,在附录 G 中,我们将介绍 Rust 是如何制作的,以及 nightly Rust 是什么。


阅读这本书没有错误的方法:如果你想跳过,那就去做吧!如果您遇到任何困惑,您可能必须跳回前面的章节。但做任何对你有用的事情。


学习 Rust 过程的一个重要部分是学习如何阅读编译器显示的错误消息:这些将指导你编写代码。因此,我们将提供许多无法编译的示例以及编译器在每种情况下都会显示的错误消息。要知道,如果你输入并运行一个随机示例,它可能无法编译!请务必阅读周围的文本,以查看您尝试运行的示例是否注定要出错。Ferris 还将帮助您区分不工作的代码:


摩天

意义
Ferris with a question mark
此代码无法编译!
Ferris throwing up their hands
此代码 panic!
Ferris with one claw up, shrugging
此代码不会产生所需的行为。


在大多数情况下,我们会引导您找到任何无法编译的代码的正确版本。


源代码


生成本书的源文件可以在 GitHub 的。