trpl-zh-cn/src/ch00-00-introduction.md
2023-01-16 17:34:52 +08:00

8.8 KiB
Raw Blame History

简介

ch00-00-introduction.md
commit ace3550ad8c3da7aeab521f2e1f96a85b5c8f17d

注意:此书的英文原版与 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 编译器会检查代码确保增加功能、重构代码时的稳定性。与之相比其他的一些语言没有检查功能导致开发者往往不敢修改脆弱的祖传代码。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 章介绍枚举enummatch 表达式和 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 章是一个高级主题大杂烩,包括不安全 Rustunsafe Rust、宏macro和更多关于生命周期、Trait、类型、函数和闭包的内容。

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

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

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

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

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

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

源代码

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

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