如何参与标准库开发?

解读

面试官问“如何参与标准库开发”,并不是想听你背流程,而是考察三点:

  1. 你是否真正用过 nightly 工具链并理解 std/core 的边界;
  2. 你是否清楚 Rust 语言治理结构(TCG、Libs-API、T-libs 等团队职责);
  3. 你是否具备提交高质量代码的实战习惯(MCP、FCP、Crater 回归、性能基线)。
    在国内面试场景里,能说出“先给 rustc 提 test,再提 std 的 MCP,最后跑 Crater 看国内大厂回归”这样一条完整路径,会立刻拉开与普通候选人的差距。

知识点

  1. 工具链:rustup toolchain install nightly;cargo +nightly build --stage 1 std;x.py 脚本与 config.toml 关键选项。
  2. 治理流程:MCP(Major Change Proposal)→ 跟踪 issue → libs-API FCP(Final Comment Period)→ 合并;T-libs 与 Libs-API 的否决权差异
  3. 代码规范:std 内部不允许使用 unstable feature;core 必须 no_std;unsafe 块需带 SAFETY 注释;新增 public API 必须写#[unstable] 并附 tracking issue。
  4. 回归测试:crater 跑国内镜像(清华源+华为云缓存),重点关注阿里、字节、PingCAP 三大代码基线;性能回归使用 rustc-perf 的 benchcmp。
  5. 社区礼仪:Zulip 流 #t-libs > 中文时段(周三晚 9 点)集中提问;PR 描述必须带@rustbot ready,否则不会进入队列。

答案

我参与标准库开发会按“四步闭环”推进:
第一步,环境对齐:用 rustup 安装 nightly-2024-05-15 这一国内镜像快照,配置 config.toml 里 download-ci-llvm=true,30 分钟内可完成 stage1 编译。
第二步,问题发现:在 rust-lang/rust 仓库里带标签 T-libs 且 E-easy 的 issue 中挑一个,例如“Vec::from_iter 长度预测失败”,先写单元测试放在 library/alloc/tests/vec.rs,保证测试在 miri 下无内存模型告警
第三步,走 RFC-lite 流程:若改动新增 pub API,先开 MCP 帖子描述用例与替代方案,邀请 Libs-API 成员 @m-ou-se 做早期否决检查;通过后再提 PR,标题格式“std: add Vec::foo”,正文用@rustbot label +T-libs +S-waiting-on-review 触发 bot。
第四步,国内回归:把 PR 分支推到个人 crater 云主机(4 核 8 G 即可),设置 CRATER_CUSTOM_SOURCE 为清华源,跑 500 个国内头部 crate,重点看字节跳动 monorepo 与蚂蚁链框架是否编译失败;若无回归,贴出 benchcmp 报告证明零成本抽象,最后@rustbot ready 进入 FCP。
整个周期控制在两周内,符合 Rust 官方“小步快跑、可回滚”的节奏,也满足国内大厂对稳定性大于新特性的诉求。

拓展思考

  1. 如果未来标准库要引入无锁并发链表,你作为贡献者如何证明其正确性?提示:需用 loom 做模型检测,并给出 TLA+ 规约, libs-API 才会考虑 stabilisation。
  2. 国内云厂商定制了 rust-sgx-sdk,若你的 std 改动导致其 enclave 模式编译失败,你会如何协调 upstream 与下游维护者?提示:可提议在 std 内部加 cfg(target_env = "sgx") 的专用路径,并写 RFC 说明隔离策略。
  3. 当 Rust 2027 版次(Edition)计划把 std 拆成 std-sysstd-os 两 crate 时,你认为对国内操作系统厂商(如 openEuler)集成有何机遇?提前准备哪些补丁可赢得话语权?