10 月项目目标更新

2024 年 10 月 31 日 · Niko Matsakis 代表 领导委员会

Rust 项目目前正致力于实现 26 个项目目标,其中 3 个被设计为 旗舰目标。 这篇文章提供了我们实现这些目标(或在某些情况下,未能实现)的进展情况的选定更新。任何特定目标的完整详细信息都可以在其相关的 rust-project-goals 存储库上的跟踪问题中找到。

旗舰目标

我们目标中最大的要素是通过 返回类型表示法 (RTN) 解决 “发送边界”问题,并添加对异步闭包的支持。本月,我们在两者上都取得了进展。对于 RTN,@compiler-errors 扩展了返回类型表示法,为在类似 where Self::method(): Send 的自类型中使用 RTN 提供了支持。他还撰写了一篇 博客文章,其中包含测试号召,解释了 RTN 是什么以及它是如何工作的。对于异步闭包,lang 团队就 async Fn 语法达成了初步共识,并理解它还将包含一些“异步类型”语法。此原理记录在 RFC #3710 中,该 RFC 现在正在征求反馈。该团队于 10 月 23 日举行了一次设计会议,@nikomatsakis 将根据结论更新 RFC。

我们还在努力发布 dynosaur crate,它为带有异步函数的 trait 启用动态调度。这被认为是我们在实现真正的动态调度之前的过渡步骤。接下来的步骤是完善实现并发出公开测试的号召。

关于异步 drop 实验,@nikomatsakis 开始了审查。预计审查将持续一段时间,因为这是一个大型 PR。

最后,异步 WG 的重组工作没有取得任何进展。已安排一次会议,但被推迟。@tmandry 目前正在起草一份初步提案。

我们在解决在稳定的 Rust 上构建 Linux 的障碍方面取得了重大进展。已稳定了 offset_of! 宏中对结构字段的支持。 “derive-smart-pointer”功能的最终名称已确定为 #[derive(CoercePointee)];@dingxiangfei2009 准备了 PR #131284 以进行重命名,并且正在修改 rust-for-linux 存储库以使用新名称。一旦完成,我们将能够稳定它。我们决定稳定 常量指针引用的静态引用支持,现在正在等待 @dingxiangfei2009 的稳定 PR。

Rust for Linux (RfL) 是 asm-goto 功能(以及一般的内联汇编)的主要用户之一,我们一直在研究各种扩展。@nbdd0121 撰写了一份 hackmd 文档,详细介绍了 RfL 的经验,并确定了需要改进的领域。这导致了两个直接的行动项:使目标块默认安全(rust-lang/rust#119364)和扩展 const 以支持嵌入式指针(rust-lang/rust#128464)。

最后,我们发现编译器级别的稳定请求数量不断增加,因此来自编译器团队的 @wesleywiser 和 @davidtwco 已开始参加会议,以创建更快的响应。这种合作的结果之一是 Alice Ryhl 撰写的 RFC #3716,其中提出了一种管理修改目标 ABI 的编译器标志的方法。我们以前的方法是为每个标志组合创建不同的目标,但内核所需的标志数量使其不切实际。撰写 RFC 揭示了比以前认识到的更多此类标志,包括那些修改 LLVM 行为的标志。

Rust 2024 版本进展顺利,有望按计划发布。主要里程碑包括准备在 2024 年 11 月 22 日之前稳定版本,实际稳定发生在 2024 年 11 月 28 日。然后,该版本将于 2025 年 1 月 3 日切换到 beta 版,随后将于 2025 年 1 月 9 日发布公告,表明 Rust 2024 即将发布。最终发布计划于 2025 年 2 月 20 日进行。

此版本的首要任务是确保其成功,而无需任何个人付出过多的努力。该团队对进展感到满意,并指出此版本将是自 Rust 2015 以来最大的版本,引入了许多新的和令人兴奋的功能。该过程经过精心管理,以保持高标准,而无需过去版本中常见的巨大压力。值得注意的是,该团队设法避免在开发过程后期从版本中删除许多项目,这有助于防止浪费工作和倦怠。

Rust 2024 的所有优先语言项目都已完成并准备发布。其中包括几个关键问题和增强功能。此外,对标准库进行了三项更改、对 Cargo 进行了一些更新,以及对 rustdoc 进行了一项令人兴奋的改进,这将大大加快 doctest 的速度。

此版本还为 rustfmt 引入了一种新的样式版本,其中包括一些格式更改。

该团队正准备开始最终质量保证 crater 运行。一旦对这些进行分类,将宣布 Rust 2024 的 nightly beta 版,并征求更广泛的测试。

Rust 2024 将于 2024 年 11 月底在 nightly 中稳定,于 2025 年 1 月 3 日切换到 beta 版,并于 2025 年 2 月 20 日正式发布。有关版本项目的更多详细信息,请参阅 版本指南

具有更新的目标

  • camelid 已开始致力于将新的降低架构用于不仅仅是 const 参数,一旦完成,将允许引入 min_generic_const_args 功能门。
  • compiler-errors 一直在努力删除 Const 上不执行适当规范化并且与此功能不兼容的 eval_x 方法。
  • 发布了 9 月更新。
  • 创建了更多自动化基础设施来准备 10 月更新,利用 LLM 将更新总结为一两个句子,形成简洁的表格。
  • 此目标未取得任何进展。
  • 该目标将被关闭,因为共识表明在此期间将无法实现稳定;将在下一个目标期间重新审视它。
  • 没有重大更新报告。
  • 为下周的 EuroRust 准备演讲占用了大部分空闲时间。
  • 主要进展:随着支持隐含超 trait 边界的 PR 已落地 (#129499),当前的实现基本上是完整的,因为它允许大多数应该编译的代码,并且应该拒绝所有不应该编译的代码。
  • 需要进一步测试,接下来的步骤是改进诊断(#131152),并在将常量 trait 添加回核心之前修复更多漏洞。
  • 一个正在进行的 pull request 可在 https://github.com/weihanglo/cargo/pull/66 获取。
  • 由于 wasm32-wasip1 缺乏对 POSIX 进程生成(这对各种构建脚本用例至关重要)的支持,因此不太可能将其用作默认沙盒环境。
  • 自动微分前端已合并,包括超过 2k LoC 和 30 个文件,使剩余的差异小得多。
  • 自动微分中间件可能会进行重新设计,从基于库的方法转变为基于 LLVM 的 pass 方法。
  • 在 @x-hgg-x 的贡献下取得了重大进展,改进了 Cargo 中的解析器测试套件,以针对 SAT 求解器检查功能统一。
  • 随后将导致 PubGrub 失败的测试用例移植到 Cargo 的测试套件中,为防止 Cargo 切换到 PubGrub 时重要行为发生回归以及为依赖项解析中的功能模糊测试做好准备。
  • 该团队正在就处理泛型参数达成共识,这两个 PR 目前都因这个问题而被阻止。
  • 由于 nalgebra 中的挂起,-Znext-solver=coherence 的稳定化尝试被撤销,随后的修复有所改进,但并未完全解决性能问题。
  • 在过去的一个月中,新的求解器没有发生重大变化。
  • GnomedDev 推出了 rust-lang/rust#130553,它用更快的匹配(字符串匹配转换为符号匹配)替换了旧的 Clippy 基础设施。
  • 正在开始对 Clippy 的类型大小和缓存对齐进行检查,但尚未取得任何成果。
  • linting 行为已恢复到未指定日期。
  • 接下来的步骤是决定 linting 的未来并编写 never 模式 RFC。
  • PR https://github.com/rust-lang/crates.io/pull/9423 已合并。
  • 前端功能的工作正在进行中。
  • “在 nightly 上支持可扩展的 Polonius”项目中的主要进展包括修复由于旧中间点的偏差一错误导致的测试失败,以及正在进行的测试失败调试,重点是自动化跟踪工作。
  • 已努力接受 issue #47680 的变体,并可能调整活动借用的计算和效果的位置。Amanda 一直在清理正在进行中的 PR #130227 中的占位符。
  • rust-lang/cargo#14404 和 rust-lang/cargo#14591 已得到解决。
  • 正在等待时间在几周内专注于此。
  • 主要进展:在 issue list 中添加了案例到 UI 测试中,以重现 bug 或验证不可重现性。
  • 障碍:null。
  • 需要帮助:帮助测试 issue list 中的死锁代码,并尝试重现该问题。
  • CMU Practicum 项目的学生已开始编写函数合同,其中包括核心库中某些不安全函数的安全条件,并验证安全抽象是否遵守这些前提条件,并且确实是安全的。
  • 需要帮助来编写更多合同、集成新工具、审查 pull requests 或参与 存储库讨论
  • annotate-snippets 中匹配 rustc 建议输出方面取得了进展,现在大多数情况都已对齐。
  • 重点一直是理解和调整建议的不同渲染样式以适应 annotate-snippets

没有更新的目标

以下目标在过去一个月中未收到更新