Rust 在 2017 年的开发围绕着一个总体的主题:提高生产力,特别是对于 Rust 新手。从工具到库,从文档到核心语言,我们希望让使用 Rust 完成任务变得更容易。这种愿望导致了今年的路线图,制定了 8 个高级目标,指导团队的工作。
我们做得怎么样?真的,真的很好。
一篇博文无法涵盖所有发生的事情,但我们将在下面介绍一些亮点。
2017 年的目标
Rust 应该有一个更低的学习曲线
- 书籍
- Rust 编程语言 基本上处于编辑的最后阶段。Steve 和 Carol 感谢所有阅读草稿并提供反馈的人!从 No Starch Press 预订印刷版,预计于 2018 年 5 月发布。
- Programming Rust 由 Jim Blandy 和 Jason Orendorff 撰写,于 2017 年 12 月 21 日出版!
- Rust in Action 由 Tim McNamara 撰写,正在 Manning 的早期访问计划中,预计出版日期为 2019 年初。
- RustBridge 教学大纲
- RustBridge 研讨会 致力于让弱势群体接触 Rust。Ashley Williams 今年极大地改进了研讨会教学大纲,我们计划在 2018 年初举办教师培训。教学大纲可供任何人使用,只要活动只在关注弱势群体时才被称为 RustBridge。在导师目标下查看有关 2017 年 RustBridge 的更多信息!
- 语言改进
- 人体工程学倡议 看到大量 RFC 解决了语言中的粗糙边缘;实现阶段 随后看到几乎所有这些 RFC 都得到了实施。这些改进涵盖所有权(更灵活的生命周期,更流畅的模式匹配,更简洁的省略),模块系统(改进路径以提高清晰度,允许嵌套导入),特征系统(
impl Trait
,特征别名)等等。您可以在跟踪问题上查看所有这些更改及其当前状态的概述。总而言之,这些更改应该消除或缓解自 Rust 1.0 以来出现的许多最常见的可学习性和人体工程学风险。
- 人体工程学倡议 看到大量 RFC 解决了语言中的粗糙边缘;实现阶段 随后看到几乎所有这些 RFC 都得到了实施。这些改进涵盖所有权(更灵活的生命周期,更流畅的模式匹配,更简洁的省略),模块系统(改进路径以提高清晰度,允许嵌套导入),特征系统(
Rust 应该有一个愉快的编辑-编译-调试循环
cargo check
工作流程- Cargo 现在提供 一个
check
子命令,可用于在您努力使代码通过编译器检查时加快编辑-编译循环。此模式特别地跳过为依赖树中的板条箱生成可执行工件,而是只做足够的工作来对当前板条箱进行类型检查。
- Cargo 现在提供 一个
- 增量重新编译
- 我们改进编译时间的方法的基石是增量重新编译,允许重建重用先前编译的重大工作部分。在这一年中,我们投入了大量精力来实现这一点,现在我们很高兴地宣布增量编译将开始搭乘列车,并将在 1 月份的下一个编译器测试版中发布,并将在 2 月份的 Rust 1.24 中在稳定通道上发布!
- 您可以在下面看到增量重新编译在我们的一些关键基准测试中的实际表现。请注意,
-opt
指的是优化构建,“最佳情况”指的是没有更改的重新编译,而println
指的是对函数体添加println
调用等小更改的重新编译。我们预计我们现在看到的 50% 以上的加速将在明年随着我们将增量重新编译更深入地推入编译器而继续增长。 - 与编译器中的更改一起,我们还将更新 Cargo 以默认情况下为选定的用例使用增量重新编译,因此您可以利用改进的编译时间,而无需额外的配置。当然,您也可以根据需要在逐案基础上选择加入或退出此功能。
Rust 应该提供一个可靠但基本的 IDE 体验
- Rust 现在在 IntelliJ 和通过 Rust 语言服务器 (RLS) 中拥有可靠的 IDE 支持。无论您更喜欢功能齐全的 IDE 还是具有 IDE 功能的更轻量级的编辑器,您都可以通过利用出色的 Rust 集成来提高工作效率。
- IntelliJ。Rust 在JetBrains 的 IDE(IntelliJ IDEA、CLion、WebStorm 等)中拥有官方支持,其中包括
- 在整个项目、其依赖项和标准库中查找类型、函数和特征。
- 当前文件中定义的符号的层次结构概述。
- 搜索给定特征的所有实现。
- 转到光标处的符号的定义。
- 导航到父模块。
- 重构和代码生成
- RLS。RLS 是一个与编辑器无关的关于 Rust 程序的智能来源。它用于为许多编辑器中的 Rust 支持提供支持,包括Visual Studio Code、Visual Studio 和Atom,更多编辑器正在开发中。它计划在 2018 年初发布 1.0 版本,但目前以预览形式提供所有通道(夜间版、测试版和稳定版)。它支持
- 代码补全(使用 Racer)
- 转到定义(如果编辑器支持,则预览定义)
- 查找所有引用
- 查找类型或特征的实现
- 符号搜索(当前文件和项目)
- 使用 rustfmt 重新格式化,重命名
- 应用错误建议(例如,添加缺少的导入)
- 悬停时的文档和类型
- 使用代码片段生成代码
- Cargo 任务
- RLS 的安装和更新(通过 rustup)
Rust 应该轻松集成到大型构建系统中
- 替代注册表。Cargo 现在对从 crates.io 以外的注册表安装板条箱提供了不稳定的支持。这将使公司能够像使用开源板条箱一样轻松地管理和使用内部板条箱。目前正在开发比 crates.io 服务器更适合私有使用的板条箱服务器。
- 货物作为组件。今年,我们做了很多工作来收集来自利益相关者的约束,他们希望将 Rust 包集成到大型现有构建系统中(例如 Bazel)。Cargo 团队已经 制定了愿景,将 Cargo 视为一套可以自定义或替换的组件,使外部构建系统能够轻松管理其构建的工作,同时仍然与 crates.io 和 Cargo 工作流程集成。虽然我们在实现这一愿景方面没有取得预期进展,但正在进行的工作正在将“构建计划生成”扩展到足以支持 Firefox 构建系统和 Tup 的程度。这种初步的尝试应该为 2018 年初的进一步迭代提供一个很好的参考。
Rust 应该提供对高质量包的轻松访问
- crates.io 今年添加了 类别,旨在提供一个包组织结构,专门针对提供适合特定目的的包。
- 我们进行了一场关于在类别和关键字中对包进行排序的最佳方式的 热烈的 RFC 讨论,其中包括 一项关于人们如何评估包的调查。
- 讨论的结果是决定 按过去 90 天的下载次数对包进行排序,并为人们在评估时提供更多信息。
- 现在,包作者可以在 crates.io 上显示的额外信息包括 CI 状态徽章、维护状态、代码覆盖率、GitHub 统计信息。
- 最重要的是,crates.io 现在在包页面上显示包的 README!鼓励包作者使用此功能提供入门文档,并提供一个使用该包的小示例,因为良好的文档和示例是人们在评估包时考虑的最常提到的积极信号。
Rust 应该配备完善的工具来编写健壮的服务器
- Futures 和 Tokio
- Rust 在服务器方面的大部分故事都围绕着它的异步 I/O 故事展开。futures 包于 2016 年底 推出,Tokio 项目(它为与 futures 一起使用提供了一个以网络为中心的事件循环)于 2017 年初 发布了 0.1 版本。从那时起,在构建“Tokio 生态系统”方面做了大量工作,并且收到了很多关于核心原语的反馈。在年底,Tokio 团队提出了一个 重大的 API 改进,以简化和澄清该包的 API,并且正在进行编写一本专门介绍 Rust 中异步编程的书籍的工作。预计这轮最新工作将在 2018 年初完成。
- 异步生态系统
- 生成器
- 得益于社区的英勇努力,Rust 在 2017 年也看到了 实验性的生成器支持!该支持提供了
async
/await
符号所需的要素,该符号 目前在 nightly 上可用。预计该领域的进一步工作将在 2018 年初成为重中之重。
- 得益于社区的英勇努力,Rust 在 2017 年也看到了 实验性的生成器支持!该支持提供了
- Web 框架
Rust 应该拥有 1.0 级别的包来完成基本任务
- Libz Blitz。库团队今年启动了 Libz Blitz,这是一项重大努力,旨在审查和改进大量基础包,并推动它们走向 1.0 版本。这是一项巨大的社区努力:我们每两周进行一次众包“包评估”,根据明确的准则全面审查包,评估问题跟踪器,并找出任何剩余的设计问题。虽然并非所有经过评估的包都发布了 1.0 版本,但它们都非常接近发布。完整列表包括:log、env_logger、rayon、mio、url、num_cpus、semver、mime、reqwest、tempdir、threadpool、byteorder、bitflags、cc-rs、walkdir、same-file、memmap、lazy_static、flate2。
- API 指南。Libz Blitz 的一个很棒的副产品是 API 指南 书籍,它整合了官方库团队 API 指南,这些指南参考了标准库和 Libz Blitz 过程。
Rust 的社区应该在各个层级提供指导
- 我们在 2017 年举办了 5 场 RustBridge 研讨会,分别在乌克兰基辅、墨西哥墨西哥城、美国俄勒冈州波特兰、瑞士苏黎世和美国俄亥俄州哥伦布举行!RustBridge 研讨会的目标是让弱势群体开始使用 Rust。参加者将学习语法和概念,完成一些 exercism 练习,并构建一个提供紧急赞美和螃蟹图片的 Web 应用程序。我们希望在 2018 年扩大该计划,帮助更多人举办更多研讨会!
- 扩大 Rust 的影响力计划 将来自其他领域(如教学)且拥有不同经验的人员带入 Rust,以便我们在社区缺乏这些技能和经验的领域有所改进。参与者提供了巨大的帮助,许多人计划继续在 Rust 社区中提供帮助。我们很高兴他们加入!以下是一些关于该计划的博文
- Anna Liao:扩大 Rust 的影响力:将 Python 应用程序移植到 Rust
- Ryan Blecher:扩大 Rust 的影响力:回顾 我们在该计划的第一阶段学到了很多东西,我们计划在 2018 年进行下一轮!
- 最后但并非最不重要的是,我们还推出了第一个 Rust
impl Period
。这是一项雄心勃勃的努力,旨在同时帮助许多新人为 Rust 生态系统做出贡献,同时完成许多工作。为此,我们创建了 40 多个工作组,每个工作组都有自己的关注领域、领导者和聊天频道。这些小组确定了想要做出贡献的人的良好“切入点”,并帮助指导他们完成所需的更改。该活动取得了巨大成功,导致对 Rust 的所有领域进行了更改和贡献,从编译器内部到文档再到整个生态系统。对于所有参与的人,衷心感谢——请继续贡献!对于那些没有机会参与的人,请不要担心:我们希望将此活动变成一项常规传统。
2018
我们将在不久的将来启动 2018 年路线图流程;敬请关注!
感谢!
今年我们完成了惊人的工作量——这里的“我们”包括同样惊人的数量的人。由于工作分散在项目的许多方面,很难提供一个贡献者名单。对于 impl 阶段,您可以在新闻稿中查看详细的贡献列表
当然,今年还有各种各样的贡献。
在这篇文章中,我想特别感谢那些帮助协调我们 2017 年工作的领导者和导师。这种领导力——你努力帮助他人——是艰苦的工作,而且没有得到足够的认可。所以让我们向这些人致敬!
- Cargo
- carols10cents,感谢她在全年对 crates.io 的持续领导和指导工作。
- 社区
- carols10cents,感谢她运行 扩大 Rust 的影响力 计划。
- ashleygwilliams,感谢她对 RustBridge 教学大纲的全面改革,以及她对该计划的其他推动作用。
- jonathandturner,感谢他监督 2017 年 Rust 社区调查。
- 编译器
- nikomatsakis,感谢他为领导、组织和指导工作做出了难以置信的贡献,以及特别是在 NLL 上进行了大量的高价值黑客工作。
- arielb1,同样感谢他为指导和黑客工作做出的贡献,涵盖了 NLL 和编译器的其他部分。
- michaelwoerister,感谢他不断推动递增式重新编译的交付,并在全年为其他人创造了加入的机会。
- eddyb,感谢他继续担任编译器方面的专家,并在今年解决了一些关于常量泛型的真正难题。
- 开发工具
- 文档
- steveklabnik,感谢他启动并监督了 rustdoc 的激动人心的全面改造。
- quietmisdreavus,感谢他监督了文档领域的大量活动,但最重要的是帮助社区在今年显著改善了 rustdoc。
- 基础设施
- mark-simulacrum,感谢他将 perf 网站提升到高度实用的状态,并彻底改造了 rustbuild 以更好地支持贡献。
- aidanhs,感谢他协调 crater 的维护工作。
- 语言
- withoutboats,感谢他让我们专注于程序员体验,并帮助社区围绕非常棘手的语言设计问题进行讨论。
- cramertj,感谢他让我们专注于发布,特别是在一些最难达成共识的主题上:impl Trait 和模块系统更改。
- nikomatsakis,感谢他使 NLL RFC 如此易于理解,并率先提出了使用单独的仓库来实现更大参与度的想法。
- 库
技术领导者是我们成功的关键要素,我希望在 2018 年,我们可以继续扩大我们的领导者队伍,并一起完成更多的事情。