简介
注意:本书的此版本与 No Starch 出版社出版的印刷版和电子书格式的《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 章是项目章节;其余是概念章节。
第一章介绍如何安装 Rust、如何编写“Hello, world!”程序,以及如何使用 Cargo(Rust 的包管理器和构建工具)。第二章是关于用 Rust 编写程序的实践介绍,让你构建一个猜数字游戏。在这里,我们将从高层次上介绍概念,后面的章节将提供更多细节。如果你想马上动手实践,第二章就是你的选择。第三章涵盖了 Rust 中与其他编程语言类似的功能,在第四章中,你将学习 Rust 的所有权系统。如果你是一个特别细致的学习者,喜欢在继续学习下一个细节之前先学习每一个细节,你可能会想跳过第二章,直接进入第三章,当你想要在一个项目中应用你所学到的细节时,再回到第二章。
第五章讨论结构体和方法,第六章涵盖枚举、match
表达式和 if let
控制流结构。你将使用结构体和枚举在 Rust 中创建自定义类型。
在第七章中,你将学习 Rust 的模块系统以及用于组织代码及其公共应用程序编程接口 (API) 的隐私规则。第八章讨论了标准库提供的一些常见集合数据结构,例如向量、字符串和哈希映射。第九章探讨了 Rust 的错误处理理念和技术。
第十章深入探讨了泛型、特征和生命周期,它们使你能够定义适用于多种类型的代码。第十一章是关于测试的,即使有 Rust 的安全保证,测试也是必要的,以确保你的程序逻辑是正确的。在第十二章中,我们将构建我们自己的 grep
命令行工具的子集功能实现,该工具用于在文件中搜索文本。为此,我们将使用前面章节中讨论的许多概念。
第十三章探讨了闭包和迭代器:Rust 中来自函数式编程语言的功能。在第十四章中,我们将更深入地研究 Cargo,并讨论与他人共享库的最佳实践。第十五章讨论了标准库提供的智能指针以及实现其功能的特征。
在第十六章中,我们将介绍不同的并发编程模型,并讨论 Rust 如何帮助你无所畏惧地在多线程中进行编程。第十七章将 Rust 的习惯用法与你可能熟悉的面向对象编程原则进行比较。
第十八章是关于模式和模式匹配的参考,它们是在 Rust 程序中表达思想的强大方法。第十九章包含了各种感兴趣的高级主题,包括不安全的 Rust、宏以及关于生命周期、特征、类型、函数和闭包的更多内容。
在第二十章中,我们将完成一个项目,在该项目中,我们将实现一个低级多线程 Web 服务器!
最后,一些附录以更类似于参考的格式包含有关该语言的有用信息。附录 A 涵盖了 Rust 的关键字,附录 B 涵盖了 Rust 的运算符和符号,附录 C 涵盖了标准库提供的可派生特征,附录 D 涵盖了一些有用的开发工具,附录 E 解释了 Rust 版本。在附录 F 中,你可以找到本书的翻译版本,在附录 G 中,我们将介绍 Rust 的制作方式以及什么是 nightly Rust。
阅读本书没有错误的方法:如果你想跳 ahead,那就去吧!如果你遇到任何困惑,你可能不得不跳回到前面的章节。但做任何对你有用的事情。
学习 Rust 的过程中,一个重要的部分是学习如何阅读编译器显示的错误信息:这些信息将指导你编写有效的代码。因此,我们将提供许多无法编译的示例,以及编译器在每种情况下将向你显示的错误信息。要知道,如果你输入并运行一个随机示例,它可能无法编译!请确保你阅读了周围的文字,以了解你尝试运行的示例是否会导致错误。Ferris 也会帮助你区分并非旨在工作的代码
Ferris | 含义 |
---|---|
此代码无法编译! | |
此代码会发生恐慌! | |
此代码不会产生预期的行为。 |
在大多数情况下,我们会引导你找到任何无法编译的代码的正确版本。
源代码
生成本书的源文件可以在 GitHub 上找到。