在过去的六个月里,Rust 项目一直在努力实现 26 个项目目标,其中 3 个被指定为 旗舰目标。这篇博文提供了我们实现这些目标的最新进展(在某些情况下,可能没有进展)。我们目前正在最终确定下一轮项目目标的计划,这将涵盖 2025H1。任何特定目标的完整详细信息都可以在 rust-project-goals 仓库中其相关的跟踪问题中找到。
旗舰目标
我们在此期间的主要目标是异步闭包,我们很高兴地宣布相关工作已经完成!异步闭包的稳定支持于 12 月 12 日在 nightly 版本中落地 并将包含在 Rust 1.85 中,该版本将于 2 月 20 日发布。非常感谢 compiler-errors 推动了这项工作。
对于我们的其他目标,我们取得了一些进展,但仍有工作要做
- 返回类型表示法 (RTN) 已经实现,并且我们发布了实验征集,但尚未达到稳定。这将在我们的 2025H1 目标中完成。
- Trait 中的异步函数(以及 Trait 中返回位置的 Impl Trait)目前不被视为
dyn
兼容。我们最终希望拥有第一等的dyn
支持,但作为中间步骤,我们创建了一个过程宏 cratedynosaur
1,它可以创建启用动态分派的包装器。我们计划在 2025H1 发表一篇全面的博文,展示如何使用这个 crate 并阐述 trait 中异步函数的整体计划。 - 原型实现异步 drop 的工作已经完成,但我们没有考虑到评审带宽。nikomatsakis 已经完成了初步阅读,并正在与 PR 作者合作,争取在 2025H1 完成这项工作。不过需要明确的是,这项工作的范围是实验性的,目的是发现实现障碍。在考虑将此功能稳定化之前,还有大量的语言设计工作要做(我们甚至还没有 RFC,并且还有很多未知因素)。
- 我们对异步迭代的 trait 进行了富有成效的讨论,但尚未达成广泛共识,这项工作已列入 2025H1 的议程。
我们基本完成了稳定 Rust for Linux 项目所使用的语言特性的目标。在某些情况下,仍有一些少量工作剩余。在过去的六个月里,我们...
- 稳定了
offset_of!
宏以获取字段的偏移量; - 几乎稳定了
CoercePointee
trait -- 但发现当前的实现暴露了不稳定的细节,目前正在解决; asm_goto
稳定化 PR 和参考资料更新已经提交,不包括“output”特性。- 完成了任意 self 类型的大部分工作,这已经被 RfL 使用,只差文档即可稳定化
我们还开始了编译器标志稳定化的工作,通过 RFC 3716 概述了一个稳定化修改目标 ABI 标志的方案。
特别感谢 Ding Xiang Fei、Alice Ryhl、Adrian Taylor 和 Gary Guo 在这项工作中做出了主要贡献。
Rust 2024 的最终版本已确定于 2025 年 2 月 20 日作为 Rust 1.85 的一部分发布。Rust 1.85 目前处于 beta 阶段。对 nightly beta 和 crater 运行的反馈已得到积极处理,并对迁移和文档进行了调整以增强用户体验。
特别感谢 TC 和 Eric Huss 为推动这项计划所做的辛勤工作。
最终目标更新
在过去的六个月里,进行了一些必要的内部重构,以支持 min_generic_const_args
原型。
一个重构是我们改变了在编译器中表示 const 参数的方式,以便为 min_generic_const_args
将添加的 const 参数类型添加单独的表示形式。
另一个重要的重构是,我们改变了类型系统层中 const 参数表示的 API 接口,现在必须通过我们的通用类型系统逻辑才能评估 const 参数。这是必要的,以确保我们能够正确处理 min_generic_const_args
将支持的 const 参数类型的相等性。
完成所有这些前置重构后,编译器中添加了一个功能门 (feature(min_generic_const_args)
),它使用新的 const 参数内部表示。我们现在正在开始在此功能门下实现实际的语言更改。
特别感谢 camelid、boxy 和 compiler-errors。
在过去的六个月里...
- cargo semver-checks 开始在其 schema 中包含泛型参数和约束,从而实现更精确的 lint;
- cargo manifest linting 已实现并合并,允许进行检查 cargo manifest 的 lint;
- 基于 cargo manifest linting,添加了
feature_missing
lint,它识别由于删除包特性引起的破坏。
此外,我们完善了 rustdoc 的 JSON 支持中所需更改的设计草图,以便支持跨 crate 项 linting。这反过来又需要编译器扩展来向 rustdoc 提供该信息。
- 在编译器中添加 const trait 和实现方面取得了进展,改进正在仔细考虑中。
Add
在 rust#133237 中进行了 const 化,Deref
/DerefMut
在 rust#133260 中进行了 const 化。 - 在 rust#132823 和 rust#133999 中实现 const traits 特性的稳定性方面取得了进一步进展,更多的 trait const 化 PR 已在 rust#133995 和 rust#134628 中开启。
- 在过去的六个月里,我们创建了一个专门研究这个问题的语言团队实验,spastorino 开始着手进行实验性实现。joshtriplett 撰写了 RFC 3680,该 RFC 收到了大量反馈。目前的工作重点是识别“廉价可克隆”的类型,并使其易于创建克隆它们而不是移动它们的闭包。
- 将研究沙箱构建脚本的替代方案,而不是将这个项目目标延续到 2025h1 - 具体来说,是使用
system-deps
声明性地配置系统依赖项,使用类似于代码检查器 Cackle 及其沙箱环境 Bubblewrap 的方法,或者像 Docker 或 Nix 这样的完全沙箱构建环境。
- 取得了显著的速度提升,将最慢的 crate 解析时间从超过 120 秒减少到 11 秒,并将检查所有 crate 的时间从 178 分钟减少到 71.42 分钟。
- 对现有解析器和新实现都进行了性能改进,所有 crate 的锁文件验证时间从 44.90 分钟减少到 32.77 分钟(不包括一些最困难的情况)。
- 我们添加示例搜索和搜索按钮的拉取请求已被添加到 rustdoc 团队下次会议的议程中。
-Znext-solver=coherence
稳定化已在 1.84 版本中稳定,并发布了一篇新的更新博文。- 在使用
-Znext-solver=globally
进行 bootstrap 方面取得了显著进展。我们现在能够编译 rustc 和 cargo,从而实现 try-builds 和性能测试运行。
#[clippy::msrv]
lint 的优化已开启,已进行基准测试,目前正在评审中。- 任何带有
performance-project
标记的问题都需要帮助,尤其是问题 #13714。
- 在此目标期间,Nadrieril 撰写并发布了 never patterns RFC,试图在尚未弄清全貌的情况下取得进展,普遍反馈是“我们想看到全貌”。下一步将是撰写一个 RFC,其中包含关于哪些空模式可以省略、哪些不能省略的明确提案。这项工作完全受限于我自己的写作带宽(如果您想提供帮助,请联系!)。工作将继续进行,但该目标不会在 2025h1 重新提交。
- Amanda 在删除占位符方面取得了进展,重点关注惰性约束和早期错误报告,并调查了重写类型测试的问题;一些测试仍然失败,并且错误报告和诊断似乎很难完全保持现状。
- @lqd 已经提交了 PR,以落地位置敏感分析的原型。它的工作效果足够好,值得落地;虽然还有很多工作要做,但这一个重要的里程碑,也是我们希望通过此项目目标实现的。
- 阻止 cargo-script 覆盖 release profile 的修复已提交并合并。
- 需要帮助在 rustc 中编写 frontmatter 支持,因为 rustfmt 的人要求它在 AST 中表示。
- RFC 已完成,正在等待所有 rustdoc 团队成员审阅后才能开始实现。
- SparrowLii 提出了一个 2025H1 项目目标,以继续稳定并行前端,重点是解决可重现的死锁问题并提高并行编译性能。
- 团队讨论了避免潜在死锁的解决方案,发现禁用 rayon 子循环中的 work-stealing 是有效的,并将在 PR 中包含相关的修改。
- 尽管日程繁忙,
annotate-snippets
仍在持续推进,重点是改进建议并解决架构挑战。 - 与 epage 合作设计了一个新的 API,旨在使
annotate-snippets
更紧密地与 rustc 对齐,以便于贡献和集成。
- 2025h1 的项目目标清单已作为 RFC 发布,正在等待项目团队领导批准。
- 又一个拉取请求被合并,距离 nightly 版本上有一个可工作的 MVP 只剩一个。
- 为了简化上游合并,一些特性被移除,并将以单独的 PR 形式重新添加。
- 将开始研究 LLVM/Enzyme 的批处理特性,该特性允许 Struct 数组和 Array 结构体的向量化。
- 一直在努力为编译器添加 AMD GPU 目标,这对于 LLVM 卸载项目是必需的。
- 我们在 verify-rust-std fork 中编写并验证了大约 220 个安全契约。
- 14 个挑战中已解决了 3 个。
- 我们已成功将 Kani 集成到仓库 CI 中,并且正在努力集成另外 2 个验证工具:VeriFast 和 Goto-transcoder (ESBMC)
- 这个目标没有取得任何进展,但围绕 a-mir-formality 建立社区仍然是一个目标,未来的计划即将到来。
未更新的目标
以下目标在上个月没有收到更新