介绍
6 分钟阅读
译文 · 基于 The Rust Programming Language(rustc 1.97.1)
介绍
原文链接: https://doc.rust-lang.org/stable/book/ch00-00-introduction.html
注意:本版内容与 No Starch Press 以纸质书与电子书形式出版的 The Rust Programming Language 相同。
欢迎阅读《Rust 程序设计语言》——这是一本面向初学者的 Rust 入门书。Rust 编程语言帮助你写出更快、更可靠的软件。在编程语言设计中,高层易用性与底层控制权往往相互冲突;Rust 正要挑战这种对立。通过在强大的技术能力与出色的开发体验之间取得平衡,Rust 让你能够掌控底层细节(例如内存使用),而又不必承受传统上与之相伴的种种麻烦。
Rust 适合谁
Rust 因多种原因适合许多人。下面看看其中最重要的几类人群。
开发者团队
事实证明,对于系统编程经验参差不齐的大型开发团队,Rust 是高效协作的利器。底层代码容易出现各种微妙的 bug;在多数其他语言里,这类问题往往只能靠大量测试,以及经验丰富的开发者仔细审阅代码才能发现。在 Rust 中,编译器扮演守门人的角色:拒绝编译带有这些难以捉摸的 bug(包括并发 bug)的代码。与编译器并肩工作,团队可以把时间花在程序逻辑上,而不是四处追查缺陷。
Rust 也为系统编程世界带来了现代开发工具:
- Cargo(随语言附带的依赖管理与构建工具)让添加、编译与管理依赖变得轻松,并在整个 Rust 生态中保持一致。
rustfmt格式化工具确保不同开发者之间的编码风格一致。- Rust Language Server 为集成开发环境(IDE)提供代码补全与行内错误信息等集成能力。
借助这些以及 Rust 生态中的其他工具,开发者在编写系统级代码时也能保持高效。
学生
Rust 适合学生,以及希望学习系统概念的人。许多人借助 Rust 学习了诸如操作系统开发等主题。社区非常欢迎新人,也乐于回答学生的问题。通过本书等工作,Rust 团队希望让更多人——尤其是编程新手——更容易接触到系统相关概念。
公司
数百家大大小小的公司在生产环境中使用 Rust,覆盖多种任务,包括命令行工具、Web 服务、DevOps 工具、嵌入式设备、音视频分析与转码、加密货币、生物信息学、搜索引擎、物联网应用、机器学习,乃至 Firefox 浏览器的重要组成部分。
开源开发者
Rust 也面向希望参与构建 Rust 语言本身、社区、开发工具与库的人。我们非常欢迎你为 Rust 做贡献。
重视速度与稳定性的人
Rust 适合渴望速度与稳定性的人。这里的「速度」既指 Rust 代码的运行速度,也指用 Rust 编写程序的效率。Rust 编译器的检查,能在你添加功能与重构时保障稳定性。这与那些缺乏此类检查、遗留代码脆弱、开发者往往不敢改动的语言形成对比。通过追求零成本抽象——即高层特性编译后与手写底层代码一样快——Rust 努力让安全的代码同时也是快的代码。
Rust 也希望服务更多其他用户;这里提到的只是若干最重要的利益相关方。总的来说,Rust 最大的抱负,是消除程序员几十年来不得不接受的权衡:同时提供安全 与 生产力、速度 与 易用性。不妨试试 Rust,看看它的取舍是否适合你。
本书适合谁
本书假定你已经用其他编程语言写过代码,但不假定具体是哪一种。我们尽量让材料对不同编程背景的读者都通俗易懂。我们不会花很多篇幅讨论编程「是什么」,或该如何思考编程。如果你对编程完全陌生,更适合先读一本专门介绍编程入门的书。
如何使用本书
总体而言,本书假定你从前到后按顺序阅读。后面的章节建立在前面的概念之上;较早的章节对某个主题可能不会一下子讲透,但会在后续章节再回来深入。
你会遇到两类章节:概念章与项目章。概念章讲解 Rust 的某一方面;项目章里我们一起构建小程序,运用你目前学到的知识。第 2 章、第 12 章和第 21 章是项目章;其余为概念章。
第 1 章说明如何安装 Rust、如何编写「Hello, world!」程序,以及如何使用 Cargo(Rust 的包管理与构建工具)。第 2 章是动手写 Rust 程序的入门:带你做一个猜数字游戏。这里我们会以较高层次介绍概念,细节留给后续章节。若你想立刻动手,第 2 章正合适。若你特别细致,希望学完每一个细节再往下走,可以跳过第 2 章,直接阅读介绍与其他语言相似的 Rust 特性的第 3 章;等你想用学到的细节做一个项目时,再回来做第 2 章。
在第 4 章,你会学习 Rust 的所有权(ownership)系统。第 5 章讨论结构体与方法。第 6 章涵盖枚举、match 表达式,以及 if let 与 let...else 控制流结构。你会用结构体和枚举来创建自定义类型。
在第 7 章,你会学习 Rust 的模块系统,以及用于组织代码与其公开 API 的可见性规则。第 8 章讨论标准库提供的一些常见集合数据结构:向量、字符串与哈希映射。第 9 章探讨 Rust 的错误处理理念与技巧。
第 10 章深入泛型、特征(trait)与生命周期,让你能够定义适用于多种类型的代码。第 11 章全部关于测试——即便有 Rust 的安全保证,仍需要测试来确保程序逻辑正确。在第 12 章,我们会实现命令行工具 grep 功能的一个子集,用于在文件中搜索文本;其间会用到前面各章讨论过的许多概念。
第 13 章探索闭包与迭代器:这些来自函数式编程语言的 Rust 特性。在第 14 章,我们会更深入地审视 Cargo,并讨论与他人分享库的最佳实践。第 15 章讨论标准库提供的智能指针,以及使其发挥作用的特征。
在第 16 章,我们会梳理不同的并发编程模型,并说明 Rust 如何帮助你无畏地编写多线程程序。第 17 章在此基础上探索 Rust 的 async 与 await 语法,以及任务、future 与流(stream),还有它们所带来的轻量级并发模型。
第 18 章对照你可能熟悉的面向对象编程原则,看看 Rust 惯用法如何与之对应。第 19 章是关于模式与模式匹配的参考,这是在整个 Rust 程序中表达想法的强大方式。第 20 章汇集了一批进阶主题,包括不安全的 Rust、宏,以及关于生命周期、特征、类型、函数与闭包的更多内容。
在第 21 章,我们将完成一个项目:实现一个底层的多线程 Web 服务器!
最后,若干附录以更偏参考手册的形式收录了语言的有用信息。附录 A介绍 Rust 的关键字,附录 B介绍运算符与符号,附录 C介绍标准库提供的可派生特征,附录 D介绍一些有用的开发工具,附录 E解释 Rust 的 Edition。附录 F列出了本书的其他语言译本,附录 G则介绍 Rust 是如何打造的,以及什么是 Nightly Rust。
阅读本书没有「错误」的方式:想跳读就跳读!若感到困惑,可能需要回翻前面的章节。按适合你的方式来即可。
学习 Rust 的重要一环,是学会阅读编译器给出的错误信息:它们会指引你写出能工作的代码。因此,我们会提供许多无法通过编译的示例,并附上编译器在每种情况下会显示的错误信息。请注意:若你随意挑一个示例输入并运行,它可能无法编译!请务必阅读周围的文字,确认你尝试运行的示例是否本就意在报错。在多数情况下,我们会引导你得到无法编译之代码的正确版本。Ferris 也会帮你区分那些本就不该正常工作的代码:
| Ferris | 含义 |
|---|---|
| 这段代码无法编译! | |
| 这段代码会 panic! | |
| 这段代码不会产生预期的行为。 |
在多数情况下,我们会引导你得到无法编译之代码的正确版本。
源代码
生成本书所用的源文件可在 GitHub 上找到。