Skip to content

docs(批8 只读侦察): bi_add 内建表侦察(22 条分类 · 爆炸半径 · 4 处反预期 + fiber_init 潜伏碰撞) - #137

Merged
dslsdzc merged 1 commit into
developfrom
feature/b8-builtin-table-recon
Sep 18, 2026
Merged

dslsdzc merged 1 commit into
developfrom
feature/b8-builtin-table-recon

Conversation

@dslsdzc

@dslsdzc dslsdzc commented Sep 18, 2026

Copy link
Copy Markdown
Owner

本 PR = bi_add 内建表只读侦察报告(新增 1 档 · 150 行 · 零源码改动)

docs/superpowers/specs/2026-09-19-builtin-table-recon.md。基线 develop@origin = 09f253b8;
取数一律 jj --ignore-working-copy file show -r develop@origin(先落 /tmp/dev 再 grep,未 grep 工作副本)。
本次侦察零构建、零 S1P、零探针 —— 文件内已写明「取证(读实现/注释/调用点推出)≠ 实测」。

交付三样

  1. ① 22 条逐条分类表(每条带实现注释或调用点符号锚)⇒ 裸字边界 20 · 有类型 2(load_str_ptr、store_str_ptr)· 待定 0。
  2. ② 参数型列的爆炸半径:改动面 22 处(最小 2 处)· 2 条同索引平行数组 · 三处消费者全按名扫描 ⇒ 加列不动编号(好消息)· ⚠ 走「合成 FuncInfo」会为每个未遮蔽内建建 SYM_FN ⇒ 符号编号变 ⇒ .ccr SYM 段字节面可能变 ⇒ canary 重锁面。
  3. ③ 可行性结论 + ⑤「与预期不符的实测」(4 处,见下)。

4 处反预期(本批最值钱处)

  • (a) 类型信息在返回面,不在参数面:alloc 的 string 是返回型、其实参 size 是裸字;sched_go 的「函数值」属于遮蔽它的 .cr 函数。⇒ team-lead 先前「『有类型』那族该补参数型(alloc → string、sched_go…)」一句已在文件内引原文并标「已作废」(其来源为转述未核验的 b8-e1 举例)。
  • (b) 6 条被 .cr 真定义遮蔽(r64/w32/w64/_dyncpy/fiber_init/sched_go,各带定义处)⇒ 口径必须写成「未被 .cr 遮蔽的内建条目」,不得写「22 个 callee 零覆盖」。
  • (d) sched_call_0..4 零 .cr 调用点(仅后端发射/注册)⇒ 无保护对象。
  • (e) 「22」= 这张表的口径 ≠「内建」的口径(str_len 是普通 .cr 函数,不在表里)⇒ 不得写「22 个内建」。

潜伏缺陷一节(今日不可达 · 不得写成现网缺陷)

fiber_init 名字碰撞:rt.s 2 参 vs src/stdlib/scheduler.cr 0 参,goroutine.cr 以 2 参调用;
全仓无 import scheduler(只有 import sched)⇒ 当前不可达。可达后果 = 0 参定义遮蔽 2 参内建 +
实参个数当前不校验 ⇒ fiber 栈永不初始化、sp 拿到 unit(静默错行为)。含建议的判据/钉子方向。

裁决记录(文件 §8)

取 (乙)「明确登记『内建族参数面免检』这个契约」——按本仓口径 有契约 = 有意设计(20/22 条实参语义即裸字/字节/地址/下标)。
否 (甲)「给内建合成 FuncInfo」——主因 = 上面那条 SYM 段/canary 面(不是工作量)。

转办(本 PR 不含 TODO 改动)

TODO 落条归 b8-e1(避免同档双写):-5(内建回退覆盖洞,口径按 (b) 改写)· -6(fiber_init 碰撞,须写明「潜伏、今天不可达」)。

边界

本文件只出分类与影响面,不含改法;「22 条」全表已在 §1 内,引用时请连带 §6 的口径限定。

【性质】只读产出:**本次侦察唯一新增的文件**(150 行),未改任何其它档;全程零构建、零 S1P、零探针。
【基线】develop@origin = 09f253b;取数一律 `jj --ignore-working-copy file show -r develop@origin`(先落 /tmp/dev 再 grep,未 grep 工作副本)。

【结论】22 条分类 = **裸字边界 20 / 有类型 2(load_str_ptr · store_str_ptr)/ 待定 0**,
每条带实现注释或调用点取证(**写明「取证」而非「实测」**)。

【爆炸半径】改动面 22 处(最小 2 处);2 条同索引平行数组;**三处消费者全按名扫描 ⇒ 加列不动编号**(好消息);
⚠ **走「合成 FuncInfo」会为每个未遮蔽内建建 SYM_FN ⇒ 符号编号变 ⇒ .ccr SYM 段字节面可能变 ⇒ canary 重锁面**
(此条 = team-lead 否 (甲) 的主因)。

【4 处反预期(本批最值钱处)】
(a) **类型信息在返回面不在参数面**——`alloc` 的 string 是返回型、其实参 size 是裸字;`sched_go` 的函数值属遮蔽它的 .cr 函数
    ⇒ team-lead 原「有类型那族该补参数型」一句**已在文件内引原文标「已作废」**(其来源是转述未核验的举例)。
(b) **6 条被 .cr 真定义遮蔽**(r64/w32/w64/_dyncpy/fiber_init/sched_go,各带定义处)⇒ 口径必须写成
    「**未被 .cr 遮蔽的内建条目**」,不得写「22 个 callee 零覆盖」。
(d) `sched_call_0..4` **零 .cr 调用点**(仅后端发射/注册)⇒ 无保护对象。
(e) 「22」= **这张表**的口径 ≠「内建」的口径(`str_len` 是普通 .cr 函数,不在表里)⇒ 不得写「22 个内建」。

【潜伏缺陷(今日不可达,**不得写成现网缺陷**)】`fiber_init` 名字碰撞:rt.s 2 参 vs `stdlib/scheduler.cr` **0 参**,
`goroutine.cr` 以 2 参调用;全仓无 `import scheduler`(只有 `import sched`)⇒ 当前不可达;
可达后果 = 0 参定义遮蔽 2 参内建 + 实参个数当前不校验 ⇒ **fiber 栈永不初始化、sp 拿到 unit**(静默错行为)。

【裁决记录】取 (乙)「登记内建族参数面免检」= 有契约、有意设计;否 (甲)(合成 FuncInfo)主因 = 上面那条 SYM 段/canary 面。
【转办】TODO 落条归 `b8-e1`:`-5`(内建回退覆盖洞,口径按 (b) 改写)· `-6`(fiber_init 碰撞,写明潜伏);本文件不落 TODO。
@dslsdzc
dslsdzc merged commit c255130 into develop Sep 18, 2026
4 checks passed
@dslsdzc
dslsdzc deleted the feature/b8-builtin-table-recon branch September 18, 2026 19:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant