两处结构体字段存在、被填、但没有任何消费方。都是既有的,#414 review 时撞见,
当时没顺手清理 —— 删公开结构体字段不该混进一个修缺陷的 PR。
1. CompileFlags::contractByRole 只写不读
src/build/flags.cppm:
:62 std::array<mcpp::build::dist::Contract, kRoleCount> contractByRole{};
:862 f.contractByRole[i] = r.effective; ← 唯一一次出现,是写
全仓再无读取点(grep -rn 'contractByRole' src/ tests/ 只有这两行)。
它记录的是"每个角色实际拿到的契约(降级之后)",是个有价值的观测量 —— 所以
这里有两条路,不是只能删:
- 删掉,等真有消费方时再加回来;或
- 接出去:写进
resolution.json,让 mcpp why / doctor 能回答"这个产物到底
是不是 self-contained"。目前用户只能靠 readelf 自己看。
倾向后者 —— #414 之后共享库的契约按格式分档,"我这个 .so 到底拿到了哪一档"是个
用户会真的问的问题。
2. TargetEntry::cxxRuntimeTests 既不解析也不生效
src/manifest/types.cppm:622 声明了它,但:
src/manifest/toml.cppm:1358 的 [target.<triple>] 解析只读 cxx_runtime
(标量),从不读 cxx_runtime_tests / 表形式
src/build/prepare.cppm:1472-1473 应用时也只应用 cxxRuntime
即:写在 manifest 里的 per-target tests 契约不会有任何效果,而字段的存在让人以为可以。
注:#414 给 [build].cxx_runtime 加 shared 键时刻意没有往 TargetEntry 里
再塞一个同样的死字段;per-target 通道目前只支持标量拼写,而标量已经覆盖所有角色
(它会成为 project-wide explicit)。
建议:删掉 TargetEntry::cxxRuntimeTests,或把 [target.<triple>].cxx_runtime
的表形式解析补全(与 [build].cxx_runtime 对齐,含 default/tests/shared)。
两者都行,当前状态不行 —— 一个不生效的配置项比没有更糟。
判据
背景
两处结构体字段存在、被填、但没有任何消费方。都是既有的,#414 review 时撞见,
当时没顺手清理 —— 删公开结构体字段不该混进一个修缺陷的 PR。
1.
CompileFlags::contractByRole只写不读src/build/flags.cppm:全仓再无读取点(
grep -rn 'contractByRole' src/ tests/只有这两行)。它记录的是"每个角色实际拿到的契约(降级之后)",是个有价值的观测量 —— 所以
这里有两条路,不是只能删:
resolution.json,让mcpp why/doctor能回答"这个产物到底是不是 self-contained"。目前用户只能靠
readelf自己看。倾向后者 —— #414 之后共享库的契约按格式分档,"我这个
.so到底拿到了哪一档"是个用户会真的问的问题。
2.
TargetEntry::cxxRuntimeTests既不解析也不生效src/manifest/types.cppm:622声明了它,但:src/manifest/toml.cppm:1358的[target.<triple>]解析只读cxx_runtime(标量),从不读
cxx_runtime_tests/ 表形式src/build/prepare.cppm:1472-1473应用时也只应用cxxRuntime即:写在 manifest 里的 per-target tests 契约不会有任何效果,而字段的存在让人以为可以。
注:#414 给
[build].cxx_runtime加shared键时刻意没有往TargetEntry里再塞一个同样的死字段;per-target 通道目前只支持标量拼写,而标量已经覆盖所有角色
(它会成为 project-wide explicit)。
建议:删掉
TargetEntry::cxxRuntimeTests,或把[target.<triple>].cxx_runtime的表形式解析补全(与
[build].cxx_runtime对齐,含default/tests/shared)。两者都行,当前状态不行 —— 一个不生效的配置项比没有更糟。
判据
背景