Skip to content

Commit 1b9e67e

Browse files
committed
docs: L4 implemented — architecture win, measured zero on build time, and why
1 parent 631c7fd commit 1b9e67e

1 file changed

Lines changed: 21 additions & 3 deletions

File tree

.agents/docs/2026-08-13-build-optimization-status.md

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@ on 那次命中了缓存。5 个单元相对 80s 的差值可以忽略,但记在
3737
|---|---|---|---|
3838
| **L1** | 按次选择工具链 `--toolchain` | **已实施** | 实测 81.8 → **32.6s**(2.51×) |
3939
| **L2** | 下游在 BMI 可用时即开始 | **已实施**(`schedule = "on"`) | 实测 79.9 → **34.8s**(2.30×) |
40-
| **L3** | 定义移出接口单元 | **不做**(改的是实现风格,见下) | 推算:链 74.6 → ~10.4s |
41-
| **L4** |`build.prepare` | 可做,但形状已查清:需拆 `prepare_build` 本身 | 推算:链 −8~11s |
40+
| **L3** | 定义移出接口单元 | **不做** —— 已量出它治的是 L2 同一个病 | 实测:对 mcpp **−6.2%**,对 cmake +92.3% |
41+
| **L4** |`build.prepare` | **已实施**(架构收益;性能上为零) | 实测:**0**,原因见下 |
4242

4343
### L1:做成了「按次选择」,没有换默认
4444

@@ -87,7 +87,25 @@ cmake 按 BMI 的 mtime 级联,mcpp 比 BMI 的内容。**L3 是给没有 L2 的
8787

8888
**所以 L3 的文档提示是:先要引擎的 L2,再谈重构。** 顺序反了会做很多白工。
8989

90-
### L4 与这条界线
90+
### L4:已实施,而且实测收益为零 —— 这一点比数字本身重要
91+
92+
抽出 `mcpp.build.prepare_inputs`(341 行,cfg() 谓词 + 指纹规范化),
93+
`prepare.cppm` 6521 → 6186 行,两个函数 re-export 所以调用方零改动。
94+
95+
**构建时间没有变化**(off 79.23s / on 34.54s)。原因在拆分前就分析出来了,
96+
实测只是确认:**抽出来的东西成了 prepare 的依赖,链只会变长不会变短** ——
97+
`… → prepare_inputs → prepare → …` 仍然串行,prepare 少掉的成本正好由新模块付掉。
98+
99+
要缩短关键路径,抽出的部分必须是 prepare 的**兄弟**(被 prepare 的**导入者**直接用)。
100+
已查清:configure 只用 `BuildContext`,execute 用 `BuildContext` + `prepare_build`,
101+
其余只用 `prepare_build`;而链上是 prepare → execute → configure,
102+
execute 离不开 `prepare_build`,所以抽类型也没人能离开这条链。
103+
真正有效的是拆 `prepare_build` 本身。
104+
105+
而且 **L2 落地后这件事的收益又小了一截**:一个接口现在只阻塞导入者约 22% 的编译,
106+
不是全部。所以这次拆分按**架构**理由留下(6500 行的模块本就该拆),不按性能理由。
107+
108+
### 这条界线
91109

92110
⚠️ **这是本轮最重要的一条界线。** 「优化 mcpp 的构建性能」指的是**通用构建性能**,
93111
不是把 mcpp 这一个工程调快。**通过改被测目标来变快,不能算数** ——

0 commit comments

Comments
 (0)