介绍

ch00-00-introduction.md


commit acc5ee25138531b030c6c4844de2b7066959021d

欢迎阅读 “Rust 程序设计语言”,一本介绍 Rust 的书。

Rust 是一门帮助你编写更快、更可靠软件的编程语言。高层工程学与底层控制在其他编程语言设计中往往是相互矛盾的;通过平很强大的技术能力与优秀的开发体验,Rust 提供了控制底层细节(比如内存使用)的选择,并免受通常随之而来的所有烦恼。

谁会使用 Rust

Rust 因多种原因适用于很多开发者。让我们讨论一些最为重要的群体。

开发者团队

Rust 被证明是可用于大型的拥有不同层次系统编程水平开发者团队的生产力工具。底层代码易于出现大量隐晦的 bug,对于其他编程语言这只能通过广泛的测试和有经验开发者细心的代码评审才能加以捕获。在 Rust 中,编译器充当了守门员的角色,它拒绝编译存在这类难以捕获 bug 的代码,包括并发 bug。通过与编译器合作,团队可以利用更多的时间专注于程序逻辑而不是追踪 bug。

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

  • Cargo,内置的依赖管理器和构建工具,它可以毫无痛苦的增加、编译和管理依赖,并使其在整个 Rust 生态系统中保持一致。
  • Rustfmt 在开发者之间确保了一致的代码风格。
  • Rust Language Server 为集成开发环境(Integrated Development Environment, IDE),提供了强大的代码补全和内联错误信息。

通过使用这些和其他一些 Rust 生态系统中的工具,开发者可以在编写系统级别代码时保持高生产力。

学生

Rust 适用于学生或任何对操作系统概念感兴趣的人。通过 Rust,很多人已经了解了像操作系统开发这样的主题。社区非常欢迎并乐于解答学生们的问题。通过类似于本书这样的努力,Rust 团队希望操作系统的概念为更多人所知,特别是那些对编程比较陌生的人。

公司

数以百计大大小小的公司正将 Rust 用于生产环境中的多种任务。这些任务包括命令行工具、web 服务、DevOps 工具、嵌入式设备、音视频分析与转码、数字货币(cryptocurrencies)、生物信息学(bioinformatics)、搜索引擎、物联网(internet of things, IOT)程序、机器学习,甚至还包括 Firefox 浏览器的大部分内容。

开源开发者

Rust 适用于希望构建 Rust 编程语言、社区、开发工具和库的开发者。我们期望你为 Rust 语言做贡献。

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

Rust 适用于渴望编程语言的速度与稳定性的开发者。对于速度,我们指你自身可以通过 Rust 开发程序的速度和 Rust 允许你开发他们的速度。Rust 的编译器检查确保了增加功能和重构代码时的稳定性,这与缺少这些检查的语言中开发者害怕修改那些脆弱的遗留代码形成了鲜明的对比。通过力求零成本抽象(zero-cost abstractions),高层次代码所编译的底层代码与手写的一样快,Rust 力图使安全的代码也同样快速。

虽然我们没有提供一个所有人希望 Rust 语言支持的功能的完整列表,这里提到的是一些最大的功能。总体上讲,Rust 最大的理想在于消除数十年来程序员所习惯接受的那些一分为二的取舍:安全 生产力、速度 工程学。请尝试 Rust,看看这些选择是否适合你。

谁会阅读本书

本书假设你已经使用其他编程语言编写过代码,但并不假设你使用了何种语言。我们尝试使材料能广泛的适用于来自很多不同编程背景的开发者。我们不会花费很多时间讨论编程 什么或者如何理解它。如果编程对于你来说是完全陌生的,你最好先阅读专门介绍编程的数据。

如何阅读本书

总体来说,本书假设你会从头到尾顺序阅读。稍后的章节建立在之前章节概念的基础上,同时之前的章节可能不会深入挖掘主题的细节;通常稍后的章节会重新提到这些主题。

你会在本书中发现两类章节:概念章节和项目章节。在项目章节中,我们学习 Rust 的某个方面。在项目章节中,我们应用目前所学的知识一同构建小的程序。第二、十二和二十章是项目章节;其余则是概念章节。

另外,第二章是一个 Rust 语言的介绍实践。我们会在高层次介绍一些概念,并在稍后的章节提供额外的细节。如果你希望立刻就动手实践一下,第二章正好适合你。开始阅读时,你甚至可能希望略过第三章,它介绍了 Rust 中类似其他编程语言中的功能,并直接阅读第四章学习 Rust 的所有权系统。然而,如果你是特别重视细节的学习者,并倾向于在继续之前学习每一个细节,你可能希望略过第二张并直接阅读第三章,并在想要构建项目来实践这些细节时再回到第二章。

第五章讨论了结构体和方法,第六章涉及了枚举、match 表达式和 if let 控制流结构。你会使用结构体和枚举在 Rust 中创建自定义类型。

第七章会学习 Rust 的模块系统和私有性规则来组织代码和公有应用程序设计接口(Application Programming Interface, API)。第八章讨论了一些标准库提供的通用集合数据结构,比如 vector、字符串和哈希 map。第九章探索了 Rust 的错误处理哲学和技术。

第十章深入理解泛型、trait 和生命周期,他们提供了定义可适用于多种类型的代码的能力。第十一章全部介绍测试,这即便在有 Rust 的安全保证来确保程序逻辑正确时仍然是必要的。第十二章,我们构建了属于自己的在文件中搜索文本的命令行工具 grep 的子集功能实现。为此会利用之前章节讨论的很多概念。

第十三章探索了闭包和迭代器:Rust 中来自函数式编程语言的功能。第十四章会更深层次的理解 Cargo 并讨论向他人分享库的最佳实践。

第十六章会学习不同的并发编程模型并讨论 Rust 如何帮助你无畏的多线程开发。第十七章着眼于比较 Rust 风格与你可能熟悉的面向对象编程原则。

第十八章是一个模式与模式匹配的参考章节,他们是在整个 Rust 程序中表达观念的强大方式。第十九章包含一个有趣的高级主题的大杂烩,包括不安全 Rust 和更多关于生命周期、 trait、类型、函数和闭包的内容。

第二十章会完成一个实现了底层多线程 web server 的项目!

最后是一些附录,包含了一些关于语言的参考风格格式的实用信息。附录 A 涉及了 Rust 的关键字。附录 B 涉及 Rust 的运算符和符号。附录 C 涉及标准库提供的派生 trait。附录 D 设计宏。

怎样阅读本书都不会有任何问题:如果你希望略过一些内容,请继续!如果你发现疑惑可能会再跳回之前的章节。无论怎样都是可以的。

学习 Rust 的过程中一个重要的部分是学习如何阅读编译器提供的错误信息:它们会指导你编写代码。为此,我们会提供很多不能编译代码示例,以及各个情况下编译器会展示错误信息。请注意如果随便输入并运行随机的示例代码,它们可能无法编译!请确保阅读任何你尝试运行的示例周围的内容检视他们是否有意为错误的。在大部分情况,我们会指引你到达任何不能编译的代码的正确版本。

源代码

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

译者注:本译本的 GitHub 仓库,欢迎 Issue 和 PR :)