介绍

注意:本书的这一版与《Rust编程语言》相同,该书由No Starch Press以印刷版和电子书形式出版。

欢迎来到The Rust Programming Language,一本关于 Rust 的入门书。 Rust 编程语言帮助你编写更快、更可靠的软件。 高级的易用性和低级的控制在编程语言设计中往往是矛盾的;Rust 挑战了这一矛盾。通过平衡强大的技术能力和出色的开发体验,Rust 使你能够在不承担传统上与这种控制相关的所有麻烦的情况下,控制低级细节(如内存使用)。

Rust 适合谁

Rust 对许多人来说是理想的选择,原因各不相同。让我们来看看几个最重要的群体。

开发团队

Rust 证明了它是一种高效的工具,适用于具有不同系统编程知识水平的大型开发团队协作。低级代码容易出现各种微妙的错误,而在大多数其他语言中,这些错误只能通过广泛的测试和经验丰富的开发人员仔细的代码审查来捕获。在 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!”程序,以及如何使用Cargo,Rust的包管理器和构建工具。第2章是编写Rust程序的实践介绍,让你构建一个猜数字游戏。在这里,我们将在高层次上介绍概念,后续章节将提供更多的细节。如果你希望立即动手实践,第2章就是适合你的地方。第3章涵盖了与其它编程语言相似的Rust特性,而在第4章中,你将学习Rust的所有权系统。如果你是一个特别细致的学习者,喜欢在继续学习下一个内容之前先了解每一个细节,你可能希望跳过第2章,直接进入第3章,然后在你想要应用所学的细节时再回到第2章。

第5章讨论了结构体和方法,第6章涵盖了枚举、match 表达式和 if let 控制流结构。您将使用结构体和 枚举在Rust中创建自定义类型。

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

第10章深入探讨了泛型、特质和生命周期,这些特性赋予了你定义适用于多种类型的代码的能力。第11章全部关于测试,即使在Rust的安全保证下,测试也是必要的,以确保你的程序逻辑正确。在第12章中,我们将构建一个从grep命令行工具中提取部分功能的实现,该工具用于在文件中搜索文本。为此,我们将使用前几章讨论过的许多概念。

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

在第 16 章中,我们将探讨不同的并发编程模型,并讨论 Rust 如何帮助您无畏地在多个线程中编程。在第 17 章中,我们将通过探索 Rust 的 async 和 await 语法以及它们支持的轻量级并发模型来进一步深入。

第18章探讨了Rust惯用法与你可能熟悉的面向对象编程原则的比较。

第19章是关于模式和模式匹配的参考,这些是贯穿Rust程序的强大表达方式。第20章包含了一系列高级主题,包括不安全的Rust、宏以及更多关于生命周期、特质、类型、函数和闭包的内容。

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

最后,一些附录以更像参考手册的格式包含了关于语言的有用信息。附录 A 涵盖了 Rust 的关键字,附录 B 涵盖了 Rust 的运算符和符号,附录 C 涵盖了标准库提供的可派生特性,附录 D 涵盖了一些有用的开发工具,附录 E 解释了 Rust 版本。在附录 F 中,您可以找到本书的翻译,而在附录 G 中我们将介绍 Rust 的制作过程以及什么是夜间版 Rust。

没有错误的阅读方式:如果你想跳到前面的部分,尽管去吧!如果你遇到任何困惑,可能需要回到前面的章节。但请按照对你有效的方式来做。

学习 Rust 的一个重要部分是学习如何阅读编译器显示的错误消息:这些消息将引导你编写正确的代码。因此,我们将提供许多无法编译的示例以及编译器在每种情况下将显示的错误消息。请注意,如果你输入并运行一个随机示例,它可能无法编译!确保阅读周围的文本,以确定你尝试运行的示例是否预期会出错。Ferris 也会帮助你区分那些不打算工作的代码:

FerrisMeaning
Ferris with a question markThis code does not compile!
Ferris throwing up their handsThis code panics!
Ferris with one claw up, shruggingThis code does not produce the desired behavior.

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

源代码

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