在过去的六个月里,Rust 项目一直致力于 26 个项目目标,其中 3 个被指定为 旗舰目标。这篇文章提供了我们朝着这些目标取得的进展(或者,在某些情况下,缺乏进展)的最终更新。我们目前正在 最终确定下一轮项目目标的计划,这将涵盖 2025H1。任何特定目标的完整详细信息都可以在其相关的 rust-project-goals 仓库中的跟踪 issue 中找到。
旗舰目标
我们这个时期的宏伟目标是异步闭包,我们很高兴地宣布这项工作已经完成!对异步闭包的稳定支持 于 12 月 12 日登陆 nightly 版本,它将包含在 2 月 20 日发布的 Rust 1.85 中。非常感谢 compiler-errors 推动了这项工作。
对于我们的其他目标,我们取得了一些进展,但仍有工作要做
- 返回类型表示法 (RTN) 已经实现,我们发起了 实验性测试的呼吁,但尚未达到稳定状态。这将作为我们 2025H1 目标的一部分完成。
- 特征中的异步函数(以及特征中的返回位置 Impl Trait)目前不被认为是
dyn
兼容的。我们最终希望拥有第一流的dyn
支持,但作为中间步骤,我们创建了一个过程宏 cratedynosaur
1,它可以创建包装器来启用动态分发。我们计划在 2025H1 发布一篇全面的博客文章,展示如何使用这个 crate,并阐述特征中异步函数的总体计划。 - 完成了原型设计 异步 drop 的实现 的工作,但我们没有考虑到审查带宽。nikomatsakis 已经完成了初步阅读,并正在与 PR 作者合作,以便在 2025H1 完成这项工作。但需要明确的是,这只是一个旨在发现实现障碍的实验。在考虑将此功能稳定化之前,还需要进行重要的语言设计工作(我们甚至没有 RFC,并且仍然存在许多未知数)。
- 我们对 异步迭代 的特征进行了富有成效的讨论,但没有达成广泛共识,这将在 2025H1 的议程上。
我们基本完成了稳定 Rust for Linux 项目使用的语言功能的目标。在某些情况下,仍有少量工作要做。在过去的六个月里,我们...
- 稳定了
offset_of!
宏以获取字段的偏移量; - 几乎稳定了
CoercePointee
特征 -- 但是 发现当前的实现正在暴露不稳定的细节,目前正在解决中; 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 traits 和实现方面取得了进展,并仔细考虑了改进。
Add
在 rust#133237 中被 const 化,Deref
/DerefMut
在 rust#133260 中被 const 化。 - 在 rust#132823 和 rust#133999 中实现 const traits 功能的稳定性方面取得了进一步进展,并且在 rust#133995 和 rust#134628 中打开了更多 traits const 化的额外 PR。
- 在过去的六个月里,我们创建了一个专门针对此问题的 lang-team 实验,spastorino 开始进行实验性实现。joshtriplett 撰写了 RFC 3680,该 RFC 收到了大量反馈。目前的工作重点是识别 "廉价克隆" 类型,并使其易于创建克隆它们而不是移动它们的闭包。
- 将调查沙盒化构建脚本的替代方案,而不是将此项目目标延续到 2025h1 - 即,使用
system-deps
声明式地配置系统依赖项,使用类似于代码检查器 Cackle 及其沙盒环境 Bubblewrap 的方法,或完全沙盒化的构建环境,如 Docker 或 Nix。
- 已经实现了显著的加速,将最慢的 crate 解析时间从超过 120 秒减少到 11 秒,并将检查所有 crates 的时间从 178 分钟减少到 71.42 分钟。
- 对现有解析器和新实现都进行了性能改进,所有 crates 的锁文件验证时间从 44.90 分钟减少到 32.77 分钟(不包括一些最难的情况)。
- 我们添加示例搜索和添加搜索按钮的 pull request 已添加到 rustdoc 团队下次会议的议程中。
-Znext-solver=coherence
稳定化现在在 1.84 版本中稳定,并发布了新的更新博客文章。- 在使用
-Znext-solver=globally
进行 bootstrap 方面取得了重大进展。我们现在能够编译 rustc 和 cargo,从而实现 try-builds 和 perf 运行。
#[clippy::msrv]
lint 的优化已打开,已进行基准测试,目前正在审查中。- 在任何标记为
performance-project
的 issue 上都需要帮助,尤其是在 issue #13714 上。
- 在这个目标的过程中,Nadrieril 编写并发布了 never patterns RFC,试图在不弄清楚全局的情况下取得进展,而普遍的反馈是 "我们想看到全局"。下一步将是编写一个 RFC,其中包括一个明确的提案,说明哪些空模式可以省略,哪些不能省略。这 100% 受限于我自己的写作带宽(如果您想帮忙,请联系!)。工作将继续,但该目标不会重新提交到 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 发布,正在等待项目团队负责人的批准。
- 另一个 pull request 已合并,只剩下一个,直到 nightly 版本上提供可用的 MVP。
- 删除了一些功能以简化上游化,并将作为单个 PR 重新添加。
- 将开始研究 LLVM/Enzyme 的
batching
功能,该功能允许 Array of Struct 和 Struct of Array 向量化。 - 一直在推动向编译器添加 AMD GPU 目标,这将是 LLVM 卸载项目所需要的。
- 我们已经在 verify-rust-std 分支中编写和验证了大约 220 个安全合同。
- 14 个挑战中已解决 3 个。
- 我们已成功将 Kani 集成到仓库 CI 中,并且我们正在努力集成另外 2 个验证工具:VeriFast 和 Goto-transcoder (ESBMC)
- 此目标没有取得任何进展,但围绕 a-mir-formality 构建社区仍然是一个目标,未来的计划即将到来。
没有更新的目标
以下目标在上个月未收到更新