十月份项目目标更新

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

Rust 项目目前正致力于实现 一系列 26 个项目目标,其中 3 个被指定为 旗舰目标。本文精选了一些关于这些目标进展的更新(或者在某些情况下,是没有进展的)。任何特定目标的完整详细信息都可在其相关的 rust-project-goals 仓库中的跟踪议题 中找到。

旗舰目标

我们目标中最大的部分是解决 "send bound" 问题 通过 返回类型标注(RTN)并添加对 async 闭包的支持。本月,我们在这两方面都取得了进展。对于 RTN,@compiler-errors 扩展了返回类型标注,支持在自类型(self-types)中使用 RTN,例如 where Self::method(): Send。他还撰写了一篇 博文呼吁测试,解释了 RTN 是什么以及它是如何工作的。对于 async 闭包,语言团队就 async Fn 语法达成了初步共识,理解是它也将包括一些 "async type" 语法。这一基本原理记录在 RFC #3710 中,该 RFC 现已开放征求意见。团队于 10 月 23 日举行了 设计会议,@nikomatsakis 将根据结论更新 RFC。

我们还在致力于发布 dynosaur crate,该 crate 使得具有 async 函数的 trait 能够进行动态分发(dynamic dispatch)。这旨在作为我们在实现真正的动态分发之前的一个过渡步骤。下一步是完善实现并发布公开测试邀请。

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

最后,async WG 的重组尚未取得进展。原定会议已推迟。@tmandry 目前正在起草初步提案。

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

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

最后,我们发现编译器层面的稳定化请求越来越多,因此编译器团队的 @wesleywiser 和 @davidtwco 已开始参加会议以加快响应速度。此次合作的成果之一是 RFC #3716,由 Alice Ryhl 撰写,该 RFC 提出了一种管理修改目标 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 有一项令人兴奋的改进,这将显著加快 doctests 的速度。

此版本还为 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 方法。
  • 发布了九月份的更新。
  • 创建了更自动化的基础设施来准备十月份的更新,利用大型语言模型(LLM)将更新总结为一到两句话,用于简洁的表格。
  • 此目标没有取得进展。
  • 此目标将关闭,因为共识表明在此期间无法实现稳定化;将在下一个目标周期中重新审视。
  • 没有重大更新可报告。
  • 准备下周 EuroRust 的演讲占据了大部分空闲时间。
  • 主要进展:支持隐式超 trait 界限的 PR(#129499)合并后,目前的实现大部分已完成,因为它允许编译大多数应该编译的代码,并拒绝所有不应该编译的代码。
  • 需要进一步测试,下一步是改进诊断(#131152),并在 const traits 被重新添加到 core 之前修复更多漏洞。
  • 正在进行的 pull request 可在此处找到:https://github.com/weihanglo/cargo/pull/66
  • 由于 wasm32-wasip1 缺乏对 POSIX 进程生成的支持(这对于各种构建脚本用例至关重要),因此它不太可能用作默认的沙盒环境。
  • Autodiff 前端已合并,包含超过 2k 行代码和 30 个文件,这使得剩余的差异(diff)小得多。
  • Autodiff 中间件很可能进行重新设计,从基于库的方法转向基于 pass 的 LLVM 方法。
  • 在 @x-hgg-x 的贡献下取得了重大进展,改进了 Cargo 中的解析器测试套件,以对照 SAT 求解器检查特性统一。
  • 随后将导致 PubGrub 出错的测试用例移植到 Cargo 的测试套件中,为 Cargo 切换到 PubGrub 时防止重要行为的回归奠定了基础,并为依赖解析中的特性模糊测试做好了准备。
  • 团队正在就处理泛型参数达成共识,目前两个相关的 PR 都因此问题而受阻。
  • 尝试稳定化 -Znext-solver=coherence 的工作因 nalgebra 中的一个挂起而被回滚,随后的修复改进了性能问题但未能完全解决。
  • 上个月新求解器没有重大变化。
  • GnomedDev 推送了 rust-lang/rust#130553,它用更快的基础设施(字符串匹配改为符号匹配)替换了旧的 Clippy 基础设施。
  • 已开始检查 Clippy 的类型大小和缓存对齐,但尚未取得成果。
  • linting 行为已被回滚,直至未指定日期。
  • 下一步是决定 linting 的未来,并撰写 never patterns 的 RFC。
  • PR https://github.com/rust-lang/crates.io/pull/9423 已合并。
  • 前端功能的开发正在进行中。
  • “在 nightly 版本上支持可扩展的 Polonius” 项目的主要进展包括修复由于旧中间点(old mid-points)导致的 off-by-one 错误引起的测试失败,以及持续调试测试失败,重点在于自动化追踪工作。
  • 已努力接受 议题 #47680 的变体,可能需要调整活动借用(active loans)的计算和效果的位置。Amanda 正在清理正在进行的 PR #130227 中的占位符。
  • rust-lang/cargo#14404 和 rust-lang/cargo#14591 已得到解决。
  • 正在等待时间在几周内集中精力处理此事。
  • 主要进展:将 议题列表 中的案例添加到 UI 测试中,以重现错误或验证其不可重现性。
  • 障碍:无。
  • 寻求帮助:帮助测试 议题列表 中的死锁代码并尝试重现问题。
  • CMU 实践项目(Practicum Project)的学生已开始为核心库中的一些 unsafe 函数编写函数契约,其中包含安全条件,并验证安全抽象是否遵守这些前置条件且确实安全。
  • 需要帮助来编写更多契约、集成新工具、审查 pull request,或参与 仓库讨论
  • annotate-snippets 中匹配 rustc 建议输出方面取得了进展,大多数情况现已对齐。
  • 重点在于理解和调整不同的建议渲染样式,使其适应 annotate-snippets

没有更新的目标

以下目标在上个月没有收到更新