@@ -65,7 +65,29 @@ L3 指的是**改 mcpp 自己的 138 个模块**——把定义从接口单元
6565** 可以做的** :拉一个临时分支/PR,只为** 量出具体收益** (推算是链 74.6s → ~ 10.4s),
6666测完即弃,不合入。收益数字回填到本文。
6767
68- ### L3 / L4:优化被构建工程,不是优化构建器
68+ ### L3 的收益已经量出来了 —— 而且它和 L2 治的是同一个病
69+
70+ 不用拉分支: bench 的 ` modules-impl ` 变体测的** 正是** L3(定义写在接口单元 vs 移到实现
71+ 单元),数据已经在 ` bench/results/five-way-20260812/ ` 里。同一 fixture、同一编译器:
72+
73+ | 场景 | mcpp: modules → modules-impl | cmake: modules → modules-impl |
74+ | ---| ---| ---|
75+ | cold (gcc) | 3.53 → 3.25s ** (+7.8%)** | 13.05 → 12.80s (+2.0%) |
76+ | cold (clang) | 2.50 → 2.19s ** (+12.3%)** | 4.00 → 3.96s (+0.9%) |
77+ | ** edit-body (gcc)** | 0.29 → 0.31s ** (−6.2%)** | ** 10.29 → 0.79s (+92.3%)** |
78+ | edit-body (clang) | 0.46 → 0.31s (+32.5%) | 2.62 → 0.42s (+84.0%) |
79+
80+ ** 看 ` edit-body ` 那两行。** 把定义移出接口单元,给 cmake 带来 ** 92%** 的提升,
81+ 给 mcpp 带来 ** −6%** (即没有)。原因是同一个:改函数体时接口没变,
82+ cmake 按 BMI 的 mtime 级联,mcpp 比 BMI 的内容。** L3 是给没有 L2 的引擎准备的绕行方案。**
83+ 引擎做了这件事之后,工程再去重构,在这条轴上什么都买不到。
84+
85+ 真正留下来的是 ** cold 上 +8%~ 12%** —— 接口单元变薄,关键链就变短。这是真的,
86+ 但它是"顺手的好设计",不是一条值得为性能去改 138 个模块的理由。
87+
88+ ** 所以 L3 的文档提示是:先要引擎的 L2,再谈重构。** 顺序反了会做很多白工。
89+
90+ ### L4 与这条界线
6991
7092⚠️ ** 这是本轮最重要的一条界线。** 「优化 mcpp 的构建性能」指的是** 通用构建性能** ,
7193不是把 mcpp 这一个工程调快。** 通过改被测目标来变快,不能算数** ——
0 commit comments