简介
注意:本书的这个版本与 No Starch Press 出版的印刷版和电子书 The Rust Programming Language 相同。
欢迎来到 Rust 编程语言,一本关于 Rust 的入门书。Rust 编程语言帮助你编写更快、更可靠的软件。高级的人体工程学和低级控制在编程语言设计中常常是矛盾的;Rust 挑战了这种冲突。通过平衡强大的技术能力和出色的开发者体验,Rust 使你可以选择控制低级细节(例如内存使用),而无需传统上与这种控制相关的麻烦。
Rust 适合哪些人
Rust 由于多种原因,非常适合许多人。让我们来看看其中几个最重要的群体。
开发者团队
Rust 被证明是大型开发者团队协作的高效工具,这些团队的成员系统编程知识水平各不相同。底层代码容易出现各种细微的 bug,在大多数其他语言中,这些 bug 只能通过广泛的测试和经验丰富的开发者仔细的代码审查才能发现。在 Rust 中,编译器扮演着守门员的角色,拒绝编译包含这些难以捉摸的 bug 的代码,包括并发 bug。通过与编译器协同工作,团队可以将时间集中在程序的逻辑上,而不是追查 bug。
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 章是项目章节;其余的是概念章节。
第 1 章解释了如何安装 Rust,如何编写 “Hello, world!” 程序,以及如何使用 Cargo,Rust 的包管理器和构建工具。第 2 章是编写 Rust 程序的实践入门,让您构建一个猜数字游戏。在这里,我们从较高的层面介绍概念,后面的章节将提供更多细节。如果您想立即开始实践,第 2 章是您的最佳选择。第 3 章介绍了 Rust 中与其他编程语言相似的功能,在第 4 章中,您将学习 Rust 的所有权系统。如果您是一个特别细致的学习者,喜欢在继续学习下一个细节之前学习每个细节,您可能需要跳过第 2 章,直接学习第 3 章,并在您想要做一个项目来应用您所学的细节时返回第 2 章。
第 5 章讨论了结构体和方法,第 6 章介绍了枚举、match
表达式和 if let
控制流结构。您将使用结构体和枚举在 Rust 中创建自定义类型。
在第 7 章中,您将学习 Rust 的模块系统以及用于组织代码及其公共应用程序编程接口 (API) 的隐私规则。第 8 章讨论了标准库提供的一些常用集合数据结构,例如 vector、string 和哈希 map。第 9 章探讨了 Rust 的错误处理理念和技术。
第 10 章深入探讨了泛型、trait 和生命周期,这些特性使您能够定义适用于多种类型的代码。第 11 章全部关于测试,即使有 Rust 的安全保证,测试对于确保程序逻辑正确也是必要的。在第 12 章中,我们将构建我们自己实现的 grep
命令行工具子集功能,该工具用于在文件中搜索文本。为此,我们将使用我们在前几章中讨论的许多概念。
第 13 章探讨了闭包和迭代器:Rust 中来自函数式编程语言的特性。在第 14 章中,我们将更深入地研究 Cargo,并讨论与他人共享库的最佳实践。第 15 章讨论了标准库提供的智能指针以及使其功能成为可能的 trait。
在第 16 章中,我们将逐步介绍并发编程的不同模型,并讨论 Rust 如何帮助您无畏地在多线程中编程。第 18 章着眼于 Rust 惯用法与您可能熟悉的面向对象编程原则的比较。
第 19 章是关于模式和模式匹配的参考,它们是在 Rust 程序中表达思想的强大方式。第 20 章包含各种您感兴趣的高级主题,包括不安全 Rust、宏,以及更多关于生命周期、trait、类型、函数和闭包的内容。
在第 21 章中,我们将完成一个项目,在该项目中我们将实现一个低级多线程 Web 服务器!
最后,一些附录以更像参考的形式包含了关于该语言的有用信息。附录 A 涵盖了 Rust 的关键字,附录 B 涵盖了 Rust 的运算符和符号,附录 C 涵盖了标准库提供的可派生 trait,附录 D 涵盖了一些有用的开发工具,附录 E 解释了 Rust 版本。在附录 F 中,您可以找到本书的译本,在附录 G 中,我们将介绍 Rust 是如何构建的以及什么是 nightly Rust。
阅读本书没有错误的方法:如果您想跳到前面,请随意!如果您遇到任何困惑,可能需要跳回前面的章节。但请做对您有效的事情。
学习 Rust 过程的一个重要部分是学习如何阅读编译器显示的错误消息:这些消息将引导您编写出可工作的代码。因此,我们将提供许多无法编译的示例以及编译器在每种情况下将向您显示的错误消息。请注意,如果您输入并运行一个随机示例,它可能无法编译!请确保您阅读周围的文本,以查看您尝试运行的示例是否旨在报错。Ferris 也会帮助您区分不打算工作的代码
Ferris | 含义 |
---|---|
这段代码无法编译! | |
这段代码会 panic! | |
这段代码不会产生期望的行为。 |
在大多数情况下,我们会引导您找到任何无法编译的正确代码版本。
源代码
可以从 GitHub 上找到生成本书的源文件。