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 Media, Inc. 1005 Gravenstein Highway North Sebastopol, CA 95472 中国: 北京市西城区西直门南大街 2 号成铭大厦 C 座 807 室 (100035) 奥莱利技术咨询(北京)有限公司 O’Reilly 的每一本书都有专属网页,你可以在那儿找到本书的相关信 息,包括勘误表、示例代码[ 也可到图灵社区本书主页 ituring.com.cn/book/2846 下载示例代码。——编者注 对于本书的评论和技术性问题,请发送电子邮件至 errata@oreilly.com.cn。 要了解更多 O’Reilly 图书、培训课程和新闻的信息,请访问以下网站:https://www.oreilly.com。我们在 Facebook 的地址如下:http://facebook.com/oreilly。请关注我们的 Twitter 动态:http://twitter.com/oreillymedia。]以及其他信息。本书的网页是 https://oreil.ly/programming-rust-2e。 我们的 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。 最重要的是,衷心感谢我们的家人,感谢他们坚定不移的爱、热情和耐心。 中文版审读致谢 作为 Rust 与系统编程领域的经典,本书翻译难度较大。在此,诚挚地感谢在第 2 版中文版出版过程中参与公开审读活动的 30 位开发者 (含一线专家与爱好者)。 各位审读专家针对译文提出了大量宝贵的意见与建议,你们严谨的治学态度和对 Rust 语言的深刻理解让译者与编辑受益匪浅,也让本书的译文质量更上一层楼。在此以表格形式列出 30 位审读专家的姓名 (按姓氏字母排序),各章及章名与为之贡献的专家对应。 审读划分 章名 审读专家 第 1~3 章 第 1 章 系统程序员也能享受美好 陈骜、姜子龙、尚卓燃(PsiACE)、唐刚 (@Mike Tang) 第 2 章 Rust 导览 第 3 章 基本数据类型 第 4~6 章 第 4 章 所有权与移动 陈翔(@翔翔的学习频道)、刘燚、陶叶港 (@scruel)、杨思杰 第 5 章 引用 第 6 章 表达式 第 7~9 章 第 7 章 错误处理 寸志、胡屹、苏胤榕、张卫滨 第 8 章 crate 与模块 第 9 章 结构体 第 10~12 章 第 10 章 枚举与模式 刘久武、张鑫明、阴钰(@yxonic) 第 11 章 特型与泛型 第 12 章 运算符重载 第 13~15 章 第 13 章 实用工具特型 曹洪伟、柳佳龙、尹钢、张罗东 (@zhangll) 第 14 章 闭包 第 15 章 迭代器 第 16~18 章 第 16 章 集合 Kyle C、杜小豆、钱宇超(@stdrc)、杨光宇 第 17 章 字符串与文本
第 18 章 输入与输出
第 19~20 章 第 19 章 并发 耿腾、刘祺、逄振洲、赵梓淇(BugenZ) 第 20 章 异步编程 第 21~23 章 第 21 章 宏 艾尼、大妈(ZoomQuiet)、刘鑫 第 22 章 不安全代码 第 23 章 外部函数 本书虽已出版,但内容品质的提升不会终止。译者、编辑、审读专家虽已尽力,但疏漏可能在所难免,如果大家在阅读过程中发现任何问题,欢迎将其提交到图灵社区本书的勘误处 (ituring.com.cn/book/2846)。勘误经编辑确认之后会更正在重印书中。