前言
Rust 是一门系统编程语言。
如今,这个定位需要稍微解释一下,因为现在大多数以编程为业的工程师并不熟悉系统编程。然而只有理解系统编程才能更好地认识本书的意义。
你合上了自己的笔记本计算机。你的操作系统检测到这个动作,挂起所有运行的程序,关闭显示器,让计算机进入休眠状态。过了一会儿,你打开笔记本计算机,屏幕和其他应用便随之启动,每个程序都恢复到了之前的状态。我们认为这是理所当然的,但系统程序员为这一切编写了很多代码。
所谓系统编程,指的是编写:
- 操作系统
- 各种设备驱动
- 文件系统
- 数据库
- 运行在廉价设备或必须极端可靠设备上的代码
- 加解密程序
- 媒体编解码器(读写音频、视频和图片文件的软件)
- 媒体处理器(如语音识别或图片编辑软件)
- 内存管理程序(如实现垃圾收集器)
- 文本渲染程序(将文本和字体转换为像素)
- 高级编程语言(如 JavaScript 或 Python)
- 网络程序
- 虚拟化及软件容器
- 科学模拟程序
- 游戏
简言之,系统编程是一种资源受限的编程。这种编程需要对每个字节和每个 CPU 时钟周期精打细算。
支持一个简单程序运行所涉及的系统代码的数量是惊人的。
本书不会教你系统编程。事实上,本书会介绍很多内存管理的细节,如果没有一定的系统编程经验,这些乍一看有点过于深奥。但是,如果你是一名资深系统程序员,就会发现 Rust 有点不可思议。这门语言解决了困扰整个行业几十年、人所共知的重要问题。
读者对象
如果你就是一名系统程序员,而且在寻找 C++ 的替代品,那应该看看本书。如果你是一名有其他编程语言经验的开发者,无论是 C#、Java、Python、JavaScript,抑或别的语言,那也应该看看本书。
不过,你不仅仅需要学习 Rust。为了更好地理解这门语言,你也需要有一些系统编程的经验。建议你在阅读本书的同时,也用 Rust 写几个系统编程的项目。利用 Rust 的速度、并发和安全,构建一些从来没有构建过的应用。前面列出的那个清单应该能给你一点启发。
写作初衷
我们想写一本自己当初学习 Rust 时希望看的书。我们的目标是首先把 Rust 重要的新概念摆出来,直面问题,然后再把它们清晰、深入地讲清楚,通过反复尝试降低学习难度。
本书内容
本书前两章介绍 Rust 并提供了一个简单教程,第 3 章讲解基本的数据类型,第 4 章和第 5 章解释所有权和引用的核心概念。建议大家按顺序阅读前 5 章。
第 6 章到第 10 章讨论这门语言的基础,包括表达式(第 6 章)、错误处理(第 7 章)、包和模块(第 8 章)、结构体(第 9 章),以及枚举与模式(第 10 章)。这些章节可以跳着读,但一定不要跳过第 7 章。相信我们。
第 11 章介绍特型与泛型,这也是你需要知道的最后两个主要概念。特型类似于 Java 或 C# 中的接口。它们也是 Rust 支持的把你的类型集成到这门语言本身的主要方式。第 12 章展示如何通过特型实现操作符重载,第 13 章介绍更多的实用特型。
理解特型和泛型之后就可以阅读本书剩下的内容了。闭包和迭代器是两个不容错过的强大工具,第 14 章和第 15 章分别对它们进行了介绍。剩下的所有章节可以按任意顺序阅读,或者根据需要来研究。这些章节涵盖了这门语言的其他部分:集合(第 16 章)、字符串与文本(第 17 章)、输入和输出(第 18 章)、并发(第 19 章)、宏(第 20 章)以及不安全代码(第 21 章)。
排版约定
本书使用以下排版约定。
黑体
表示新术语和重点强调的内容。
等宽字体(
constant width
)用于程序清单,以及在段落内表示程序元素,比如变量或函数名、数据库、数据类型、环境变量、语句和关键字。
加粗等宽字体(
constant width bold
)表示应该由用户输入的命令或其他文本。
斜体等宽字体(
constant width italic
)表示应该使用用户提供的值或根据上下文确定的值来替换的文本。
此图标代表提示或建议。
此图标代表一般性说明。
此图标代表警告或提醒。
使用代码示例
书中示例的源代码请到ManBetX社区本书主页 “随书下载”处下载。
本书是帮助你完成工作的。一般来说,如果代码示例是本书提供的,你可以在自己的程序或文档中使用。除非大量复制本书代码,否则你不需要联系我们获取授权。例如,使用本书中的几段代码编写一个程序不需要获取授权。销售或者发布 O'Reilly 图书中代码的光盘,则需要获取授权。引用本书以及示例代码来回答问题不需要获取授权。将本书中的大量示例代码整合到你的产品文档中,则需要获取授权。
在使用代码时,我们希望能标明出处,但并不强求。出处一般包括书名、作者、出版商和 ISBN。例如,“Programming Rust by Jim Blandy and Jason Orendorff (O'Reilly). Copyright 2018 Jim Blandy and Jason Orendorff, 978-1-491-92728-1”。
如果还有关于使用代码的未尽事宜,可以随时与我们联系:[email protected]。
O'Reilly在线学习平台(O'Reilly Online Learning)
近 40 年来,O'Reilly Media 致力于提供技术和商业培训、知识和卓越见解,来帮助众多公司取得成功。
我们拥有独一无二的专家和革新者组成的庞大网络,他们通过图书、文章、会议和我们的在线学习平台分享他们的知识和经验。O'Reilly 的在线学习平台允许你按需访问现场培训课程、深入的学习路径、交互式编程环境,以及 O'Reilly 和 200 多家其他出版商提供的大量文本和视频资源。有关的更多信息,请访问 。
联系我们
与本书有关的评论和问题,请发给出版社。
美国:
O'Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
中国:
北京市西城区西直门南大街 2 号成铭大厦 C 座 807 室(100035)
奥莱利技术咨询(北京)有限公司
请访问 https://oreilly.com,到本书页面查看相关勘误。1
1本书中文版勘误请到 查看和提交。——编者注
与本书有关的评论或技术问题,请发送电子邮件至 [email protected]。
要了解更多我们出版的图书、课程、会议和新闻,请访问 。
我们在 Facebook 的地址如下:。
请关注我们的 Twitter 动态:。
请在 YouTube 上关注我们:。
致谢
本书很大程度上得益于我们官方技术审稿人的关注,感谢 Brian Anderson、Matt Brubeck、J. David Eisenberg 和 Jack Moffitt。
还有很多非官方审稿人阅读了早期的草稿并提供了有价值的反馈。感谢 Eddy Bruel、Nick Fitzgerald、Michael Kelly、Jeffrey Lim、Jakob Olesen、Gian-Carlo Pascutto、Larry Rabinowitz、Jaroslav Šnajdr 和 Joe Walker 为本书提出的中肯意见。Jeff Walden 和 Nicolas Pierron 特别慷慨地花时间几乎审校了全书。与任何编程冒险一样,一本编程书也会因为高质量的 bug 报告而茁壮成长。谢谢你们。
Mozilla 对我们在这个项目上的工作极为包容,即使这件事并非我们工作职责所在,而且还会占用一部分工作时间。非常感谢 Dave Camp、Naveed Ihsanullah、Tom Tromey 和 Joe Walker 这几位领导的支持。他们都在为 Mozilla 的长远着想,我们希望这份成果能够达到他们的期望。
我们还想表达对 O'Reilly 每一位编辑的感激之情,是他们让这个项目得以开花结果,尤其要感激 Brian MacDonald 和 Jeff Bleiel。
最重要的是,衷心感谢我们的妻子和孩子,感谢他们坚定不移的爱、热情和耐心。
电子书
扫描如下二维码,即可购买本书中文版电子版。