增量编译到底省多少时间,又付出了什么?为什么 release 默认关着?这篇用一个 5000 个函数的 crate,在 dev 和 release 里分别开关增量,量出重编时间与磁盘占用。
CARGO_INCREMENTAL=1(dev 默认) 首次 3.05 s 没改动 0.08 s 改一个函数体后 0.77 s(3 次最小) target/debug/incremental 大小 132.9 MB CARGO_INCREMENTAL=0 首次 2.55 s 没改动 0.08 s 改一个函数体后 2.48 s(3 次最小) target/debug/incremental 大小 0.0 MB
各个编译阶段见Rust 编译阶段;构建配置见Cargo Profile。
release 默认(无增量) 首次 3.34 s 改一个函数体后 3.32 s release + CARGO_INCREMENTAL=1 首次 3.84 s 改一个函数体后 0.77 s
数字是本机的实测(只改动一个模块里的一个函数体,3 次或 2 次取最小);修改被很多地方依赖的类型定义时,增量的收益会小得多,没有测。