保护 Rust 标准库免于意外破坏:std 也接上了 cargo-semver-checks
来源:predr.ag — 2026-08-15
📋 概述
标准库也和人一样会犯意外破坏的错:从 2020 年 async-std 在 nightly 被一个 unstable 方法弄崩,到 2026 年 tokio 在 Windows 上因 std 增加 unstable 方法而无法编译。Predrag 团队把这套流程接进了 Rust CI——难点在于 std 用「部分稳定性」标注 API(名称稳定但 const 或默认实现未必稳定),需要把稳定信息注入 rustdoc JSON,并让数百个 lint 对 stability 无感知地正确工作,全程约 1.5 万行代码。
🔑 核心要点
- Rust std 有多起 意外破坏先例:async-std、BuildHasher 的 dyn-safety、ChunksMut 的 auto-trait、tokio。
- 难点在于部分稳定性:项可稳定而 const/默认实现不可稳定,需在 rustdoc JSON 中暴露 stability 字段。
- 把 #[unstable] 视为 #[doc(hidden)] 一样「非公开 API」处理,可复用绝大部分既有基础设施。
- 现有数百个 lint 无需改写——stability 处理在 doc(hidden) 之上「正确即正确」。
- 未来还要覆盖更多平台、glob import 与 stability 交互、更好 UX 等后续改进。
- 整个人为审核流程无法可靠发现此类破坏,只能交给工具。
💡 金句
人类根本没法可靠地抓住意外破坏——我重审过那些 PR,换我来也未必能看出问题,唯有工具能补上这块。
👍 0
👎 0
← 返回 Lobsters 首页