Rust是一门面向系统编程的语言。

对此需要稍加解释,因为目前从业的大部分程序员对系统编程已经不是非常熟悉。然而系统编程是我们用计算机所做的所有工作的基础。

试想一下合上笔记本电脑这个场景。操作系统会发现电脑被合上,于是挂起所有正在运行的程序,关闭显示器,让计算机进入休眠。当再次打开电脑时,屏幕和其他组件又加电启动,每个程序在之前停顿的地方开始运行。我们认为这是理所当然的。但是,是系统程序员编写了大量代码,使之成为可能。

系统编程应用于很多场景,比如:

  • 操作系统
  • 各种设备驱动程序
  • 文件系统
  • 数据库
  • 运行在非常便宜的设备、或必须极为可靠的设备中的代码
  • 密码学
  • 多媒体编解码器(用于读写音频、视频和图像文件的软件)
  • 多媒体处理(如语音识别或图片编辑软件)
  • 内存管理(如实现一个垃圾收集器)
  • 文本渲染(将文本和字体转换为像素)
  • 实现更高级别的编程语言(比如JavaScript和Python)
  • 网络
  • 虚拟化和软件容器
  • 科学模拟
  • 游戏

简而言之,系统编程就是资源受限条件下的编程,每个字节、每个CPU周期都要考虑。

就算是支持一个非常简单的程序,涉及其中的系统代码,数量也是非常惊人的。

本书并不会教读者系统编程。确切地说,本书会介绍很多内存管理细节,如果没有亲身体会过系统编程,乍看上去会感觉这些细节不必要地深奥难懂。但如果是经验丰富的系统程序员,则会发现Rust的卓越之处,它根除了为人所熟知的、困扰整个业界数十年的大问题。

谁应该阅读这本书

如果你已经是系统程序员,而且正准备寻找C++的替代品,本书就是为你而写的。如果你是有经验的开发者,掌握其他任何一门编程语言,不管是C#、Java、Python、JavaScript还是其他语言,本书也适合你。

然而只学Rust是不够的。要想充分利用这门语言,还需要获得一些系统编程经验。我们建议在阅读本书的同时,用Rust实现一些系统编程副项目。利用Rust的快速、并发和安全等特性,开发一些我们之前没有做过的东西。前面提到的一些系统编程场景,对你应该有所启发。

我们为什么编写这本书

我们写书的出发点是,如果我们当初学习Rust时,有这么一本书就好了。我们的目标是先抓住Rust中一些重要的新概念,仔细讲解,步步深入,从而尽可能避免通过试错来学习。

本书导航

本书前两章会引入Rust,并简要介绍。第3章介绍基本数据类型。第4章和第5章介绍所有权(ownership)和引用(reference)这些核心概念。建议按顺序阅读前5章。

第6章到第10章介绍语言基础:表达式(第6章)、错误处理(第7章)、包(crate)和模块(第8章)、结构体(第9章)、枚举和模式(第10章)。跳着读也可以,不过不要跳过错误处理这一章。相信我们。

第11章介绍特性(trait)和泛型,这是读者需要掌握的最后两个大的概念。trait类似Java或C#中的接口。它们也是Rust支持开发者将自己的类型集成到语言中的主要方式。第12章演示trait如何支持操作符重载,第13章会介绍更多工具类trait。

理解了特性和泛型,学习后面的章节就有了基础。闭包(closure)和迭代器(iterator)这两个强大工具你肯定不希望错过,第14章和第15章将分别介绍。其余章节可以以任意顺序阅读,或者根据需要深入学习。这些章节会介绍Rust语言的其他概念:集合(第16章),字符串与文本(第17章),输入输出(第18章),并发(第19章),宏(第20章)和不安全的代码(第21章)。

本书所用约定

本书所用印刷约定如下:

斜体

表示新的术语、URL、电子邮件地址、文件名和文件扩展名。

等款字体

用于程序清单,以及段落中出现的程序元素,如变量名或函数名、数据库、数据类型、环境变量、语句和关键字。

等款粗体

表示命令或其他应由用户逐字输入的文本。

等宽斜体

表示应该用用户提供的值或上下文确定的值来替代的文本。

该图标表示技巧或建议。

该图标表示一般性说明。