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

简介

ch00-00-introduction.md

注意:此书的英文原版与 No Starch Press 出版的《The Rust Programming Language》纸质版和电子版一致。

欢迎阅读《Rust 程序设计语言》,这是一本关于 Rust 的入门书籍。Rust 编程语言能帮助你编写更快、更可靠的软件。在编程语言设计中,高层工程学与底层控制往往彼此冲突;而 Rust 则试图挑战这一矛盾。通过平衡强大的技术能力与优秀的开发者体验,Rust 为你提供了控制底层细节(如内存使用)的选项,而无需承受传统上与此类控制相关的所有繁琐负担。

Rust 适合哪些人

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

开发者团队

Rust 已被证明是一个适合拥有不同系统编程知识水平的大型开发团队协作的高效工具。底层代码容易出现各种微妙的错误,而在大多数其他语言中,这些错误往往只能通过大量测试以及经验丰富的开发者进行细致的代码审查来发现。在 Rust 中,编译器充当了守门人的角色,会拒绝编译包含这类隐蔽错误的代码,其中也包括并发错误。通过与编译器协作,团队可以将时间集中在程序逻辑上,而不是到处追查 bug。

Rust 也为系统编程世界带来了现代化的开发工具:

  • Cargo 是内置的依赖管理器和构建工具,它能轻松增加、编译和管理依赖,并使依赖在 Rust 生态系统中保持一致。
  • Rustfmt 格式化工具确保开发者遵循一致的代码风格。
  • Rust Language Server 为集成开发环境(IDE)提供代码补全和内联错误信息功能。

通过使用 Rust 生态系统中丰富的工具,开发者在编写系统级代码时可以更加高效。

学生

Rust 适合学生,也适合那些有兴趣学习系统概念的人。许多人通过 Rust 学习了操作系统开发等主题。社区非常欢迎学生提问,也乐于回答。通过这本书以及其他类似内容的努力,Rust 团队希望让系统概念对更多人来说更容易理解,尤其是那些编程新手。

公司

数百家大大小小的公司在生产环境中使用 Rust 完成各种任务,包括命令行工具、Web 服务、DevOps 工具、嵌入式设备、音视频分析与转码、加密货币、生物信息学、搜索引擎、物联网(IoT)应用、机器学习,甚至是 Firefox 浏览器的重要组成部分。

开源开发者

Rust 适合那些希望构建 Rust 编程语言、社区、开发工具和库的开发者。我们非常欢迎你为 Rust 语言作出贡献。

重视速度和稳定性的开发者

Rust 适合那些看重速度与稳定性的人。这里所说的速度,既指 Rust 代码运行得有多快,也指 Rust 让你编写程序的速度有多快。Rust 编译器的各项检查,能够在添加新功能和重构时保障稳定性。这与那些缺少这些检查的语言中脆弱的遗留代码形成鲜明对比,因为开发者往往害怕修改那样的代码。通过追求零成本抽象(zero-cost abstractions)这种目标,也就是让高级特性编译成底层代码后依然和手写代码一样快,Rust 致力于让安全的代码也同样快速。

这里提到的只是几个较大的受益群体,Rust 语言也希望能支持更多其他用户。总的来说,Rust 最大的抱负是消除程序员数十年来一直接受的那些取舍,让安全与生产力、速度与易用性可以兼得。试试看 Rust,看看它的选择是否适合你。

本书适合哪些人

本书假设你已经写过另一种编程语言的代码,但不限定具体是哪一种。我们努力让拥有各种编程背景的人都能读懂本书。本书不会花太多篇幅讨论程序设计本身是什么,也不会详细讲如何建立程序设计思维。如果你完全没有编程经验,那么先读一本专门介绍程序设计的入门书会更合适。

如何阅读本书

本书大体上假设你按从头到尾的顺序阅读。后面的章节建立在前面章节概念的基础上。前面的章节可能不会深入介绍部分主题,而是留待后续章节重新讨论。

本书分为两类章节:概念章节和项目章节。在概念章节中,我们学习 Rust 的某个方面。在项目章节中,我们会一起构建小程序,将目前学到的知识应用起来。第二、十二和二十一章是项目章节;其余都是概念章节。

第一章介绍如何安装 Rust,如何编写一个 “Hello, world!” 程序,以及如何使用 Rust 的包管理器和构建工具 Cargo。第二章则通过构建一个猜数字游戏,带你动手编写 Rust 程序。这里我们会在较高层次上介绍一些概念,而后续章节将提供更多细节。如果你想立刻动手实践,第二章就是最适合开始的地方。第三章介绍 Rust 中那些与其他编程语言相似的特性,第四章会学习 Rust 的所有权系统。如果你是一个特别细致的学习者,喜欢在进入下一环节之前学习每一个细节,你可能会想跳过第二章,直接阅读第三章;之后等你想通过项目运用学到的细节时,再回到第二章。

第五章讨论结构体(struct)和方法,第六章介绍枚举(enum)、match 表达式,以及 if letlet...else 控制流结构。在 Rust 中,创建自定义类型需要用到结构体和枚举。

第七章介绍 Rust 的模块(module)系统,以及用于组织代码及其公开 API(应用程序接口)的私有性规则。第八章讨论标准库提供的一些常见集合数据结构,例如 vector(动态数组)、字符串和 hash map(散列表、哈希表)。第九章探索 Rust 的错误处理理念与技术。

第十章深入介绍泛型(generic)、Trait 和生命周期(lifetime),这些功能让你能够定义适用于多种类型的代码。第十一章全面讲述了测试,因为就算 Rust 有安全保证,也需要测试确保程序逻辑正确。第十二章中将会构建我们自己的 grep 命令行工具的功能子集实现,用于在文件中搜索文本。为此会用到之前章节讨论的很多概念。

第十三章探索闭包(closure)和迭代器(iterator),它们是来自函数式编程语言的 Rust 特性。第十四章会更深入地探讨 Cargo,并介绍与他人共享库的最佳实践。第十五章讨论标准库提供的智能指针以及使其发挥作用的 trait。

第十六章将引导我们了解不同的并发编程模型,并探讨 Rust 如何帮助你无畏地进行多线程编程。第十七章将在此基础上进一步探索 Rust 的 async 和 await 语法,以及任务、future 和 stream,还有它们所支持的轻量级并发模型。

第十八章着眼于 Rust 风格与你可能比较熟悉的 OOP(面向对象编程)原则之间的比较。第十九章是一个关于模式与模式匹配的参考,它们是在 Rust 程序中表达思想的有力方式。第二十章则汇集了一系列你可能感兴趣的高级主题,包括不安全 Rust(unsafe Rust)、宏(macro),以及更多关于生命周期、trait、类型、函数和闭包的内容。

第二十一章我们将会完成一个项目,实现一个底层多线程的 Web 服务端!

最后的附录包含了一些关于该语言的实用信息,其格式更像是参考资料。附录 A 涵盖了 Rust 的关键字,附录 B 涵盖了 Rust 的运算符和符号,附录 C 涵盖了标准库提供的可派生 trait,附录 D 涵盖了一些有用的开发工具,而附录 E 解释了 Rust 版本。在附录 F 中,你可以找到本书的翻译版本,而在附录 G 中,我们将讨论 Rust 是如何制作的以及什么是 nightly Rust。

阅读本书没有错误的方式:如果你想跳过前面的内容,尽管跳过!如果你遇到任何困惑,可能需要回到前面的章节。请采取对你最有效的方式进行阅读。

学习 Rust 的一个重要部分,是学会如何阅读编译器显示的错误信息:它们会指引你写出能运行的代码。为此,我们将提供许多无法编译的示例,以及编译器在每种情况下会显示的错误信息。请注意,如果你随手输入并运行某个示例,它可能无法编译!请务必阅读示例周围的文字,确认你尝试运行的示例是否本来就预期会报错。Ferris 也会帮助你区分那些本就不是为了正常工作的代码:

Ferris含义
Ferris 头上有问号这段代码无法通过编译!
Ferris 举起两只钳子这段代码会 panic!
Ferris 举起一只钳子并耸肩这段代码的运行结果不符合预期。

在大部分情况,我们会指导你将无法通过编译的代码修改为正确版本。

源代码

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

译者注:此译本也有 GitHub 仓库,欢迎提交 Issue 和 PR :)