批8: bool←int 静默面收口——自测计数惯用式 171 处改签名 helper + 「台账 bool 桶归零」入 CI - #128
Merged
Merged
Conversation
…ol 桶归零」入 CI 【形态】`fails = fails + ts_check(name, <谓词>, 1)`:`ts_check` 形参声明 int,而第二实参**本就是 bool 表达式** ⇒ 靠 bool 隐式当 int(0/1) 参与 `!=` 而「恰好正确」(S1P 台账的 `形参 int ← 实参 bool`,p_ti=0/a_ti=2)。 不是错值,是靠隐式转换活着的接缝——收口后(bool 不再当 int)这批点会整片翻面,且失效信号是「自测数不准」= 静默类。 【改法】新增签名 helper `ts_check_b(name, got: bool, want: bool) -> int`(`type_selftest.cr`)与 `ps_check_b`(`purity_selftest.cr`),返回 int 以**保持 `fails = fails + …` 惯用式不变**(累加值不变); 171 处按「第二实参为括号包裹的 bool 表达式」逐处改写(type 166 + purity 5)。 【台账(oracle = 被修对象自身输出,非文本扫描)】`CORE_S1P=1 ./build/corec check src/compiler/main.cr`: 改前 **239** 点(bool 桶 **171**)⇒ 改后 **68** 点(bool 桶 **0**;残桶 = string↔int:46 点 `0←0` + 22 点 `2←3`, 归 S2 路线 1 单独批,本批不动)。 【逐处留痕】`docs/superpowers/plans/2026-09-18-bool171-sites.tsv`:171 行(file/line/helper/case-name/第二实参/第三实参), 案名去重后仍 171(无重复、无遗漏),数据行 sha256 = 6dfee7aa93cdb7e5664da60e89fc515adb40654ed13b042b3ad7efa7b8366e10; 第三实参 true 170 处 · false 1 处(负断言 `iface.compare_is_live`,改前形 `..., 0)`,语义逐字对齐)。 【零行为变化】`selftest-types` 421 行(415/415,rc=0)与 `selftest-purity` 28 行(26/26,rc=0)运行输出与改前基线 **逐字节相同**(cmp 无差异)。⚠ 取数陷阱已留痕:首轮比较因 fish noclobber 未真跑(重定向失败 ⇒ 比的是旧文件 ⇒ 假 IDENTICAL), 改 `>|` 并核 rc/行数后重跑才有效。 【判据入 CI(selfhost-tests)】`tests/selfhost/test_s1p_liveness.py` 新增: ① **⓪ 正则自检**:5 条合成行钉 `HIT` 形状(含可选 ` @@ ` 源行片段 + 行首锚定 + 缺字段负例)——防「格式漂了 ⇒ 0 命中 ⇒ 探针假死」(本档在 CI 上正是这样红过一次); ② **⑦ 自源台账**:**先断言台账非空**(否则 `bool 桶=0` 与「打点没装」不可区分),再断言 bool 桶为 0。 实测 PASS 16s(nice);突变态 rc=1 且**恰 1 项红**(`selfsource_bool_bucket_zero`)⇒ 检测特异。 【突变自证(两条,均断言命中目标)】回退 1 处改写(`t1.var_seq_elem_invariant`,已断言改到该行)⇒ 台账 69 · bool 1(含源行片段 `@@ tt_atom(AK_SEQUENCE, -1, tt_cons(`,证明读数活着);同突变态跑套件 ⇒ 仅判据⑦红。 【版本位 / 缓存面】不动 `CIR_CACHE_VER`:无「已接受程序 IR 变化」(只有编译器自身两个自测文件的调用形态 + 多一个 helper); 两文件自身 AST 变 ⇒ 其 `.cir` 条目 miss 重建,其余条目语义等价 ⇒ 命中无害,身份闸仍兜底。 【落纸事实】「bool 桶归零」的覆盖面 = **非字面量实参面**(S1P 对字面量多态主动跳过,套件护栏③钉住); 方法调用面不在本点(套件 `METHOD_GAP` 腿钉住,不可达分支不得当死码删);**台账归零 ≠ 语义正确**(残桶 68 未修)。 记录:`docs/superpowers/plans/2026-09-18-bool-signature-alignment.md`。 判据:check/bootstrap-tests/selfhost-tests/suite 四 job 本地全绿 · `CI_JOB_NAME=check` 的 `^error[` = 0 · 台账 68/bool 0 · selftest 双档逐字节同基线 · 突变自证红得特异。
dslsdzc
force-pushed
the
feature/b8-bool-sig
branch
from
September 18, 2026 12:21
cf971c4 to
48dd2c0
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
摘要(批 8 · bool←int 静默面第一刀)
自测/桥接的计数惯用式
fails = fails + ts_check(name, <谓词>, 1):ts_check形参声明int,而第二实参本就是 bool 表达式 ⇒ 靠 bool 隐式当 int(0/1) 参与
!=而「恰好正确」。S1P 台账把这类点读作形参 int ← 实参 bool(p_ti=0 / a_ti=2)。它不是错值,是靠隐式转换活着的接缝:收口后(bool 不再当 int)这批点会整片翻面,而失效信号是「自测数不准」而非编译错误 ⇒ 静默类,故先收。
改法:新增签名 helper
ts_check_b(name, got: bool, want: bool) -> int(type_selftest.cr)与ps_check_b(purity_selftest.cr),返回 int 以保持fails = fails + …惯用式不变;171 处按「第二实参为括号包裹的 bool 表达式」逐处改写(type 166 + purity 5)。不引入新语法,与 2(a) 内置批无关。
台账(oracle = 被修对象自身输出,不是文本扫描)
CORE_S1P=1 ./build/corec check src/compiler/main.cr | grep -E '^991[78] '0←0+ 22 点2←3,归 S2 路线 1 单独批)逐处留痕
docs/superpowers/plans/2026-09-18-bool171-sites.tsv:171 行(file/line/helper/case-name/第二实参/第三实参),案名去重后仍 171(无重复无遗漏),数据行
sha256 = 6dfee7aa93cdb7e5664da60e89fc515adb40654ed13b042b3ad7efa7b8366e10;第三实参
true170 处 ·false1 处(负断言iface.compare_is_live,改前形..., 0),语义逐字对齐)。判据
selftest-types421 行(415/415,rc=0)·selftest-purity28 行(26/26,rc=0)与改前基线 逐字节相同(
cmp无差异)。⚠ 取数陷阱已留痕:首轮比较因 fish noclobber 未真跑(重定向失败 ⇒ 比的是旧文件 ⇒ 假 IDENTICAL),
改
>|并核 rc/行数后重跑才有效。t1.var_seq_elem_invariant)⇒ 台账 69 · bool 1(含源行片段
@@ tt_atom(AK_SEQUENCE, -1, tt_cons(⇒ 读数活着);同突变态跑套件 ⇒ 恰 1 项红(
selfsource_bool_bucket_zero),其余全绿 ⇒ 检测特异。selfhost-tests挂点,tests/selfhost/test_s1p_liveness.py):HIT形状(含可选@@后缀 + 行首锚定 + 缺字段负例)——防「格式漂了 ⇒ 0 命中 ⇒ 探针假死」(本档在 CI 上正是这样红过一次);bool 桶=0与「打点没装」不可区分),再断言 bool 桶为 0。check(^error[= 0)·bootstrap-tests·selfhost-tests·suite均 rc=0;ELF canary 5/5 PASS(
f1137275…/28854等锁定值未动 ⇒ 发射面零泄漏)。版本位
不动
CIR_CACHE_VER:无「已接受程序 IR 变化」(只改编译器自身两个自测文件的调用形态 + 多一个 helper);两文件自身 AST 变 ⇒ 其
.cir条目 miss 重建,其余条目语义等价 ⇒ 命中无害,身份闸仍兜底。落纸事实(口径边界)
f(3)零打点);METHOD_GAP腿钉住:s.m(b)异型 0 打点;该不可达分支不得当死码删);docs/superpowers/plans/2026-09-18-bool-signature-alignment.md⚠ 堆叠顺序
本分支的 base =
db649d17(#127 的头)。请先合 #127,再合本 PR(#127 未合时本 PR 的 diff 会一并显示 #127 的内容)。