欢迎阅读《Rust 权威指南》第2版,本书深入浅出地介绍了 Rust 语言!
Rust 是一门可以帮助你开发出高效率、高可靠性软件的编程语言。以往的编程语言往往无法同时兼顾高水准的工程体验与底层的控制能力,而 Rust 则被设计出来挑战这一目标,它力图同时提供强大的工程能力和良好的开发体验,在给予开发者控制底层细节能力(比如内存操作)的同时,避免传统语言带来的诸多麻烦。
谁是Rust的目标用户
基于各种各样的原因,Rust 对于许多人来讲都是一门相当理想的语言。现在,让我们看一看其中最重要的一些群体。
开发团队
Rust 已经被证明可以高效地应用于大规模的、拥有不同系统编程背景的开发团队。底层代码总是容易出现各种各样隐晦的错误,对于大部分编程语言来说,想要发现这些错误,要么通过海量的测试用例,要么通过优秀程序员细致的代码评审。而在 Rust 的世界里,大部分错误(甚至包括并发环境中产生的错误)都可以在编译阶段被编译器发现并拦截。得益于编译器这种类似于守门员的角色,开发团队可以在更多的时间内专注于业务逻辑而非错误调试。
当然,Rust 也附带了一系列面向系统编程的现代化开发工具:
? ?Cargo 提供了一套内置的依赖管理与构建工具。通过 Cargo,你可以在 Rust 生态系统中一致且轻松地增加、编译和管理依赖。
? ?rustfmt 用于约定一套统一的编码风格。
? ?Rust Language Server 为集成开发环境(IDE)提供了可供集成的代码补全和错误提示工具。
通过使用上述工具,开发者可以高效地进行系统级编程。
学生
对于那些有兴趣接触系统编程的学生而言,Rust 也是一个非常好的选择,已经有不少人基于 Rust 来学习诸如操作系统开发之类的课程。另外,我们拥有一个非常热情的社区,社区成员们总是乐于回答来自初学者的各种问题。Rust 开发团队希望通过本书让更多的人,特别是学生,能更加轻松地接触、学习系统编程的各种概念。
企业
目前已经有数百家或大或小的企业,在生产环境中使用 Rust来处理各式各样的任务。这些任务包括命令行工具开发、Web 服务开发、DevOps 工具开发、嵌入式设备开发、音视频分析与转码、数字货币交易、生物信息提取、搜索引擎开发、物联网应用开发、机器学习算法研究,以及 Firefox 网络浏览器中的大部分功能开发。
开源开发者
我们欢迎所有愿意参与构建 Rust 编程语言本身,或者周边社区、开发工具及第三方库的开发者。你们的贡献对于构建一个良好的 Rust 语言生态环境非常重要!
重视速度与稳定性的开发者
Rust 适用于那些重视速度与稳定性的开发者。当谈论到速度时,不仅是指 Rust 程序可以拥有良好的运行时效率,而且Rust 可以提供良好的开发时效率。得益于 Rust 编译器的静态检查能力,我们可以稳定地在开发过程中增添功能或重构代码。与此形成鲜明对比的是,在缺少这些检查能力的语言中,开发者往往恐惧于修改那些脆弱的遗留代码。此外,得益于对零开销抽象这一概念的追求,开发者可以在无损耗的前提下使用高级语言特性。Rust 力图使安全的代码同样高效。
当然,这里提到的只是 Rust 使用场景中最有代表性的一部分用户,Rust 语言也希望能够服务于尽可能多的其他开发者群体。总的来说,Rust 最大的目标在于通过同时保证安全与效率、运行速度与编程体验,消除数十年来程序员们不得不接受的那些取舍。不妨给 Rust 一个机会,让我们一起来看一看它是否适合你。
谁是本书的目标读者
对于本书的读者,我们假设你已经使用过某种其他编程语言。虽然我们努力使本书的内容能够被具有不同编程背景的读者所接受,但不会花太多时间去讨论一些基本的编程概念。如果你对于编程是完全陌生的,那么你最好先阅读一些入门类的编程图书。
如何阅读本书
通常而言,我们假定读者按顺序从头到尾阅读本书。一开始我们会简单地介绍一些概念,接着在随后的章节中逐步深入,并有针对性地对其中的细节进行讨论。后面章节的讨论建立在前面章节引入的概念之上。
在本书中,你会发现两种类型的章节:概念讨论类章节和项目实践类章节。在概念讨论类章节中,你会接触到 Rust 的某些特性;在项目实践类章节中,我们会利用之前讲解过的 Rust 特性来共同构建一些小程序。第 2 章、第 12 章、第 20 章属于项目实践类章节,其余章节属于概念讨论类章节。
第 1 章会介绍如何安装 Rust,如何编写Hello, world!程序,以及如何使用 Cargo构建和管理项目。
第 2 章会从实践的角度对 Rust 语言进行介绍,这里我们会从较高的层次来覆盖一系列概念,并在之后的章节中逐步深入研究细节。如果你是一个实践派,想要立即动手编写代码,那么第 2 章正好适合你。第 3 章会介绍 Rust 中类似于其他语言的那些特性,第 4 章则介绍 Rust 中独特的所有权系统。如果你是一个特别重视细节的学习者,期望一步一步了解清楚每一个角落,那么建议你跳过第 2 章,从第 3 章开始按顺序阅读,并在想要通过实践来巩固知识点时再返回第 2 章进行阅读。
第 5 章会讨论结构体和方法,第 6 章会包含枚举、match表达式及if let控制流结构的相关内容。你将学会在 Rust 中使用结构体和枚举来创建自定义类型。
在第 7 章中,你会了解到 Rust 中的模块系统和私有性规则,并学会如何使用它们来组织代码和设计公共应用程序接口(API)。第 8 章会介绍一些标准库中提供的常用数据结构,比如Vec(动态数组)、String(字符串)和HashMap(哈希表)。第 9 章会讨论 Rust 中关于错误处理的一些设计理念和工具。
第 10 章会深入讲解关于泛型、trait(特征)和生命周期的概念,它们赋予了你复用代码的能力。第 11 章介绍的是关于如何在 Rust 中构建测试系统的内容。即便有 Rust 的安全检查,我们也需要通过测试来保障业务逻辑的正确性。在第 12 章中,我们会实现命令行工具grep的一些功能子集,用于在文件中搜索某些特定文本,为此会用到很多前面章节中讨论的概念。
第 13 章会讨论 Rust 中与函数式编程相关的概念,即闭包与迭代器。在第 14 章中,我们会更加深入地了解 Cargo,以及与他人共享代码库的一些最佳实践。第 15 章会讨论标准库中的智能指针,以及它们所实现的相关 trait。
在第 16 章中,我们会介绍多个不同的并发编程模型,并讨论Rust 是如何让多线程编程变得不那么恐怖的。第 17 章则着眼于比较 Rust 与常见的面向对象编程范式的不同风格。
第 18 章是关于模式和模式匹配的介绍,它们给 Rust 语言带来了异常强大的表达能力。第 19 章会覆盖一些有趣的高级主题,包括对不安全 Rust、宏、生命周期、trait、类型、函数和闭包的更深入的讨论。
在第 20 章中,我们将从底层开始实现一个完整的多线程 Web 服务器。
最后的附录中会包含一系列有关语言的实用参考资料。其中,附录 A 会列举 Rust 中全部的关键字,附录 B 会列举 Rust 中所有的运算符及其他符号,附录 C 会包含标准库中提供的可派生 trait,附录 D 会介绍一些有用的开发工具,附录 E 会解释 Rust 的阶段性版本机制。
当然,不管你怎样阅读本书都是可以的。假如你想要跳过某个特定的章节,那就跳过吧,你可以在感到疑惑的时候再返回略过的那些部分。用你觉得最舒服的方式来阅读本书就好!
在学习 Rust 的过程中,一项尤为重要的能力是掌握如何阅读编译器显示的错误提示信息,这些信息能够引导你编写出可用的代码。为此,我们会故意提供许多无法通过编译的示例,进而展示在相关情境下编译器输出的错误提示信息。所以,在本书中随意挑选出来的示例也许根本就无法通过编译!请仔细阅读上下文来确定你尝试运行的示例代码是否是一段故意写错的代码。在大部分情况下,我们会指引你将不能编译的代码纠正为正确版本。