Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

简介

注:本书的这一版与 No Starch Press 出版的 The Rust Programming Language 印刷版和电子书版内容相同。

欢迎阅读 The Rust Programming Language(《Rust 程序设计语言》),一本关于 Rust 的入门书籍。 Rust 编程语言能帮助你编写更快、更可靠的软件。 高级易用性(high-level ergonomics)和底层控制力(low-level control)在编程语言设计中常常相互矛盾;Rust 挑战了这一矛盾。通过平衡强大的技术能力和优秀的开发者体验,Rust 让你能够在没有传统底层控制所带来的种种麻烦的情况下,掌控底层细节(例如内存使用)。

Rust 的受众

Rust 因多种原因而适合许多人。让我们来看看其中几个最重要的群体。

开发者团队

Rust 已被证明是一个高效的协作工具,适用于具有不同系统编程知识水平的大型开发者团队。底层代码容易出现各种微妙的 bug(漏洞),在大多数其他语言中,这些 bug 只能通过大量测试和经验丰富的开发者的仔细代码审查(code review)才能发现。在 Rust 中,编译器扮演着守门人的角色,拒绝编译包含这些难以捉摸的 bug(包括并发 bug)的代码。通过与编译器协同工作,团队可以将时间集中在程序的逻辑上,而不是追查 bug。

Rust 还将现代开发者工具带到了系统编程领域:

  • Cargo,内置的依赖管理器(dependency manager)和构建工具(build tool),使得在 Rust 生态系统中添加、编译和管理依赖变得轻松且一致。
  • rustfmt 格式化工具确保了开发者之间一致的编码风格。
  • Rust Language Server(RLS,Rust 语言服务器)为集成开发环境(IDE)提供了代码补全(code completion)和内联错误消息(inline error messages)的支持。

通过使用 Rust 生态系统中的这些工具以及其他工具,开发者在编写系统级代码时也能保持高效。

学生

Rust 适合学生以及那些有兴趣学习系统概念的人。许多人通过使用 Rust 学习了操作系统开发等主题。社区非常友好,乐于回答学生的问题。通过本书这样的努力,Rust 团队希望让更多人(尤其是编程新手)能够更容易地接触系统概念。

公司

数百家大大小小的公司将 Rust 用于生产环境中的各种任务,包括命令行工具(command line tools)、Web 服务(web services)、DevOps 工具、嵌入式设备(embedded devices)、音视频分析与转码(audio and video analysis and transcoding)、加密货币(cryptocurrencies)、生物信息学(bioinformatics)、搜索引擎(search engines)、物联网(IoT)应用、机器学习(machine learning),甚至 Firefox 浏览器的大部分核心功能。

开源开发者

Rust 适合那些想要构建 Rust 编程语言本身、社区、开发者工具和库的人。我们非常欢迎你为 Rust 语言做出贡献。

重视速度和稳定性的用户

Rust 适合那些追求语言的速度和稳定性的用户。所谓速度,我们既指 Rust 代码执行的速度,也指 Rust 让你编写程序的速度。Rust 编译器的检查确保了在添加功能和重构(refactoring)过程中的稳定性。相比之下,没有这些检查的语言中的脆弱遗留代码,开发者往往不敢轻易修改。通过追求零成本抽象(zero-cost abstractions)——即能够编译为与手写底层代码速度相当的高级特性——Rust 致力于让安全代码也成为快速代码。

Rust 语言也希望能支持许多其他用户;这里提到的只是其中一些最大的利益相关者。总的来说,Rust 最大的抱负是消除程序员几十年来所接受的权衡取舍,同时提供安全性 生产力、速度 易用性。试试 Rust,看看它的选择是否适合你。

本书的受众

本书假设你曾经用其他编程语言写过代码,但不对具体是哪一种语言做任何假设。我们努力使内容对来自各种编程背景的读者都具有广泛的易读性。我们不会花大量时间讨论编程 是什么 或如何思考编程。如果你是编程新手,那么阅读专门介绍编程入门的书籍会更合适。

如何使用本书

总的来说,本书假设你按照从前到后的顺序阅读。后面的章节建立在前面章节的概念之上,而前面的章节可能不会深入探讨某个特定主题的细节,但会在后面的章节中再次讨论。

你会在本书中找到两种章节:概念章节和项目章节。在概念章节中,你将学习 Rust 的某个方面。在项目章节中,我们将一起构建小型程序,应用你目前所学到的知识。第 2 章、第 12 章和第 21 章是项目章节;其余的是概念章节。

第 1 章 介绍如何安装 Rust、如何编写 “Hello, world!” 程序,以及如何使用 Cargo(Rust 的包管理器和构建工具)。第 2 章 是 Rust 编程的动手实践入门,让你构建一个猜数字游戏。在这里,我们高层次地介绍概念,后面的章节将提供更多细节。如果你想马上动手实践,第 2 章正合适。如果你是一个特别细致的学习者,喜欢在进入下一步之前掌握每一个细节,你可能想跳过第 2 章直接进入 第 3 章,其中介绍了 Rust 与其他编程语言相似的特性;然后,当你希望做一个应用所学细节的项目时,再回到第 2 章。

第 4 章 中,你将学习 Rust 的所有权(ownership)系统。第 5 章 讨论结构体(struct)和方法(method)。第 6 章 介绍枚举(enum)、match 表达式以及 if letlet...else 控制流结构。你将使用结构体和枚举来创建自定义类型。

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

第 10 章 深入探讨泛型(generic)、trait(特质)和生命周期(lifetime),它们使你能够定义适用于多种类型的代码。第 11 章 全部关于测试(testing),即使有 Rust 的安全性保证,测试对于确保程序逻辑的正确性也是必要的。在 第 12 章 中,我们将自己实现 grep 命令行工具的部分功能,用于在文件中搜索文本。为此,我们将使用之前章节中讨论的许多概念。

第 13 章 探讨闭包(closure)和迭代器(iterator):这些是 Rust 从函数式编程语言中借鉴的特性。在 第 14 章 中,我们将更深入地研究 Cargo,并讨论与他人共享库的最佳实践。第 15 章 讨论标准库提供的智能指针(smart pointer)以及实现其功能的 trait。

第 16 章 中,我们将介绍不同的并发编程模型,并讨论 Rust 如何帮助你在多线程中无畏地编程。在 第 17 章 中,我们在此基础上探索 Rust 的 async 和 await 语法,以及 task(任务)、future(未来)和 stream(流),以及它们所支持的轻量级并发模型。

第 18 章 探讨 Rust 的惯用写法与你可能熟悉的面向对象编程(object-oriented programming)原则的比较。第 19 章 是关于模式(pattern)和模式匹配(pattern matching)的参考,这是在 Rust 程序中表达思想的强大方式。第 20 章 包含了一系列有趣的高级主题,包括 unsafe Rust(不安全 Rust)、宏(macro),以及更多关于生命周期、trait、类型、函数和闭包的内容。

第 21 章 中,我们将完成一个项目,实现一个底层的多线程 Web 服务器!

最后,一些附录以更接近参考文档的格式提供了有关该语言的有用信息。附录 A 介绍 Rust 的关键字(keyword),附录 B 介绍 Rust 的运算符和符号,附录 C 介绍标准库中可派生(derivable)的 trait,附录 D 介绍一些有用的开发工具,附录 E 解释 Rust 的版本(edition)。在 附录 F 中,你可以找到本书的翻译版本,附录 G 将介绍 Rust 是如何制作的以及什么是 nightly Rust。

阅读本书没有错误的方式:如果你想跳着读,请便!如果遇到任何困惑,你可能需要回到前面的章节。但无论如何,选择适合你的方式。

学习 Rust 的一个重要部分是学习如何阅读编译器显示的错误消息:这些消息将引导你编写正确的代码。因此,我们将提供许多无法编译的示例,并附上编译器在每个情况下会显示的错误消息。请注意,如果你随意输入并运行某个示例,它可能无法编译!请确保你阅读了周围的文本,以确定你试图运行的示例是否本就应该出错。在大多数情况下,我们会引导你找到无法编译代码的正确版本。Ferris 也会帮助你区分哪些代码本就不该工作:

Ferris含义
带问号的 Ferris此代码无法编译!
举起双手的 Ferris此代码会 panic!
举起一只钳子耸肩的 Ferris此代码不会产生期望的行为。

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

源代码

生成本书的源文件可以在 GitHub 上找到。