前言

前言

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

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

 此图标代表提示或建议。

 此图标代表一般性说明。

 此图标代表警告或提醒。

使用代码示例

书中示例的源代码请到图灵社区本书主页 http://ituring.cn/book/2101“随书下载”处下载。

本书是帮助你完成工作的。一般来说,如果代码示例是本书提供的,你可以在自己的程序或文档中使用。除非大量复制本书代码,否则你不需要联系我们获取授权。例如,使用本书中的几段代码编写一个程序不需要获取授权。销售或者发布 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”。

如果还有关于使用代码的未尽事宜,可以随时与我们联系:permissions@oreilly.com

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

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

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

联系我们

与本书有关的评论和问题,请发给出版社。

美国:

  O'Reilly Media, Inc.

  1005 Gravenstein Highway North

  Sebastopol, CA 95472

中国:

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

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

请访问 http://oreilly.com,到本书页面查看相关勘误。1

1本书中文版勘误请到 http://ituring.cn/book/2101 查看和提交。——编者注

与本书有关的评论或技术问题,请发送电子邮件至 bookquestions@oreilly.com

要了解更多我们出版的图书、课程、会议和新闻,请访问 http://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 和 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。

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

电子书

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

目录

  • 版权声明
  • O'Reilly Media, Inc. 介绍
  • 前言
  • 第 1 章 为什么是Rust
  • 第 2 章 Rust初体验
  • 第 3 章 基本类型
  • 第 4 章 所有权
  • 第 5 章 引用
  • 第 6 章 表达式
  • 第 7 章 错误处理
  • 第 8 章 包和模块
  • 第 9 章 结构体
  • 第 10 章 枚举与模式
  • 第 11 章 特型与泛型
  • 第 12 章 操作符重载
  • 第 13 章 实用特型
  • 第 14 章 闭包
  • 第 15 章 迭代器
  • 第 16 章 集合
  • 第 17 章 字符串与文本
  • 第 18 章 输入和输出
  • 第 19 章 并发
  • 第 20 章 宏
  • 第 21 章 不安全代码
  • 作者介绍
  • 封面介绍