自序

Rust,一门赋予每个人构建可靠且高效软件能力的语言。

这是 Rust 官网显要位置的宣传语,吸引力十足且激励人心,但并无夸张。经实际开发过程的检验,Rust 在性能、可靠性,以及生产力方面,都有极好的体现。对于项目和产品的推进,从技术层面来讲,大有裨益。

思想层面的提升

在现代的编程语言设计中,高层工程学和底层控制往往是鱼与熊掌的关系,不能兼得。而 Rust 语言设计开发团队则试图挑战这一矛盾,并且卓有成效。

比如 Rust 中最为与众不同的特性和核心功能之一的所有权(ownership)语义,它让 Rust 无需垃圾回收(garbage collector)即可保障内存安全。在内存管理和使用方面,Rust 程序员基于所有权系统,无须亲自分配和释放内存,无需垃圾回收,即可以控制底层细节。

再如生命周期(lifetime)的语义设计,有效地保持了引用的作用域,避免了悬垂引用。

又如模式匹配、lambda 表达式、并发支持、泛型支持等现代语言的特性,在 Rust 语言的设计思想中,都得到了一定程度的改进和提升。

实际应用的体验

Rust 语言实际应用的体验,我们可以通过很多介绍性的 Rust 资料,或者一些 Rust 理论书籍的扉页来了解,它们都对 Rust 的实际开发体验,进行了全面和客观的总结。在此,笔者仅直接引用官方的 Rust 选择理由,作为 Rust 相关书籍不可或缺的一节——

高性能。Rust 速度惊人且内存利用率极高。由于没有运行时和垃圾回收,它能够胜任对性能要求特别高的服务,可以在嵌入式设备上运行,还能轻松和其他语言集成。

可靠性。Rust 丰富的类型系统和所有权模型保证了内存安全和线程安全,让你在编译期就能够消除各种各样的错误。

生产力。Rust 拥有出色的文档、友好的编译器和清晰的错误提示信息, 还集成了一流的工具——包管理器和构建工具, 智能地自动补全和类型检验的多编辑器支持, 以及自动格式化代码等等。

“疯狂”的社区

Rust 诞生以来,受到了众多好评。自 2015 年 5 月中旬 Rust 发布 1.0 版本以来,感兴趣和学习者群体庞大。

  • 在 StackOverflow 社区,Rust 连续数年被程序员群体评为最想学习的程序设计语言;
  • 在 GitHub 社区,Rust 生态类开源项目已经超过 10 万,以及众多将 Rust 作为主要开发语言的第三方杀手级生态项目,如:facebook 主导的区块链项目 libra、JavaScript/TypeScript 运行时项目 deno 等;
  • 在官方 crates 注册站点,有效托管的 crate 已经达到 5 万左右,下载累计 45.6 亿次左右;
  • 官方开源文档站点 docs.rs,每天全球的访问量达到百万上下。

Rust 作为一个诞生仅 10 年,1.0 版发布不到 5 年的程序设计语言,其用户群体增长趋势可以使用“疯狂”来形容。

Rust 生态现状

在移动应用社区中,iOS 和 AndroidOS 是基础,对于开发者和使用者来说,移动生态甚至更加重要。Rust 语言同样如此,其语言设计思想,以及核心特性和功能可以快速吸引大批程序员体验 Rust 语言。但是,最终决定公司是否将 Rust 语言纳入技术栈,或者程序员是否将 Rust 作为自己的主力开发语言的因素,则更多取决于 Rust 的生态环境:广度、深度、成熟度。

如上节所述。在 GitHub 社区,Rust 生态类开源项目已经超过 10 万。在官方 crates 注册站点,有效托管的 crate 已经达到 5 万左右,下载累计 45.6 亿次左右。

在 Rust 社区中,有类库团队 Rust Libz Blitz,主要目标为保障 Rust 生态系统的坚实核心,以及提升 crate 完整性和质量。

截至目前,Rust 生态中的 crate(类库),大多数仅能通过官方 API 文档去了解。实际使用方面,也仅能查阅官方 API 文档中的简要示例,或者通过搜索引擎查找有无应用实例。对于经验丰富的 Rust 程序员,或许问题不大。但是,Rust 语言还处于新兴阶段,相对来说,还是因为感兴趣而自学入门的 Rust 新手程序员居多。

本书编撰原因和目标

籍于 Rust 生态现状,笔者认为对于 Rust 生态进行详细实践,对于同类 crate 进行深入应用、比较分析的 Rust 生态实践指南类书籍,是比较需要甚至迫切需要的。其可以帮助 Rust 程序员系统地了解 Rust 在各个技术方向上的应用,以及技术层面的应用成熟度。对于公司建立 Rust 团队和技术栈选型,也有很大的参考作用。

笔者编撰此书,既是出于此意。

本书侧重于实践,通过以下实践过程体现目标。

  • 涵盖经 Rust Libz Blitz 团队审查和改进的各个技术方向的 crate;
  • 涵盖社区较受欢迎的、成熟度较高的、维护团队活跃的的各个技术方向的 crate;
  • 对于 Rust 生态各类 crate 分类归纳,便于索引和查阅;
  • 对于 Rust 生态各类主要 crate 进行辅以实际开发环境的详细实践;
  • 对于同类 crate 进行深入应用、比较分析;
  • 完整实例,可独立运行,也可整合于实际开发环境;
  • 同步更新于 crate 官方仓库,保持最新版本的深入实践。

本书参考资料

本书是受到 rust-lang-nursery 团队的开源书籍项目 rust-cookbook 启发而产生的。本书的目录结构,直接学习借鉴了 rust-cookbook。

本书的 crate 均来自 Rust 社区,主要是官方 crates 注册站点、GitHub 开源社区。crate 的解读分析,则参考了 Rust 语言的官方开源文档站点中各自 crate 的基础文档。

除此之外,本书中的解读和分析,均由笔者基于对各个 crate 的实践应用而撰写。

本书实例代码

本书引用了 rust-cookbook 中的部分示例代码,以及其它开源项目的示例代码,以作为本书的基础实例。

因为在 rust-cookbook 文档中,涉及的 crate 和其实践实例较少,并且实例仅为代码展示,不适合 Rust 程序员新手学习。因此本书在引用 rust-cookbook 和其它开源项目的示例代码时,进行了详细实践,包括版本升级、深入解读、比较分析等方面。

除此自外,本书中的实例代码,均有笔者开发,以及跨平台调试、运行。

结语

感谢 Rust 社区各个 crate 开发者、rust-lang-nursery 团队的无私奉献!

笔者水平不足,错漏难免,敬请指导。

本书将完全开源,如果你感兴趣,欢迎参与,共结团队。

所谓学以聚之,问以辩之。欢迎交流,共同学习。

2020 年 11 月 16 日