Rust 项目目前正致力于 一套包含 26 个项目目标,其中 3 个被设计为 旗舰目标。本文精选了我们实现这些目标的进展(或者在某些情况下,进展不足)的更新。特定目标的完整详细信息可在其相关的 rust-project-goals 仓库中的跟踪问题 中找到。
旗舰目标
异步闭包稳定化已获批准,但稳定化尚未落地!语言团队最终选择稳定化 trait 名称 AsyncFn
,而不是最初提出的基于关键字的 async Fn
语法。这一决定是在 Flavors RFC 讨论之后做出的,该讨论清楚地表明我们对于 async Trait
关键字是否会更广泛地使用尚未达成共识。鉴于此,团队认为 AsyncFn
synta 是一个不错的“下一步”。如果我们最终确实采用了某种形式的 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 的经验,该经验表明 [安全会更有用]。我们仍在努力最终确定 asm-goto 的另一个扩展,该扩展源于 RFL 的要求,即允许 const
支持嵌入指针。最后,我们准备了参考 PR #1610,描述了允许在常量中使用静态指针(Pointers to Statics in Constants)的更改,该更改已于上月稳定化。
Rust 2024 现在已进入每夜版 beta,预计将于 2025 年 2 月 20 日作为 Rust 1.85 的一部分稳定化。它包含许多改进,使语言更一致和符合人体工程学,进一步体现了我们对安全的坚定承诺,并将为期待已久的功能打开大门,例如 gen blocks、let chains 和 never type !
。有关更多更改,请参阅每夜版版本指南。呼吁测试的博客文章包含更多信息以及如何自己尝试的说明。
有更新的目标
min_generic_const_args
现在作为 feature gate 存在,尽管没有任何功能,只有一些受控的重构,但很快就会拥有实际功能。- 已完成移除
ty::Const
上所有eval_x
方法的重构,使得可以正确实现常量的规范化。
- 发布了十月更新。
- 创建了更多自动化基础设施来准备十月更新,利用 LLM 将更新总结成一到两句话,形成一个简洁的表格。
- 对 cargo manifest linting 的支持现已合并,使得可以捕获由 manifest (
Cargo.toml
) 更改而非仅源代码更改引起的破坏性变动。此类破坏性变动的一个例子是移除包特性:任何启用了被移除特性的 crate 将无法再构建。 - Lint 中类型信息的部分模式设计和实现,使得能够创建破坏性变动 lint 并改进一部分类型相关破坏性变动的诊断质量。
- 解决了阻碍跨 crate 检查的多团队问题,编译器团队的 MCP 已合并,rustdoc 改进也已讨论并达成一致。
- const trait 的脱糖方式已完全重组,使设计更容易理解,并且对当前单元测试更加健壮。
- 该功能已进行了大量的开发和清理工作,合并了多个拉取请求,还有两个仍在开放中,使该功能更接近在标准库上进行 dogfood 测试以及更接近稳定化。
- @joshtriplett 开启了 https://github.com/rust-lang/rfcs/pull/3680。@rust-lang/lang 团队尚未真正讨论或就该 RFC 达成决定。
- @spastorino 开始了原型的实现工作。
- 沙箱化构建脚本的探索已完成。我们明年不太可能继续这项工作,但研究结果可能在其他领域有用,例如可能为 WASI 添加 POSIX 进程支持,或者在 Cargo 中进行声明性系统依赖配置。
- 自动微分中/后端已完成重新设计,待上游提交的剩余代码行数从 2.5k 减少到 1.1k,分为两个 PR(1 和 2),这两个 PR 收到了初步反馈,预计将于十二月初落地。
- 首篇利用
std::autodiff
的论文预印本可在 Arxiv 上获取,代码可在 ChemAI-Lab/molpipx 获取,展示了 Rust 中比 JAX 快得多的编译时间。
- PubGrub 的核心数据结构已作为独立的
version-ranges
crate 发布,使得多个项目可以共享这一核心抽象并从中获益,而无需等待项目的其余部分。 - 这是发布 PubGrub crate 新版本 0.3.0 所需的众多步骤之一。
- Rustdoc 现在将在搜索结果页面中显示类型签名,并且 boxing 转换的行为更像 Hoogle。
- 匹配行为已得到改进,以符合用户预期。
- 我们在 https://github.com/rust-lang/rust/pull/130654 中再次稳定化了
-Znext-solver=coherence
。看起来这次稳定化会真正落地。 - 我们目前正在重构跟踪当前“typing mode”的方式,致力于修复 trait-system-refactoring#106。已启动 FCP 来清理我们在证明 trait goals 时合并 candidates 的方式。
- rust-lang/rust#125116 已合并,标志着该目标的一半正式完成。
- 关于在 CI 上使用 cargo cache 的讨论开始成形。
- rust-lang/rust#125116 的结果可能存在争议。即使对 Clippy 而言,其影响可能不如预期大。
- 我们一直在尝试让 Clippy 使用
rustc_driver
作为静态库,而不是动态链接。这既是一种检查rustc_driver
作为共享库的性能影响的方法,也是一种在不过滤dl_*
调用之间进行 Clippy 性能分析的方法。
- never patterns RFC 已发布。
- 对 RFC 的反馈表明,“哪些分支可以省略”的问题并不像希望的那样正交,因此焦点将转向这一点。
- PR https://github.com/rust-lang/crates.io/pull/9423 已合并。
- 前端功能的工作正在进行中。
- Amanda 上月关于 Polonius 的 EuroRust 演讲现在也可在 YouTube 上观看。
- 实现工作仍在继续,主要在一个分支上。主要的进展包括一个新的调试器,它加速了进度。还有大约 70 个测试失败待分析。
- rust-lang/cargo#14670 和 rust-lang/cargo#14749 已发布并合并。
- rust-lang/cargo#14792 已发布。
- 仍在通过本地测试和编译器代码分析确定死锁原因。
- 需要帮助:尝试重现问题列表中描述的死锁。
- Rust 基金会与 AWS 之间的新合作关系将有助于资助这项工作。verify-rust-std fork 中的验证挑战现在对完成者提供经济奖励。
- 需要帮助:需要帮助编写更多合约,集成新工具,审查拉取请求或参与仓库讨论。
- 由于我们未能取得稳定进展,我们决定关闭此目标。我们正在评估为 2025h1 轮次的目标提出什么建议。
无更新的目标
以下目标在上个月没有收到更新