前言

Rust 是一门用于系统编程的语言。

事实上,大多数程序员并不熟悉系统编程,尽管它是我们日常工作的基础。

假设你合上了笔记本计算机,操作系统检测到这个行为,随即暂停了所有正在运行的程序、关闭屏幕,并让计算机进入睡眠状态。稍后,当你又打开笔记本计算机时,屏幕和其他组件再次启动,每个程序都能从断点处恢复运行。这些我们习以为常的功能,离不开系统程序员编写的大量系统程序。

系统编程用于:

  • 操作系统
  • 各种设备驱动程序
  • 文件系统
  • 数据库
  • 在成本极低或可靠性要求极高的设备上运行的代码
  • 加密解密
  • 媒体编解码器(用于读取和写入音频、视频和图像文件的软件)
  • 媒体处理(例如,语音识别或照片编辑软件)
  • 内存管理(例如,实现垃圾回收器)
  • 文本渲染(将文本和字体转换为像素)
  • 实现高级编程语言(如 JavaScript 和 Python)
  • 网络编程
  • 虚拟化和软件容器
  • 科学仿真
  • 游戏

简而言之,系统编程是 资源受限 条件下的编程。每字节、每个 CPU 周期,对于程序正常运行都尤为重要。

即便是支持一个最基本的应用程序,涉及的系统代码量也是惊人的。

本书并不会教你如何进行系统编程。虽然本书涵盖了内存管理的许多细节,但是如果你还没有亲自做过系统编程,那么这些细节乍一看可能会有点儿过于深奥。如果你是一名经验丰富的系统程序员,就会看出 Rust 的卓尔不群:这种新工具可以解决困扰整个行业数十年的、众所周知的重大问题。

读者对象

如果你已经是系统程序员并且正准备物色一款 C++ 的替代品,那么本书适合你。如果你是任何一种编程语言的资深开发人员,无论是 C#、Java、Python、JavaScript,还是其他语言,那么本书同样适合你。

不过,你不能仅仅学习 Rust 语言本身。要充分发挥该语言的价值,还需要接触一些系统编程知识。我们建议你在阅读本书的同时,使用 Rust 实现一些系统编程领域的业余项目,利用 Rust 的速度、并发和安全,构建出你以前从未构建过的东西。开头那个主题列表应该会给你一些启发。

写作初衷

最初学习 Rust 时,我们曾期待有这样一本书,这正是本书的写作初衷。我们的目标是直面 Rust 中一些重大而新颖的概念,清晰而深入地呈现它们,从而减少学习中的试错成本。

浏览本书

本书前两章简要介绍了 Rust 的背景知识,接着在第 3 章开始介绍基本数据类型。第 4 章和第 5 章讨论了“所有权”和“引用”这两个核心概念。建议你按顺序通读前 5 章。

第 6 章到第 10 章涵盖了 Rust 这门语言的基础知识:表达式(第 6 章)、错误处理(第 7 章)、crate 与模块(第 8 章)、结构体(第 9 章),以及枚举与模式(第 10 章)。这几章可以稍微读快一些,但不要跳过第 7 章。

第 11 章介绍了特型与泛型,这是最后两个你需要了解的重要概念。特型就像 Java 或 C# 中的接口。它们也是 Rust 用来将你的类型集成到语言本身的主要方式。第 12 章展示了如何用特型支持运算符重载,第 13 章介绍了更多的实用工具特型。

了解特型和泛型可以帮你解锁本书其余部分的知识。不容错过的两个强大工具——闭包和迭代器,会分别在第 14 章和第 15 章中进行介绍。剩下的几章你可以按任意顺序阅读,或根据需要深入阅读。它们涵盖了这门语言的其余部分:集合(第 16 章)、字符串与文本(第 17 章)、输入与输出(第 18 章)、并发(第 19 章)、异步编程(第 20 章)、宏(第 21 章)、不安全代码(第 22 章),以及调用来自其他语言的函数(第 23 章)。

排版约定

本书使用以下排版约定。

黑体

表示新术语或重点强调的内容。

等宽字体( constant width

表示程序片段,以及正文中出现的变量名、函数名、数据库、数据类型、环境变量、语句和关键字等。

加粗等宽字体( constant width bold

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

等宽斜体( constant width italic

表示应该由用户输入的值或根据上下文确定的值替换的文本。

此图标表示一般性注释。

使用代码示例

补充材料(代码示例、练习等)可在 https://github.com/ProgrammingRust 下载。

本书旨在帮助你完成工作。一般来说,你可以在自己的程序或文档中使用本书提供的示例代码。除非需要复制大量代码,否则无须联系我们获得许可。比如,使用本书中的几个代码片段编写程序无须获得许可,销售或分发 O'Reilly 图书的示例光盘则需要获得许可;引用本书中的示例代码回答问题无须获得许可,将本书中的大量示例代码放到你的产品文档中则需要获得许可。

我们很希望但并不强制要求你在引用本书内容时加上引用说明。引用说明一般包括书名、作者、出版社和 ISBN。比如“ Programming Rust, Second Edition by Jim Blandy, Jason Orendorff, and Leonora F. S. Tindall (O'Reilly ). Copyright 2021 Jim Blandy, Leonora F. S. Tindall, and Jason Orendorff, 978-1-492-05259-3”。

如果你对示例代码的用法超出了上述的许可范围,欢迎你通过 permissions@oreilly.com 与我们联系。

O'Reilly 在线学习平台(O'Reilly Online Learning)

{%}

40 多年来,O'Reilly Media 致力于提供技术和商业培训、知识和卓越见解,来帮助众多公司取得成功。

我们拥有独特的由专家和创新者组成的庞大网络,他们通过图书、文章和我们的在线学习平台分享他们的知识和经验。O'Reilly 在线学习平台让你能够按需访问现场培训课程、深入的学习路径、交互式编程环境,以及 O'Reilly 和 200 多家其他出版商提供的大量文本资源和视频资源。有关的更多信息,请访问 https://www.oreilly.com

联系我们

如有与本书有关的评价或问题,请联系出版社。

美国:

O'Reilly Media, Inc.

1005 Gravenstein Highway North

Sebastopol, CA 95472

中国:

北京市西城区西直门南大街 2 号成铭大厦 C 座 807 室(100035)

奥莱利技术咨询(北京)有限公司

O'Reilly 的每一本书都有专属网页,你可以在那儿找到本书的相关信息,包括勘误表、示例代码1以及其他信息。本书的网页是 https://oreil.ly/programming-rust-2e

对于本书的评论和技术性问题,请发送电子邮件至 errata@oreilly.com.cn

要了解更多 O'Reilly 图书、培训课程和新闻的信息,请访问以下网站: https://www.oreilly.com

我们在 Facebook 的地址如下: http://facebook.com/oreilly

请关注我们的 Twitter 动态: http://twitter.com/oreillymedia

我们的 YouTube 视频地址如下: http://www.youtube.com/oreillymedia

致谢

本书得以面世得益于我们的官方技术审稿人的关注,感谢 Brian Anderson、Matt Brubeck、J. David Eisenberg、Ryan Levick、Jack Moffitt、Carol Nichols 和 Erik Nordin。还要感谢本书各语种版本的翻译人员:Hidemoto Nakada(中田秀基)(日语)、李松峰(简体中文第 1 版)、汪志成(简体中文第 2 版),以及 Adam Bochenek 和 Krzysztof Sawka(波兰语)。

另外,许多非官方审稿人也阅读了早期的草稿并提供了宝贵的反馈。感谢 Eddy Bruel、Nick Fitzgerald、Graydon Hoare、Michael Kelly、Jeffrey Lim、Jakob Olesen、Gian-Carlo Pascutto、Larry Rabinowitz、Jaroslav Šnajdr、Joe Walker 和 Yoshua Wuyts 对本书给出的深思熟虑的评论。Jeff Walden 和 Nicolas Pierron 花大量时间几乎审阅了全书。与任何编程冒险一样,编程书总是因高质量的错误报告而日益兴盛。感谢你们。

Mozilla 非常支持吉姆和贾森在这个项目上的工作,尽管这不属于我们的官方职责范围,并且一定程度上会分散我们的注意力。非常感谢吉姆和贾森的经理 Dave Camp、Naveed Ihsanullah、Tom Tromey 和 Joe Walker 的支持。他们从长远的角度看待 Mozilla 的意义,我们希望这些成果能证明他们对我们的信任是对的。

还要感谢 O'Reilly 出版社帮助这个项目取得成果的每一个人,尤其是我们极富耐心的编辑 Jeff Bleiel 和 Brian MacDonald,以及我们的策划编辑 Zan McQuade。

最重要的是,衷心感谢我们的家人,感谢他们坚定不移的爱、热情和耐心。

电子书

扫描如下二维码,即可购买本书中文版电子书。

{%}