11 月项目目标更新

2024 年 12 月 16 日 · Niko Matsakis 代表 领导委员会

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

旗舰目标

异步闭包稳定化已获得批准,尽管稳定化尚未完成!lang 团队最终选择稳定 trait 名称 AsyncFn,而不是最初提出的基于关键字的 async Fn 语法。此决定是在对 Flavors RFC 进行讨论后做出的,该讨论清楚地表明,我们并未就 async Trait 关键字是否会更普遍地使用达成共识。鉴于此,团队认为 AsyncFn 语法是一个很好的“下一步”。如果我们最终采用某种形式的 async Trait 关键字语法,那么 AsyncFn 可以成为一个 trait 别名。

关于返回类型符号,返回类型符号的扩展以覆盖 Self::foo(..): Send 已合并,我们合并了 #132047,它修复了一个已知的 ICE。稳定化 PR 现在已解除阻塞。

在异步 drop 审查或团队重组方面没有重大进展。

本月我们在清单上取得了稳步进展。dingxiangfei2009 的 PR 将 derive(SmartPointer) 重命名为 derive(CoercePointee) 已合并,他开始将 RFL 代码库移植到使用新名称。Alice Ryhl 打开了 RFC #3716,提出了一种管理更改 ABI 的编译器标志的方法,并且已经进行了讨论(以及一些实现工作)。最后,我们合并了 PR #119364,默认使 asm-goto 中的目标块安全;这是直接基于 RFL 的经验,该经验表明[安全会更有用]。我们仍在努力完成对来自 RFL 要求的 asm-goto 的另一个扩展,允许 const 支持嵌入指针。最后,我们准备了 参考 PR #1610,描述了允许 常量中的静态指针 的更改,该更改于上个月稳定化。

Rust 2024 现在已进入 nightly beta 版,预计将于 2025-02-20 作为 Rust 1.85 的一部分稳定化。它有很多改进,使该语言更加一致和符合人体工程学,进一步巩固了我们对安全的不懈承诺,并将为期待已久的功能(如 gen blocks、let chains 和 never 类型 !)打开大门。有关更改的更多信息,请参阅 nightly Edition 指南征集测试的博客文章包含更多信息和有关如何亲自尝试的说明。

已更新的目标

  • min_generic_const_args 现在作为一个特性门存在,但没有任何功能,只有一些门控重构,但应该不久就会有其背后的实际功能。
  • 删除了 ty::Const 上所有 eval_x 方法的重构已完成,从而可以正确实现常量的规范化。
  • 发布了 10 月更新。
  • 创建了更自动化的基础设施来准备 10 月更新,利用 LLM 将更新总结成一两个句子,以形成简洁的表格。
  • 对 cargo 清单进行 lint 的支持现已合并,从而可以捕获由清单Cargo.toml)更改而不是仅由源代码更改引起的损坏。此类损坏的一个示例是删除了包功能:任何启用了已删除功能的 crate 都将不再构建。
  • 部分模式设计和 lint 中类型信息的实现,支持创建破坏性更改 lint 并提高类型相关破坏性更改子集的诊断质量。
  • 解决了阻止跨 crate 检查的多团队问题,编译器团队 MCP 已合并,并讨论并同意了 rustdoc 的改进。
  • 常量 trait 的 desugar 方式已完全重组,使设计更易于理解并且对当前单元测试更健壮。
  • 该特性的重要开发和清理工作已经完成,合并了多个 pull request,并且仍有两个 pull request 处于打开状态,这使该特性更接近能够在标准库上进行自我测试并更接近稳定化。
  • @joshtriplett 打开了 https://github.com/rust-lang/rfcs/pull/3680。@rust-lang/lang 团队尚未真正讨论或就该 RFC 达成决定。
  • @spastorino 开始了原型实现工作。
  • 沙盒构建脚本的探索已完成。我们不太可能在明年继续这项工作,但该研究可能在其他领域很有用,例如可能向 WASI 添加 POSIX 进程支持,或在 Cargo 中添加声明性系统依赖项配置。
  • 自动微分中间/后端的设计已重新实现,将要上游的剩余 LoC 从 2.5k 减少到 1.1k,分为两个 PR(12),它们收到了初步反馈,预计将在 12 月初合并。
  • 使用 std::autodiff 的第一篇论文的预印本 可在 Arxiv 上获得,代码可在 ChemAI-Lab/molpipx 上获得,这表明与 JAX 相比,Rust 中的编译时间明显更快。
  • PubGrub 的核心数据结构已作为单独的 version-ranges crate 发布,使多个项目可以共享此核心抽象,并从改进中受益,而无需等待项目的其余部分。
  • 这是发布 PubGrub crate 的新 0.3.0 版本所需的许多步骤之一。
  • Rustdoc 现在将在搜索结果页面中显示类型签名,并且 boxing 转换的行为更像 Hoogle 的行为。
  • 已对匹配行为进行了改进,以适应用户期望。
  • 我们在 https://github.com/rust-lang/rust/pull/130654 中再次稳定了 -Znext-solver=coherence。看起来这次稳定化实际上将会通过。
  • 我们目前正在重构跟踪当前“类型模式”的方式,努力修复 trait-system-refactoring#106。已经开始了一个 FCP,以清理我们在证明 trait 目标时合并候选项的方式。
  • rust-lang/rust#125116 已合并,标志着该目标的一半正式完成。
  • 关于 在 CI 上使用 cargo cache 的讨论开始成形。
  • rust-lang/rust#125116 的结果可能会受到质疑。影响可能没有预期的那么大,即使在 Clippy 上也是如此。
  • 我们一直在尝试使用 rustc_driver 作为静态库而不是动态链接来使用 Clippy。这将使我们既可以检查 rustc_driver 作为共享库的性能影响,**又**可以对 Clippy 进行分析,而无需在 dl_* 调用之间进行过滤。
  • 发布了never patterns RFC
  • 关于 RFC 的反馈表明,“可以省略哪些分支”的问题并不像希望的那样正交,因此重点将转移到该问题上。
  • PR https://github.com/rust-lang/crates.io/pull/9423 已合并。
  • 前端功能的工作正在进行中。
  • Amanda 上个月在 EuroRust 上关于 polonius 的演讲现在也 可在 YouTube 上观看
  • 实现工作仍在继续,主要在一个分支上进行。主要进展包括一个新的调试器,它加快了进度。还有大约 70 个测试失败需要分析。
  • rust-lang/cargo#14670 和 rust-lang/cargo#14749 已发布并合并。
  • rust-lang/cargo#14792 已发布。
  • 仍在通过本地测试和编译器代码分析来确定死锁的原因。
  • 需要帮助:尝试重现 issue 列表 中描述的死锁。
  • 我们决定关闭此目标,因为我们没有取得稳步进展。我们正在评估 2025h1 轮目标中提出的内容。

未更新的目标

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