前言(Preface)

Rust 是一门系统编程语言.

这里说明一下,因为大部分程序员对系统编程都不熟悉.但它是我们所做的一切的基础。

你合上笔记本.操作系统中断了所有在运行的程序,关掉屏幕,然后笔记本进入睡眠.而后,你打开笔记本:屏幕和其它部件再次通电,每个程序又能恢复如初.我们认为这是理所应当的.但是系统程序员为此写了大量代码.

系统编程包括:

  • 操作系统
  • 各种各样的驱动程序
  • 文件系统
  • 数据库
  • 运行在廉价设备或者极端可靠性设备上的代码
  • 密码学
  • 多媒体解码器(读写音频,视频和图像文件的软件)
  • 多媒体处理器(如:语音识别或照片编辑软件)
  • 内存管理器(如:实现一个垃圾回收器(garbage collector))
  • 文本渲染(文本和字体转换成像素)
  • 实现高级语言(像 Javascript 和 Python))
  • 网络
  • 虚拟化和软件容器
  • 科学计算
  • 游戏

简而言之,系统编程是资源受限(resource-constrained)的编程.编程时考虑到每一字节和每一CPU周期数.

涉及支撑基础应用的,系统代码量惊人.

本书不会教你系统编程.实际上,本书涵盖了许多内存管理的细节,如果你还没做过一些系统编程的工作,乍看起来看起来也许冗余难懂.

谁应该阅读本书(Who Should Read This Book)

如果你已是一位系统程序员,想要一个C++的替代品,本书适合你.如果你是任意编程语言的有经验的开发人员,不管是C#,Java,Python,Javascript,其它也好,本书也适合你.

然而,你不仅需要学Rust.为了有效地使用这门语言,你也需要获得系统编程的经验.我们建议阅读本书的同时,用Rust实现一些系统编程方面的项目.

我们为什么写了这本书(Why We Wrote This Book)

当我们开始学习Rust时,我们开始写我们想要的书.我们的目标是要正面地解决Rust中大的,新的概念.通过反复试错清晰深入地呈现它们,以便简化学习.

本书导览(Navigating This Book)

本书前两章是介绍Rust,本书的简要说明.第3章是基本数据类型,第4章和第5章论述所有权(ownership)和引用(references)的核心概念.建议按顺序阅读前五章.

第6章到第10章涵盖了语言的基础:表达式(expressions)(第6章),错误处理(error handling)(第7章), crates和模块(modules)(第8章),结构(structs)(第9章)以及枚举和模式(enums and patterns)(第10章).这里稍微略读没关系,但是不要跳过错误处理这章.相信我们.

第11章涵盖了traits和泛型(generics),这是你需要掌握的最后两个大的概念.traits像Java或C#中的接口(interfsces).它们也是Rust支持的将你的类型融入语言本身的主要的方式.第12章,展示了traits如何支持操作符重载(operator overloading),第13章涵盖了更多的实用traits.

理解traits和泛型可以解锁本书的其余部分.闭包(closure)和迭代器(iterators),你不应该错过的两个强有力工具,分别在第14章和第15章.剩余章节的阅读顺序可以随意安排,或者按需阅读.它们涵盖了语言的其余部分:集合(collections)(第16章),字符串(strings)和文本(text)(第17章),输入(input)和输出(output)(第18章),并发(concurrency)(第19章),宏(macros)(第20章),以及不安全代码(第21章).

本书使用的约定(Conventions Used in This Book)

本书使用如下排版约定:

斜体(Italic)

标示新的术语、URLs、电子邮件地址、文件名和文件扩展名.

等宽(Constant width)

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

等宽加粗(Constant width)

展示用户应该逐字键入的命令或其他文本.

等宽斜体(Constant width italic)

展示应用用户提供的值或者由上下文确定的值替换的文本.

使用代码示例(Using Code Examples)

补充材料(代码示例、练习等)可供下载: https://github.com/oreillymedia/programming_rust.

本书是为了帮助你完成工作.一般来说,如果用这本书提供示例代码,您可以在你的程序和文档中使用它.除非你再版了代码的重要部分,否则您不需要与我们联系以获得许可.例如,编写一个使用本书中的几个代码块的程序不需要许可.出售或分发来自O’Reilly书籍的示例代码的CD-ROM需要许可.引用本书和引用示例代码回答问题不需要许可.将本书中大量的示例代码嵌入到你产品的文档中需要许可.

我们感谢,但不要求,版权.版权通常包括标题、作者、出版商和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 Safari(O’Reilly Safari)

Safari(以前的Safari图书在线)是一个面向企业,政府,教育工作者和个人的基于会员的培训和参考平台.

会员可以访问来自250多家出版商(其中包括O’Reilly Media, Harvard Business Review, Prentice Hall Professional, Addison-Wesley Profes‐ sional, Microsoft Press, Sams, Que, Peachpit Press, Adobe, Focal Press, Cisco Press, John Wiley & Sons, Syngress, Morgan Kaufmann, IBM Redbooks, Packt, Adobe Press, FT Press, Apress, Manning, New Riders, McGraw-Hill, Jones & Bartlett, 以及Course Technology,等等)的数以千计的书籍,培训视频,学习路径,交互式教程和精选的播放列表.

更多信息请访问http://www.oreilly.com/safari.

如何联系我们(How to Contact Us)

请将这本书的评论和问题发表给出版商:

O’Reilly Media, Inc. 1005 Gravenstein Highway North Sebastopol, CA 95472 800-998-9938 (in the United States or Canada) 707-829-0515 (international or local) 707-829-0104 (fax)

我们有一个本书的网页,我们列出勘误表,例子,以及任何额外的信息.你可以访问http://bit.ly/programming-rust.

评论或者关于本书的技术问题可以发邮件邮件至 bookquestions@oreilly.com.

有关我们的书籍、课程、会议和新闻的更多信息参见网站http://www.oreilly.com.

关注我们的Facebook:http://facebook.com/oreilly

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

观看我们的YouTube:http://www.youtube.com/oreillymedia

致谢(Acknowledgments)

你所持有的这本书从我们的官方技术审稿人:Brian Anderson,Matt Brubeck,J. David Eisenberg和Jack Moffitt的关注中受益匪浅.

许多其他非官方审稿人阅读了早期草稿,并提供了宝贵的反馈.我们要感谢ddy 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.

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