# Rust 能够做什么?

Rust 能够帮助我们编写更快,更可靠的应用。高级人体工程学和低级控制在编程语言的设计上往往都是互相矛盾的,Rust 则挑战这种冲突。通过平衡强大的技术能力和出色的开发经验,Rust 为我们提供了控制底层的细节(例如内存的使用)选项,没有传统上与此类相关的所有问题。

# Rust 是谁写的?

由于各种各样的原因,Rust 将是许多开发人员的理想之选。让我们来看一下一些重要的开发组织吧。

# 开发团队

事实已经证明,Rust 是用于具有不同级别的系统编程知识的开发人员团队之间进行协作的一种高效工具。低级代码会产生各种各样细微的错误(bug),只有在经验丰富的开发人员进行大量的测试和仔细对代码的审查之后,才会发现大多数开发语言中的错误(bug)。在 Rust 中,编译器通过拒绝使用这些难以捉摸的错误(包括并发错误),来起到了类似门卫的作用。通过与编译器共同工作,团队可以将时间花费在专注于程序的逻辑当中,而不是用来寻找错误。

Rust 还为系统编程世界带来了当代的开发人员的工具:

  • Cargo,包含依赖关系管理器和构建工具,使添加,编译和管理依赖关系在整个 Rust 生态系统中变得轻松而一致。
  • Rustfmt,确保开发人员的编码风格一致
  • Rust 语言服务器为集成开发环境(IDE)提供了强大的功能,以实现代码的完成和内联的错误信息。

通过在 Rust 生态系统中使用这些工具和一些其他的工具,开发人员可以在编写系统代码的时候提高工作效率。

# 适用人群——学生

Rust 适用于学生以及对学习系统概念感兴趣的人,使用 Rust,会让许多人学习并了解到诸如操作系统开发的主题概念。Rust 的社区非常受欢迎,而且也很乐意回答学生的所有问题。通过本文档,Rust 希望使更多的人(尤其是编程新手)更容易使用明白系统的概念。

# 公司

数百家大小公司都在生产环境中使用 Rust 完成各种各样的任务。这些任务包含命令行工具、web 服务、DevOps 工具、嵌入式设备、音频与视频的分析与转码、加密货币、生物信息学、搜索引擎、物联网应用程序、机器学习、甚至是火狐 web 浏览器的主要部分。

# 开源开发人员

Rust 适用于想要构建 Rust 编程语言、社区、开发工具和库的开发人员。所以任何人都可以为 Rust 语言做出贡献,Rust 开发团队也很希望任何开发人员都能为 Rust 做出贡献。

# 注重速度和稳定性的人

Rust 适用于渴望某种语言的速度和稳定性的人。所谓速度,就是指你可以使用 Rust 创建的程序的速度,以及 Rust 允许你编写程序的速度。Rust 编译器的检查是通过添加功能和重构来确保稳定性的。这与没有进行这些检查的语言中易碎的旧代码片段相反,开发人员通常是不敢对其进行修改的。通过努力来实现零成本抽象,将高级功能编译为低级代码的速度与手动编写代码一样的快,Rust 努力使安全的代码也变得同样的快速。

Rust 语言希望也能支持其他许多用户,这里提到的只是一些最大的利益相关者。总体而言,Rust 的最大目标是通过提供安全性,生产率,速度和人体工程学来消除程序员数十年来接受的折衷方案。 尝试一下 Rust,看看它的选择是否对你有用。

# 本文档适合对象

本文档假定你已经用另一种编程语言编写了代码,但没有对哪种编程语言做任何假设。我们已尝试使具有广泛编程背景的人员可以广泛使用这些资源。我们没有花很多时间谈论什么是编程或如何思考它。 如果你是编程的新手,那么最好阅读一本专门介绍编程的书,为你提供更好的服务。

# 如何使用本文档

一般而言,本文档假定你是从前到后依次阅读的。后面的章节以前面的章节中的概念为基础,而前面的章节可能不会深入研究某个内容。我们通常会在下一章中重新讨论该内容。

在本文档中,你会发现两种章节:概念章节和项目章节。在概念章节中,你将学习 Rust 的一个基本概念。在项目章节中,我们将一起应用你到目前为止所学到的内容来构建小型程序。第 2、12 和 20 章是项目的章节;其余的是概念章节。

第 1 章介绍了如何安装 Rust,以及如何编写“ Hello,world!”。 程序,以及如何使用 Rust 的包裹管理器和构建工具 Cargo。 第 2 章是 Rust 语言的动手入门。 在这里,我们从高层次介绍概念,以后的章节将提供更多详细信息。 如果你想立即上手,那么第二章就是你的最佳选择。起初,你甚至可能想跳过第 3 章,它涵盖了 Rust 与其他编程语言类似的功能,而直接进入第 4 章以了解 Rust 的所有权系统。 但是,如果你是一个特别细致的学习者,并且喜欢在继续学习下一个细节之前先学习每一个细节,那么你可能想跳过第 2 章,直接进入第 3 章,而当你想学习一个细节时又回到第 2 章。应用你所学到的细节的项目。

第 5 章讨论结构和方法,第 6 章讨论枚举,匹配表达式以及 if let 控制流的构造。你将使用结构和枚举在 Rust 中创建自定义类型。

在第 7 章中,你将了解 Rust 的模块系统以及用于组织代码及其公共应用程序编程接口(API)的隐私权规则。第 8 章讨论了标准库提供的一些常见的集合数据结构,例如向量,字符串和 hash 图。第 9 章探讨了 Rust 的错误处理哲学和技术。

第 10 章深入探讨了泛型,特征和生存期,使你能够定义适用于多种类型的代码。第 11 章是关于测试的,即使使用 Rust 的安全保证,也必须进行测试,以确保你的程序逻辑正确。在第 12 章中,我们将通过 grep 命令行工具构建自己的功能子集,该工具可在文件中搜索文本。为此,我们将使用上一章中讨论的许多概念。

第 13 章探讨了闭包和迭代器:Rust 的功能,它们来自函数式编程语言。在第 14 章中,我们将更深入地研究 Cargo,并讨论与他人共享你的图书馆的最佳做法。第 15 章讨论了标准库提供的智能指针以及启用其功能的特征。

在第 16 章中,我们将介绍并发编程的不同模型,并讨论 Rust 如何帮助你轻松地在多个线程中进行编程。第 17 章介绍了 Rust 习惯用法与你可能熟悉的面向对象编程原理的比较。

第 18 章是有关模式和模式匹配的参考,它们是在整个 Rust 程序中表达思想的有力方法。第 19 章包含了一系列有趣的高级主题,包括不安全的 Rust,宏以及有关生存期,特征,类型,函数和闭包的更多信息。

在第 20 章中,我们将完成一个项目,在该项目中我们将实现一个低级多线程 Web 服务器!

最后,一些附录以更类似参考的格式包含有关该语言的有用信息。附录 A 涵盖了 Rust 的关键字,附录 B 涵盖了 Rust 的运算符和符号,附录 C 涵盖了标准库提供的可派生特征,附录 D 涵盖了一些有用的开发工具,附录 E 解释了 Rust 版本。

读这本书没有错误的方法:如果你想跳过,那就去吧!如果遇到任何困惑,你可能必须跳回到前面的章节。但是,尽一切可能为你工作。

学习 Rust 的过程的重要部分是学习如何读取编译器显示的错误消息:这些将指导你使用有效的代码。因此,我们将提供许多无法编译的示例,以及编译器将在每种情况下向你显示的错误消息。要知道,如果你输入并运行一个随机示例,则该示例可能无法编译!确保你阅读了周围的文字,以查看你尝试运行的示例是否有误。Ferris还将帮助你区分不起作用的代码:

Ferris Meaning
该代码无法编译!
这段代码引起恐慌!
此代码未产生所需的行为。

在大多数情况下,我们会引导你找到所有未编译代码的正确版本。

# 源代码

关于本文档的源文件都可以在github (opens new window)上被找到。