学习一门编程语言,仅学习相关的语法和语义是不够的,你还需要在相关的社区深入探索。然而,社区中共享的那些知识、术语和实践,对新加入的人而言,很可能就成了无形的障碍。
如果你已经在网上学过 Rust 开源资料,但是会问自己“接下来该学点什 么”,那么推荐您这本《Rust实战》。
《Rust实战》包含数十个有趣的示例,如果你有自己的想法且时间允许,还可以进一 步扩展这些示例。这些示例使得本书 12 章的内容涵盖了 Rust 的一个颇为有用的子集,以及许多生态系统会用到的那些最重要的第三方库。
这些代码示例更注重的是易读性,而不是注重如何优雅、地道地使用Rust。如果你是一个很有经验的 Rust 程序员,那么可能会发现自己并不认同这些例子中的一些样式设定。我希望你能够体谅这是在为初学者考虑。
这并不是一本内容全面的参考书, 因此略去了语法和标准库的部分内容。通常情况下,这 些省略掉的内容都是高度专业的,应该给予“特殊待遇”。然而,本书旨在为读者提供足够的 基础知识和信心, 以便在必要时再进一步学习这些特定的主题。从系统编程书的角度来看,本 书也是很独特的,因为几乎本书的所有示例都能在微软的 Windows 上运行。
所有对 Rust 感兴趣的人,喜欢通过实用的示例来学习的人,或者是那些被“Rust 是一种 系统编程语言”这一事实吓到的人,都应该会喜欢本书。有编程经验的读者将获益更多, 因为 本书会假定读者已经了解一些计算机编程的基本概念。
本书的正文分为两部分。第一部分介绍 Rust 的语法和一些独特的特点,第二部分会应用 到在第一部分中介绍的这些知识。每一章都会引入一到两个新的 Rust 概念。第一部分是对 Rust 的快速介绍。
第 1 章解释 Rust 存在的原因,以及如何开始用它来编程。
第2 章提供翔实的Rust 语法基础知识。本章示例包括芒德布罗集渲染器和一个 grep 的克隆。
第3 章讲解如何组合 Rust 的数据类型以及如何使用一些错误处理的工具。
第4 章讨论 Rust 中确保要访问的数据始终有效的机制。 第二部分是将 Rust 应用于系统编程领域的一些基础性介绍。
第 5 章介绍在数字计算机中信息是如何表示的,重点介绍数字是如何被近似表示的。 本章示例包括实现定点数格式和一个 CPU 模拟器。
第6 章阐释引用、指针、虚拟内存、栈和堆等术语。本章示例包括一个内存扫描器和 自动生成艺术项目。
第7 章阐释如何将数据结构存储到存储设备中。本章示例包括一个 hexdump 的克隆和 一个可运行的数据库。
第 8 章通过多次重新实现 HTTP 讲解计算机是如何进行通信的,每一次实现都会剥离 掉一个抽象层。
第9 章探索在数字计算机中跟踪时间的过程。本章示例包括一个可运行的 NTP 客户端。
第 10 章介绍进程、线程和一些相关的抽象概念。本章示例包括一个海龟绘图应用程序 和一个并行解析器。
第 11 章介绍操作系统的作用和计算机是如何启动的。本章示例包括编译自己的引导加 载程序和操作系统内核。
第 12 章阐释外部世界是如何与CPU 和操作系统进行通信的。
作为一门编程语言,Rust 与众不同的一个特点就是,它能够在编译时就防止对无效数据的 访问。微软安全响应中心的研究项目和 Chromium 浏览器项目都表明了,与无效数据访问相关 的问题约占全部严重级安全漏洞(serious security bug)的 70% 。Rust 消除了此类漏洞。它能保证程序是内存安全 (memory safe)的,并且不会引入额外的运行时开销。
其他语言可以提供这种级别的安全性(safety),但它们需要在程序的执行期添加额外检查, 这无疑会减慢程序的运行速度。Rust 设法突破了这种持续已久的状况,开辟出了属于自己的空 间,如图 1.1 所示。
图 1.1 Rust 兼具安全性和可控性,其他语言则倾向于在这两者之间进行权衡和取舍
就像 Rust 专业社区所认可的那样,Rust 的与众不同之处是“愿意将价值观明确纳入其决 策流程中”。这种包容精神无处不在。来自互联网用户的互动消息受欢迎。Rust 社区内的所有 互动均受其行为准则约束,甚至 Rust 编译器的错误信息都是非常有帮助的。
早在 2018 年年底之前,浏览 Rust 网站主页的访问者还会看到这样的(更偏向技术性的) 宣传语—Rust 是一门运行速度极快,能防止出现段错误并能保证线程安全的系统编程语言。
后来,社区更改了措辞,从更改后的内容(见表 1.1)可以看出,措辞方面已经是以用户(和 潜在用户)为中心的了。
表 1.1 Rust 宣传语的变更。随着对 Rust 的发展越来越有信心,社区越来越多地接受了这样一种观 念,就是可以作为每个希望实现其编程愿望的人的促进者和支持者
人们给 Rust 打上了系统编程语言的印记,通常将其视为一个相当专业的、深奥的编程语 言分支。但是,许多 Rust 程序员发现该语言还适用于许多其他领域。安全性、生产力和控制, 在软件工程项目中都很有用。Rust 社区的“包容性”也意味着,该语言将源源不断地从来自不 同利益群体的“新声音”中汲取营养。