简介

ch00-00-introduction.md
commit d036f7f049fb4884f63993901ff14d674c8dfb09

注意:此书的英文原版与 No Starch Press 出版的纸质版和电子版《The Rust Programming Language》一致。

欢迎阅读《Rust 程序设计语言》,这是一本 Rust 语言的入门书。Rust 程序设计语言能帮助你编写更快、更可靠的软件。在编程语言设计中,上层的编程效率和底层的细粒度控制往往不能兼得,而 Rust 则试图挑战这一矛盾。Rust 通过平衡技术能力和开发体验,允许你控制内存使用等底层细节,同时也不需要担心底层控制带来的各种麻烦。

Rust 适合哪些人

Rust 适合很多开发者,其原因多种多样。下面讨论几个最重要的群体。

开发团队

实践证明,对于大规模的开发团队,即使成员的系统编程水平不同,Rust 仍是高效的协作工具。底层代码中容易出现很多不易察觉的 bug。在其他编程语言中想要找到它们,只能设计大量的测试,并且让经验丰富的开发者细心审核代码。在 Rust 中,编译器充当了守门员的角色。如果代码中存在这些难找的 bug,比如并发的 bug,它会拒绝编译。只要与编译器协同工作,团队就可以花更多的时间聚焦在程序逻辑上,无需费心找 bug。

Rust 也为系统编程世界带来了现代化的开发工具:

  • Cargo 是内置的依赖管理器和构建工具,它能轻松增加、编译和管理依赖,并使依赖在 Rust 生态系统中保持一致。
  • Rustfmt 确保开发者遵循一致的代码风格。
  • Rust Language Server 为集成开发环境(IDE)提供了强大的代码补全和内联错误信息功能。

通过使用 Rust 生态系统中丰富的工具,开发者可以更高效地编写系统层面代码。

学生

Rust 适合学生群体,也适合有兴趣学习系统概念的人。很多人利用 Rust 学习了操作系统开发等内容。Rust 社区欢迎学生提问,也乐于解答问题。Rust 团队希望系统概念能让更多人了解,尤其是编程新手,为此编写了这本书以及其他内容。

公司

大大小小的公司都已在生产中使用 Rust 来完成各种任务,包括命令行工具、网络服务、DevOps 工具、嵌入式设备、音视频分析与转码、加密货币、生物信息学、搜索引擎、物联网(IOT)程序、机器学习等,甚至 Firefox 浏览器的主要部分也是用 Rust 编写的。

开源开发者

Rust 适合那些希望构建 Rust 编程语言、社区、开发工具和库的开发者。我们欢迎你为 Rust 语言贡献力量。

重视速度和稳定性的开发者

Rust 适合追求编程语言的速度与稳定性的开发者。使用 Rust,不仅写出来的程序运行速度快,写代码的速度也快。Rust 编译器会检查代码,确保增加功能、重构代码时的稳定性。与之相比,其他的一些语言没有检查功能,导致开发者往往不敢修改脆弱的祖传代码。Rust 力求将高级语言特性编译成底层代码,并且与手写的代码运行速度同样快,这一概念称为零开销抽象(zero-cost abstractions),可以让代码又安全又快速。

这里提到的只是较大的几个受益群体,Rust 语言也希望能支持更多其他用户。总之,Rust 最重要的目标是消除数十年来程序员习以为常的取舍,让安全和高效、速度和易读易用可以兼得。试试看 Rust,说不定它的选择就适合你。

本书适合哪些人

本书假设你已经有其他编程语言的经验,任何语言均可,我们尽可能让各种语言背景的人都能读懂。本书的重点不是程序设计本身,也不是程序设计思维。如果你完全没学过编程,建议你先阅读专门介绍程序设计的书籍。

如何阅读本书

本书推荐从头到尾顺序阅读,因为靠后的章节需要前面章节的概念基础。前面的章节可能不会深入介绍部分主题,而是留待后续章节重新讨论。

本书分为两类章节:概念章节和项目章节。在概念章节中,我们学习 Rust 的某个方面。在项目章节中,我们应用目前所学的知识一同构建小型程序。第 2、12、20 章是项目章节;其余都是概念章节。

第 1 章介绍如何安装 Rust,如何编写 “Hello, world!” 程序,以及如何使用 Rust 的包管理器和构建工具 Cargo。第 2 章是 Rust 语言的实战介绍。我们会站在较高的层次介绍一些概念,而将详细的介绍放在稍后的章节中。如果你希望立刻就动手实践一下,第 2 章正好适合你。第 3 章介绍 Rust 中类似其他编程语言的特性,你可以选择跳过,直接阅读第 4 章学习 Rust 的所有权(ownership)系统。不过,如果你注重细节,可以跳过第 2 章直接看第 3 章,之后想要写项目的时候再回来看第 2 章。

第 5 章讨论结构体(struct)和方法,第 6 章介绍枚举(enum)、match 表达式和 if let 控制流结构。在 Rust 中,创建自定义类型需要用到结构体和枚举。

第 7 章介绍 Rust 的模块(module)系统,其中的私有性规则用来组织代码和公开的 API(应用程序接口)。第 8 章讨论标准库提供的常见集合数据结构,例如 Vector(向量)、字符串和 Hash Map(散列表)。第 9 章探索 Rust 的错误处理技术和理念。

第 10 章深入介绍泛型(generic)、Trait 和生命周期(lifetime),用这些特性可以写出适用多种类型的代码。第 11 章介绍测试,因为就算 Rust 有安全保证,也需要测试确保程序逻辑正确。grep 命令可以查找文件中的文本,第 12 章中我们将会构建一个命令行工具实现它的部分功能,为此会用到之前章节讨论的很多概念。

第 13 章探索闭包(closure)和迭代器(iterator),这两个特性来自函数式编程语言。第 14 章会深入探讨 Cargo 并介绍分享代码库的最佳实践。第 15 章讨论标准库提供的智能指针以及相关的 Trait。

第 16 章介绍几类并发编程模型,并讨论 Rust 如何助你无畏地编写多线程程序。第 17 章着眼于比较 Rust 风格与 OOP(面向对象编程)原则。

第 18 章介绍模式和模式匹配,它是在 Rust 程序中表达思想的有效方式。第 19 章是一个高级主题大杂烩,包括不安全 Rust(unsafe Rust)、宏(macro)和更多关于生命周期、Trait、类型、函数和闭包的内容。

第 20 章我们将会完成一个项目,实现一个底层的、多线程的网络服务器!

最后的附录包含一些实用信息,格式类似参考文档。附录 A 介绍 Rust 的关键字,附录 B 介绍 Rust 的运算符和符号,附录 C 介绍标准库提供的可派生 Trait,附录 D 涉及一些有用的开发工具,附录 E 介绍 Rust 的不同版本。

本书没有错误的阅读方式,可以尽管跳过部分内容,遇到困惑时再回看前面的章节。

学习 Rust 的一个重点在于了解如何阅读编译器提供的错误信息,它们会指导你编写出能运行的代码。为此,我们会提供很多无法通过编译的示例,并附上错误信息。运行示例代码的时候务必阅读上下文,看看这段代码是否是故意写错的,部分示例代码就是无法编译的!Ferris 也会帮助你分辨哪些代码是故意写错的:

Ferris含义
Ferris 头上有问号这段代码无法通过编译!
Ferris 举起两只钳子这段代码会 Panic!
Ferris 举起一只钳子并耸肩这段代码的运行结果不符合预期。

在大部分情况,我们会指导你将无法通过编译的代码修改为正确版本。

源代码

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

译者注:本译本的也有 GitHub 仓库,欢迎提交 Issue 和 PR :)