如何为blaze贡献代码:从源码构建、运行测试到合入变更的完整开发者指南
【免费下载链接】blaze
Incremental rust builds up to 92x faster than cargo/rustc
blaze是一个比 cargo/rustc 快至多 92 倍的 Rust 增量构建工具,本文将带你走通为 blaze 贡献代码的全流程:如何从源码构建 blaze、如何运行与 rustc 对照的测试闸门(gate)、以及如何通过 Pull Request 把变更合入主分支,适合想参与这个 Rust 编译器项目的开发者快速上手。
一、先认识仓库布局:blaze 代码放在哪里
在写第一行代码前,先花两分钟了解 docs/contributing.md 中描述的目录结构。这是贡献代码的"地图",能帮你判断新代码该落在哪个 crate:
| 目录 | 作用 |
|---|---|
crates/blaze-engine/ | 核心引擎:daemon、cargo drop-in、splice、remote |
crates/hir-ty-codegen/ | 代码生成器:MIR 到 Cranelift IR 的生产器 |
crates/blaze-store/ | 编译产物的磁盘存储 |
crates/hir-ty/、crates/hir-def/等 | 前端(源自 rust-analyzer 分叉,已停止同步上游) |
harness/ | 测试 harness 与夹具,贡献者跑测试的主要战场 |
demo/ | harness 和 scoreboard 使用的小型示例工程 |
docs/ | 项目文档,docs/README.md 是索引 |
一个值得牢记的原则:rustc 是参照物。blaze 的输出必须与 rustc 在真实程序上的行为一致,任何让 harness 与 rustc 出现差异的变更都不会被合入。
二、从源码构建 blaze:一条命令搞定
blaze 只使用一个固定的 nightly 工具链,版本写在 harness/toolchain 这一个文件里(例如nightly-2026-10-27),其余所有地方都读它或从它生成。你不需要自己猜用哪个 Rust 版本。
构建步骤如下:
git clone https://gitcode.com/gh_mirrors/blaze38/blaze && cd blaze cargo +"$(cat harness/toolchain)" build -p blaze-engine --releasecargo +"$(cat harness/toolchain)"会自动选中仓库钉住的 nightly。日常开发建议直接用它产出的cargo build --release构建(harness、闸门和 CI 用的都是它),改完代码后重编很快。
💡 若使用 LLVM 后端,需先在 flake 的开发壳里构建:
nix develop -c cargo build -p blaze-engine --release --features llvm,细节见 docs/contributing.md 的 "LLVM for--features llvm" 一节。
三、新代码该放在哪里
blaze 有一条硬规则:no-rustc——blaze 永远不调用 rustc 来编译任何东西(详见 docs/no-rustc.md)。新代码不能给构建流程增加任何走回 rustc 的路径。
- 语言语义类改动(MIR 构建与 pass、借用检查、常量求值、布局)放前端 crate,如 crates/hir-ty/、crates/hir-def/,优先新建独立 crate 而不是继续加长
hir-ty。 - blaze 自身机制(代码生成后端、store、daemon、cargo 集成、harness)放各自的独立 crate,一次普通 commit 即可。
四、运行测试:闸门(gate)是什么
blaze 的测试哲学是差分测试:harness/ 下几乎每个脚本都会用 cargo+rustc 构建一个程序,再用 blaze 的产物替换 rustc 的重新构建,运行两者并逐字节比较 stdout、stderr 和退出码——有差异就是失败。完整的清单在 docs/harness.md。
一个变更在合入前需要通过的"闸门"分两层:
1. Rust 单元测试(CI 的 merge gate 也只查这个 + 构建):
python3 harness/unittests.py # 或等价地: cargo test --release -p blaze-engine -p hir-ty -p hir-def -p parser -p syntax2. 快速层 harness,在你的 ix VM 中运行(ci.py是唯一权威清单):
uv run --frozen python harness/ci.py parts '{"tier": "fast"}' uv run --frozen python harness/ci.py run '{"part": "fast"}'跑 harness 前先设置被测二进制与后端:
export BLAZE_BIN=$PWD/../target/release/blaze-engine export BLAZE_BACKEND=cranelift # 或 llvm(需 BLAZE_OPT=2 BLAZE_EMIT=fast)📌 每个 harness 都会自动从harness/toolchain选择工具链;建议加RUST_BACKTRACE=0,避免 panic 的堆栈污染对比输出。
五、贡献者必须知道的四条铁律
来自 docs/contributing.md 的 "Rules for code",也是代码评审的底线:
- rustc 是参照物:即使 rustc 的行为看起来像意外,blaze 不一致也是 blaze 的错;
- 绝不猜测:代码生成器没有显式降级的输入会以
CodegenError拒绝,而不是尽力猜测——错的猜测是没人看得见的错误编译; - 被拒绝的函数是 bug:要列出来修复,而不是设计绕行方案;
- 通用修复:只针对某个 crate、某个函数名或某个测试打补丁,不算修复。
风格上遵循 rust-analyzer 的指南:cargo fmt --all、不加无理由的新依赖、小而聚焦的变更、注释解释"为什么"而非"改了什么"。
六、合入变更:land.py 一条命令走完 PR 流程
main 分支只通过 Pull Request 前进,任何人都不能直接 push。分支工作完成、本地闸门通过后:
python3 .github/scripts/land.py "这个分支做了什么".github/scripts/land.py 会推送分支、创建 PR 并开启 auto-merge;PR 自身的运行(Linux x86-64 上的构建 + 单元测试,约 5 分钟)就是合并闸门,通过后 GitHub 以 merge commit 合入。若失败会打印检查项链接——修好分支再跑一次即可,它还会自动等待合并并打印 commit。
合入后清理现场:删除 worktree、本地分支和 VM。
七、并行协作与提交礼仪
- 一个 lane 一个 worktree(命名
blaze-<lane>-<date>),并配独立的CARGO_TARGET_DIR;永远不要git stash(stash 是全仓库共享的一个栈,可能弹走别的 lane 的改动)。 - 小步快跑:频繁通过 PR 合入,而不是攒一个大 PR 等数小时。
- 报告时区分"跑过什么"和"推断了什么":docs/reports/ 下的报告就是这么写的,这也是它们可信的原因。
- 引用他人思路要署名:commit 消息尾部加
Co-authored-by: Name <email>trailer,并说明出处。 - 文档与代码同变:若你的变更使某篇
current状态文档失实,要在同一变更中修好它或标记为superseded;python3 tools/docs.py check会在 CI 中校验所有链接与路径。 - blaze 采用MIT / Apache-2.0 双许可,贡献按同样条款接受。
结语:你的第一个 PR 清单
- ✅
git clone并按harness/toolchain钉住的 nightly 构建blaze-engine --release - ✅ 复现问题,写出"修复前失败、修复后通过"的最小用例(corpus 函数 / breaker / edit harness 步骤)
- ✅ 跑通单元测试 + 快速层闸门(Cranelift 与 LLVM 两个后端)
- ✅
cargo fmt --all,顺手把相关文档保持为真 - ✅
land.py提交 PR,等待 merge gate 通过
更多细节随时查 docs/contributing.md、docs/harness.md 与 AGENTS.md,祝你在 blaze 仓库里贡献顺利 🚂
【免费下载链接】blaze
Incremental rust builds up to 92x faster than cargo/rustc
相关推荐
HatchZip 开发者指南:如何从源码构建、运行测试并为这个开源项目贡献代码
HatchZip 开发者指南:如何从源码构建、运行测试并为这个开源项目贡献代码 HatchZip 是一个用 Rust 编写的开源原位解压工具:它在解压大档案时逐
桌面应用CLI跨平台开发工具Santa开发者指南:如何贡献代码、构建项目与运行测试
Santa开发者指南:如何贡献代码、构建项目与运行测试 Santa是macOS平台的二进制授权和监控系统,为开发者提供完整的安全解决方案。这份终极指南将带你深入
应用安全如何为 pnpm 贡献代码:从新手到开源贡献者的完整指南
如何为 pnpm 贡献代码:从新手到开源贡献者的完整指南 pnpm 作为一款快速且节省磁盘空间的包管理器,其开源社区始终欢迎开发者贡献代码。本指南将带你完成从环
包管理器开发工具CLI
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考