Rust 筛选自 33 条资讯

Rust 日报 · 2026-08-05

今日速览

Polonius Alpha 进入 nightly,这是 NLL 之后借重检查器最大的一次升级。它解决了 HashMap::get_mut 这类代码一直通不过的流敏感性检查问题,预计几个月内稳定。rust-lang/rust 仓库发布了大语言模型贡献政策,要求披露 LLM 生成的代码,提交质量由人类负责。RFC 3980(extern "custom" ABI)已合并,为裸函数和自定义调用约定提供了更明确的编译器支持。

重要新闻

  • rust-lang/rust 仓库发布大语言模型贡献政策 — 五个 Rust 团队采纳了一项 LLM 使用政策,由 Jynn Nelson 起草,只适用于 rust-lang/rust 单体仓库。这套政策为什么出台?Jynn Nelson 说了三条:打磨得很漂亮的补丁已经看不出提交者的真实理解和投入;LLM 生成的代码让原本就紧张的 review 人力更加捉襟见肘;还有 LLM 吐出的 issue 常常等不到人核实就被关了。政策把 AI 使用分成三类——完全禁止:比如用 LLM 生成的诊断建议去回复真实用户;允许但需披露:任何不琐碎的代码和文字改动;无需披露就能用:翻译非英语消息、改个拼写错误这类小事。最后,LLM 产出的内容出了问题,由提交的人类作者来扛。至于语音转文字、智能补全这类 AI 是否要披露,还没定,Nelson 觉得对这些场景要求披露可能太重了。

  • 资金团队 7 月进度更新 — 资金团队公布了 Maintainer in Residence(MiR)项目的最新进展。目前筹到 35 万美元捐款,45 名团队成员表示想被资助——其中 34 人愿意做常规维护,13 人想为特定目标申请资金。去年 11 月的调查里,只有 35% 的活跃贡献者曾经拿到过上游贡献的资助,但这些人平均每个月还是花大约 40 小时在 Rust 上。团队还在敲定 MiR 的具体运作方式,比如合同形式、给多少钱。

版本与更新

  • Polonius Alpha 借重检查器在 nightly 频道启用 — Polonius 借重检查器的新版本——他们管它叫 Polonius Alpha——已经在 nightly 上线,准备几个月内稳定。Rust 的第一个借重检查 AST borrowck 在 2019 年被 NLL 取代,而 Polonius 最早是 2018 年从 NLL 的工作里衍生出来的。最初的形式化方案虽然能让 NLL 不能通过的代码通过,但性能太差了没法上线。2023 年工作组提出了一个新方案,只对 NLL 实现做最小重构就能让更多代码通过编译。这个新版本的核心是 flow-sensitive 借重检查——它能知道借出的生命周期在某条控制流路径上是不是真的还活着。最典型的例子就是 HashMap::get_mut 那种模式,现在可以直接编译通过了,不用再靠 if let 或者 entry API 绕路。性能在可接受范围,而且暂时没发现诊断质量下降。

技术提案与 RFC

  • RFC 3980 extern "custom" 合并 — RFC 3980 定义了 extern "custom" fn,这是一种编译器完全不知道调用约定的函数类型。这些底层函数参数经常在不同的寄存器之间传来传去,硬套标准调用约定根本不行。extern "custom" 的作用就是让 rustc 在需要理解调用约定的地方禁用这些函数——算是设了一道安全围栏。它和 extern "interrupt" 或 extern "gpu-kernel" 不一样:后面这些的 ABI 是已知的,只是从 Rust 调用这在语义上不合理。extern "custom" 只能通过内联汇编或者 FFI 来调用。这个 RFC 的编辑修订也一起合入了主仓库。

  • 新 RFC 提案:支持外部链接器 — 新 RFC 打算把 rlib 格式的 v0 版本部分稳定下来,再定义一个“标准库包”机制。目标是让 C 或 C++ 应用在 monorepo 或封闭构建环境里可以直接链接 Rust 库,不用改现有的链接流程。如果通过的话,还需要编译器做一系列改动来支持新的版本化格式和链接方式。

  • 为 Rust 官方书籍添加标准引用格式 — 有人在论坛提,像《The Rust Programming Language》这些官方书籍已经被学术论文引用了 800 多次,但一直没有一个标准的引用方式。GitHub 已经有了 CITATION.cff 这种文件格式,专门给仓库里的书声明引用信息。提议是在相关仓库根目录加上这个文件,再让 mdBook 能解析它,在 HTML 输出里自动生成 BibTeX 或 APA 格式的引用。

值得一读

  • GitHub 的码点大小写折叠优化实践 — GitHub 的代码搜索引擎为了大小写不敏感搜索,要对源码做大小写折叠。这篇工程博客讲了他们怎么在 Rust 里围绕内存吞吐量做优化,用 SIMD 加速码点折叠、避免提前退出等等,对数据处理密集型项目有参考价值。

  • 设计一个查询系统——Krabby 编译器笔记 — 作者花了五个月从零开始设计 Krabby 编译器的查询系统。一开始想绕开传统的 pull 式查询,搞一个推式架构,把解析结果预先塞进全局数据库,留着未解析引用的指针以后填。做着做着发现,全局数据库本身就是一种特化的查询系统,懒求值导致 CPU 缓存利用率很差,处理不均衡的依赖图或者找出被大量依赖的关键任务都很费劲。于是文章又绕回 pull 式增量查询,讨论怎么在缓存局部性、并行度和增量重算之间找平衡。

  • Safe Lock-free 原语与 iceoryx2 的 ByteAtomic — 文章讲了一个老问题,但很微妙:就算你在序列锁里检测到数据竞争、把被改过的副本扔掉了,复制非原子数据这个动作本身,在 Rust 和 C++ 里仍然是 UB。iceoryx2 的人介绍了 ByteAtomic 包装器的设计——用逐字节的原子操作来包裹任意数据,不加锁也能干掉潜在的 UB,给安全关键的零拷贝通信加上正确性保证。

  • rust-analyzer 计划删除 term search 功能 — rust-analyzer 的维护者打算砍掉 term search。原因是没多少人用,开着还会拖慢 IDE、带来更多 bug。他们在问有没有人真的在用,希望大家反馈。

  • 手写 Rust 项目:用于微分音音乐的 Syntoniq DSL — 一个 98% 手写代码的 Rust 项目,是个微分音音乐的 DSL,叫 Syntoniq。作者只在一小部分工具函数上用了 AI 帮忙,比如 RGB 转 HSV、格式化表格输出,主要代码都是纯手写,想探索不用 AI 代工的项目怎么做。