Rust 两周年

2017 年 5 月 15 日 · Carol (Nichols || Goulding)

Rust 是一种用于自信、高效的系统编程语言。它旨在使系统编程更易于访问,并提高经验丰富的系统黑客的雄心壮志。

距离 Rust 1.0 发布已经两年了。祝 Rust 二周年生日快乐!

Group picture from RustFest Berlin

2016 年 9 月,RustFest 柏林的 Rustaceans。图片由 Fiona Castiñeira 拍摄

在这两年中,我们证明了稳定性而不停滞,保持了与 1.0 版本的向后兼容性,同时还进行了许多改进。方便的是,Rust 的生日恰好是 2017 年年中,这让我们不仅可以回顾过去一年的进展,还可以回顾我们 2017 年路线图 目标的进展。

阅读完这篇文章后,如果您想向我们反馈我们做得如何以及 Rust 应该将重点放在哪里,请填写我们的 2017 年 Rust 状态调查

但首先,让我们看看数字!

Rust 的数字

自从 Rust 一周年生日 以来,发生了很多事情

  • 663 位贡献者(其中 438 位是今年新加入的)提交了 10,800 次 提交 到核心仓库;
  • 合并了 56 个 RFC
  • 发布了 9 个次要版本和 2 个补丁版本;
  • 发布了 4,405 个新的 crate
  • 标准库稳定了 284 个;
  • rust-lang.org 网站被翻译成了 10 种语言;
  • 48 家新公司 在生产环境中使用 Rust
  • 新增了 4 个团队(文档、风格、基础设施和不安全指南突击队);
  • 24 次人员加入团队,6 次人员退出团队;
  • Rust 团队 中有 3 个孩子出生;
  • 2 年的 稳定性交付

今年平均每周,Rust 社区合并 1 个 RFC 并发布 83 个新的 crate。在 StackOverflow 调查中,Rust 连续第二年荣登“最受欢迎 语言”榜首。今年新推出的还有 thanks.rust-lang.org 网站,您可以在该网站上按版本浏览贡献者。

Rust 在生产环境中

除了 48 个新的 Rust 朋友之外,我们现在还有 Rust 工作网站!越来越多的公司选择 Rust 来解决涉及性能、扩展性和安全性的问题。让我们看看其中的一些公司。

Dropbox 在多个高影响力项目中使用 Rust 来管理后端的艾字节数据,在这些项目中,正确性和效率至关重要。Rust 代码目前也已在运行在 **数亿** 台机器上的 Windows 桌面客户端中发布。Jamie Turner 最近在 SF Rust 聚会上发表了演讲,介绍了 Rust 如何帮助 Dropbox 使用更少的 RAM 并以更少的 CPU 获得更高的吞吐量。

Mozilla 是 Rust 的主要赞助商,它加速了 Rust 在生产环境中的使用。不仅 Servo 开始发布 nightly 版本Firefox 48 也是第一个包含 Rust 代码的 Firefox 版本,它是 Oxidation 项目的一部分。2016 年 10 月宣布的 Project Quantum 旨在将 Servo 中经过验证的部分逐步引入 Firefox 的渲染引擎 Gecko。 查看这个博客系列,它刚刚开始,详细介绍了 Project Quantum。

GNOME 是一个用于 Linux 的免费开源桌面环境,它从 2016 年 10 月在 librsvg 中实验 Rust 开始,到 3 月份举办了 黑客马拉松,致力于 GNOME 和 Rust 之间的互操作性,以便更多 GNOME 组件可以用 Rust 编写。黑客马拉松的参与者取得了良好的进展,请务必查看黑客马拉松页面底部的报告,了解所有详细信息。我们都对 Rust 和 GNOME 协同工作的前景感到兴奋。

今年,npm 开始在生产环境中使用 Rust 来提供 JavaScript 包。Rust 部分消除了其平台中的性能瓶颈,该平台每天提供约 3.5 亿个包。 Ashley Williams 最近在乌克兰的 RustFest 上发表了演讲,介绍了 npm 在生产环境中使用 Rust 的经验;查看 视频

这只是围绕 Rust 积累的成功案例的一个样本。如果您在生产环境中使用 Rust,我们希望 也听到您的故事

Rust 在社区中

说到会议,我们去年举办了四场 Rust 会议

  • 2016 年 9 月 9 日至 10 日:RustConf 2016 在美国俄勒冈州波特兰举行;
  • 2016 年 9 月 17 日:RustFest 2016 在德国柏林举行;
  • 2016 年 10 月 27 日至 28 日:Rust Belt Rust 2016 在美国宾夕法尼亚州匹兹堡举行;
  • 2017 年 4 月 29 日至 30 日:RustFest 2017 在乌克兰基辅举行。

我们至少还有三场会议即将举行!

这还不包括 全球 103 个关于 Rust 的聚会。您会是举办第四场会议或发起第 104 个聚会的人吗?联系社区团队 获取帮助和支持!

2017 年的 Rust

2017 年路线图 目标非常适合将社区的努力集中在当今 Rust 面临的最紧迫问题上。当然,我们希望 Rust 的各个方面都能不断改进,但我们还没有无限数量的贡献者和无限的时间!

让我们看看路线图中每个目标的计划的进展情况。链接的跟踪问题提供了比这里总结更详细的信息。

Rust 应该有一个更低的学习曲线

《Rust 编程语言》第二版 距离完成初始内容只有一章的距离。不过,还需要进行大量的编辑才能使这本书在 10 月份出版。印刷版目前可以从 No Starch 预订,第二版的在线版本已经登上 beta 版列车,并将成为 Rust 1.18.0 附带的文档中的一个选项。史蒂夫和我收到了反馈,认为 所有权章节 尤其得到了很大改进,帮助人们更好地理解所有权相关的概念!

语言人体工程学计划 是降低学习曲线目标的另一个组成部分,它在 管道中有一些改进。语言团队渴望指导对参与这些人体工程学改进想法的推进感兴趣的人(另一个目标!),方法是编写 RFC 并与社区合作,详细阐述这些改进的工作方式。如果您想加入,请在 跟踪问题 上发表评论。

还可以查看

Rust 应该有一个愉快的编辑-编译-调试循环

等待编译器是阻止 Rust 开发工作流程被描述为“愉快”的最大障碍。到目前为止,已经做了很多幕后工作来使未来的改进成为可能。这些改进开始显现,但请放心,这项计划远未完成。

改进的主要先决条件之一是在编译器管道中添加 MIR(中级中间表示)。今年,MIR 成为编译过程的默认部分

由于有了 MIR,我们现在可以开始添加增量重新编译。nightly 版本目前提供 “beta 版支持”,允许编译器跳过对未更改的代码的代码生成。我们正在重构编译器以支持更细粒度的增量计算,从而允许我们跳过类型检查和编译的其他部分。这种重构还应该为 IDE 工作提供更好的支持(见下一节),因为它使编译器能够执行诸如单独编译单个函数之类的操作。我们预计在未来几个月内将看到增量编译的下一阶段可用。如果您想参与其中,请查看 路线图问题 #4,该问题会定期更新以反映当前状态以及需要帮助的地方。

2 月份的帖子 讨论了“beta 版”支持,结果表明,使用增量编译,在发布模式下重新编译通常会 **快五倍**!此图表显示了在对 regex crate 的各个部分进行更改并在发布模式下重建时,编译时间的改进

Graph showing improved time with incremental compilation

使用 CARGO_INCREMENTAL=1 cargo <command> 在 nightly Rust 上尝试增量编译!

感谢 Niko Matsakis 提供了这个增量编译摘要!

我们还在进行全编译所需时间的改进方面取得了一些进展。平均而言,编译时间在过去一年中提高了 5-10%,但已修复了一些最坏情况的行为,导致某些程序的改进幅度超过 95%。今年晚些时候将推出一些非常有希望的改进;查看 perf.rust-lang.org 以监控 Rust 的日常性能。

Rust 应该提供基本但坚固的 IDE 体验

作为我们 IDE 计划的一部分,我们创建了 Rust 语言服务器 项目。它的目标是创建一个单一工具,使任何编辑器或 IDE 都能轻松地使用 Rust 编译器的全部功能进行错误检查、代码导航和重构,方法是使用由 Microsoft 和 Eclipse 创建的标准 语言服务器协议

虽然 RLS 仍处于早期阶段,但今天它已 从 rustup 可用,供 nightly 用户使用。它提供悬停时的类型信息、键入时的错误消息以及不同类型的代码导航。它甚至提供重构和格式化作为不稳定功能!它适用于像 Cargo 一样大的项目。我们很高兴看到 RLS 继续发展,并希望看到它在今年晚些时候进入稳定版 Rust。

感谢 Jonathan Turner 提供此 RLS 摘要!

Rust 应该拥有 1.0 级别的箱子来完成基本的任务,以及 Rust 应该提供轻松获取高质量箱子的方式

关于 Libz Blitz 的最近帖子 详细介绍了库团队提高常见任务箱子质量的计划;该帖子非常棒,所以我不会在这里重复它。我将指出,Libs 团队将要创建的许多问题将是极好的入门问题。为了使 Blitz 达到最佳状态,Libs 团队需要社区的帮助——这意味着您!:) 他们愿意指导有兴趣贡献的人。

为了使人们更容易找到特定用途的优秀箱子,crates.io 现在拥有 类别,供箱子作者更好地指示其箱子的用例。箱子现在也可以拥有 CI 徽章,并且 crates.io 界面将进行更多改进,这将帮助您选择适合您需求的箱子。

Rust 应该适合编写健壮、高规模的服务器

Rust 生态系统在过去一年中的重大事件之一是引入了零成本 futures 库,以及一个框架 Tokio,用于在其之上进行异步 I/O。这些库对于进行高规模、高可靠性服务器编程非常有利,而且富有成效。Futures 已在 C++Scala 以及当然还有 JavaScript(以 promise 的形式)中取得了巨大成功,我们正在 Rust 中收获类似的益处。但是,Rust 库采用了一种新的实现方法,使 futures 无分配。Tokio 在此基础上构建了一个支持 futures 的事件循环,以及许多用于快速实现新协议的工具。使用 Tokio 的简单 HTTP 服务器是 TechEmpower 服务器基准测试中测得速度最快的服务器之一。

说到协议,Rust 的完整 HTTP 故事正在成形,Hyper 的主分支目前提供完整的 Tokio 支持(官方发布即将到来)。HTTP/2 的工作正在顺利进行。Web 框架生态系统也在不断发展。例如,Rocket 今年发布了:它是一个框架,将脚本框架的人体工程学和灵活性与 Rust 的性能和可靠性结合在一起。再加上像 Diesel ORM 这样的支持库,这个生态系统展示了 Rust 如何在不牺牲性能或可靠性的情况下提供流畅、符合人体工程学的开发人员体验。

在今年剩余的时间里,我们预计上述所有库都将显著成熟;中间件生态系统将蓬勃发展;支持的协议和服务的范围将扩大;而且,很有可能,将所有这些都与一个与 Rust 的 futures 原生配合的 async/await 符号结合起来。

感谢 Aaron Turon 提供此服务器端摘要!

Rust 应该轻松集成到大型构建系统中

Cargo,Rust 的原生包管理器和构建系统,经常被人们认为是 Rust 最受欢迎的方面之一。但当然,世界运行在许多构建系统上,当您想将一部分 Rust 生态系统引入拥有自己现有构建系统的大型组织时,平滑集成至关重要。

该计划主要处于想法阶段;我们已经与利益相关者进行了大量合作,以了解当今构建系统集成中的挑战,我们认为我们对如何解决这些挑战有一个良好的总体愿景。跟踪问题中有很多很棒的讨论,导致了一些像这样的 Cargo 问题

还有很多细节有待解决;请密切关注该领域即将出现的更多改进。

Rust 的社区应该在所有级别提供指导

路线图项目中的“所有级别”部分对我们很重要:它既是关于让首次贡献者加入,也是关于在核心团队级别添加人员(比如我,嗨!)。

对于刚开始使用 Rust 的人,我们在 RustFest 柏林和 Rust Belt Rust 之前举办了 RustBridge 活动。另一个活动即将举行,计划在波特兰 RustConf 之前的一天举行!

Mozilla Rust 的人员将在今年夏天举办 OutreachyGSoC 实习生,他们将在各种项目上工作。

我们还成功地让贡献者参与了低投入、高影响的任务。其中一项工作是 改进错误消息的格式——看看 此问题上的 82 位参与者!前面提到的 Libz Blitz 专门设置为另一个指导机会来源。

1 月份,语言团队引入了 shepherds,这在一定程度上是为了指导语言团队周围的一组人员。shepherds 在推动 RFC 讨论向前发展方面非常有帮助!

我们还一直在努力增加子团队的数量和规模,为人们创造更多机会进入领导角色。

我们还通过不太正式的方式帮助人们参与各种计划。我在人们 Rust 之旅的许多地方与许多人合作:帮助举办会议、进行他们的第一次会议演讲、提供书籍反馈、开发箱子、为 Rust 本身做出贡献以及加入团队!虽然很难量化这样的场景,但无论我走到哪里,我都会看到 Rustaceans 帮助其他 Rustaceans,我很感谢这是我们文化的一部分。

Rust 的未来

Rust 已经两岁了,它正在进入编程的各个角落,从 Web 开发到嵌入式系统,甚至您的桌面。库和基础设施正在成熟,我们正在铺设上坡路,我们正在互相支持。我对 Rust 的发展方向感到乐观!

Rust 生日快乐!祝你越来越好!🎉