引言

注意:本书的版本与 No Starch Press 出版的纸质版和电子书 《Rust 编程语言》 相同。

欢迎阅读《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 章和第 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 章探讨了闭包和迭代器:来自函数式编程语言的 Rust 功能。在第 14 章中,我们将更深入地研究 Cargo,并讨论与他人共享库的最佳实践。第 15 章讨论了标准库提供的智能指针以及支持其功能的特征。

在第 16 章中,我们将逐步介绍并发编程的不同模型,并讨论 Rust 如何帮助您在多个线程中无畏地进行编程。第 17 章探讨了 Rust 习惯用法与您可能熟悉的面向对象编程原则的比较。

第 18 章是对模式和模式匹配的参考,它们是表达 Rust 程序中思想的强大方式。第 19 章包含各种有趣的进阶主题,包括不安全 Rust、宏以及更多关于生命周期、特征、类型、函数和闭包的内容。

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

最后,一些附录包含有关该语言的有用信息,这些信息采用更类似参考的形式。附录 A 介绍了 Rust 的关键字,附录 B 介绍了 Rust 的运算符和符号,附录 C 介绍了标准库提供的可派生特征,附录 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 上找到生成本书的源文件。