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 已得到解决。
- 正在等待时间在几周内集中精力处理此事。
- CMU 实践项目(Practicum Project)的学生已开始为核心库中的一些 unsafe 函数编写函数契约,其中包含安全条件,并验证安全抽象是否遵守这些前置条件且确实安全。
- 需要帮助来编写更多契约、集成新工具、审查 pull request,或参与 仓库讨论。
- 在
annotate-snippets
中匹配rustc
建议输出方面取得了进展,大多数情况现已对齐。 - 重点在于理解和调整不同的建议渲染样式,使其适应
annotate-snippets
。
没有更新的目标
以下目标在上个月没有收到更新