简介

注意:本书的本版本与 The Rust Programming Language 相同,可通过 No Starch Press 以印刷版和电子书格式获取。

欢迎阅读 Rust 程序设计语言,这是一本关于 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 和 21 章是项目章节;其余的是概念章节。

第 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 章深入探讨了泛型、trait 和生命周期,这些特性使您能够定义适用于多种类型的代码。第 11 章完全是关于测试的,即使有了 Rust 的安全保证,测试对于确保程序逻辑正确也是必要的。在第 12 章中,我们将构建我们自己对 grep 命令行工具的功能子集的实现,该工具在文件中搜索文本。为此,我们将使用我们在前面章节中讨论的许多概念。

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

在第 16 章中,我们将介绍并发编程的不同模型,并讨论 Rust 如何帮助您无畏地在多线程中编程。在第 17 章中,我们将在此基础上,探索 Rust 的 async 和 await 语法以及它们支持的轻量级并发模型。

第 18 章着眼于 Rust 惯用法与您可能熟悉的面向对象编程原则的比较。

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

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

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

阅读本书没有错误的方式:如果您想跳过,请随意跳过!如果您遇到任何困惑,可能需要跳回前面的章节。但请做对您有效的方式。

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

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

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

源代码

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