Skip to content

docs(批8 (甲) 刀4): 路线图 v10——§8 S1 改判扩到两侧同批 + §7.3 连锁①裁定(b)落纸(规模6→≥60留痕) + §7.1 ABI/合成面注 + 协作面纪律(按 #160 术语重做) - #154

Merged
dslsdzc merged 1 commit into
developfrom
feature/b8-e1-blade4-v10
Sep 23, 2026

Conversation

@dslsdzc

@dslsdzc dslsdzc commented Sep 19, 2026 •

Copy link
Copy Markdown
Owner

本 PR = 路线图 v10(纸面,零代码、零行为)

⚠ 重做说明(2026-09-23):本草稿原以 2026-09-19 的 develop(38e6c992)为基线,与后来的术语批(#160,124 文件 / 1944 行 1:1)冲突——原样合入会把该批的术语替换倒回去。故按当前 develop(7cf724f6)重做:内容逐条保留,术语按 #160 的对照转换(口径→约定 · 台账→清单 · 两向钉子→正反两条断言 · 反向钉→反向断言 · 哨兵族→标记值族)。

逐行核对:新档与旧 v10 的差异 = 36 增 / 36 删,逐行只有词不同(没有内容丢失或新增);改动规模仍 = +53 / −18(含刻意保留的旧文,见下)。


一、§8 S1 约定修正(lead 裁):一处 → 两侧同批

&x 的定型在 checker 与 ir_gen 两侧的同批改判,不是 checker.cr:2966 一处。

# 站点 改动
1 checker.cr:2966 alloc_type(TYP_PTR, inner, 0) → alloc_type(TYP_REF, inner, is_mut)
2 ir_gen.cr:1858(v9 原文未列) new_ir_var("ref", alloc_type(TYP_PTR, pti, 0)) → alloc_type(TYP_REF, pti, ast_int_val(node))

为什么:checker 只决定语义视图;region_check / provenance_verify / ptr_analysis / 后端读的是 irv_type()。只改一处 ⇒ 三道安全门看到的仍是 TYP_PTR ⇒ S6 的 (a) 扩法对着「永不出现的 kind」生效 = 静默空转——正是「正向断言必须验到「检查真的触发」」所防的形态,而它出现在本计划自己的 S1 原文里。

并附 S1 实测(✅ 本体全过):--dump-types 现在 kind 3(TYP_REF) 且 extra 0 与 extra 1 两行并存(&x 与 &mut x 可区分)· 清单 2 → 0 · check src/compiler rc=0 / 0 诊断 · 自举 SUCCESS · 行为影响面恰 1 档 1 条(ptr_ref_first 的 TF07 = §5.3 已确证的 S2 靶心)。

并记 CI 红及其归因:selfhost-tests ⇒ selftest-types 413/415,恰 2 例(ops.infer_ptr_add_int / ops.infer_ptr_diff)——逐行读过,落在 checker.cr:2903/2906/2910 的算术门(仍只认 TYP_PTR)= S3 本体 ⇒ S1 与 S3 是同一刀的先后半个。

并记一处待裁:ir_gen.cr:1826 的 &arr[i](IR_ADDR_INDEX)仍是 TYP_PTR ⇒ 现态两种取址形式类型不同;实施时未擅自扩(裁定原文只写 &x)⇒ 待裁 (甲) 本批一并改 / (乙) 独立条目。


二、§7.3 连锁 ① 裁定落纸:候选 (b)

  • 裁定:@ptr_of / @str_of 改到 Buf 侧 ⇒ string 退回真字符串(彻底)。
  • 规模更正(旧值留痕,不静默改):原写「6 处」「63 处先例」⇒ 实测 ≥60 处(interp.cr 22 · cli.cr 23 · parser.cr 7 · ld.cr 6 · checker.cr 1 · test 1,其中三档是生产代码)⇒ 明写「原写 6 处是低估」。
  • 79e0395c 那 6 处须在新语义下重做;保留当事人那句「当时按 2(a) 现行契约做,属当时正确」(它把「当时的正确」与「现在的过时」分开)。
  • 连锁 ② 随之定:取第二种后果(重做)。
  • 另记:编译器自身 149 个 string 全局是裸缓冲 ⇒ 「拆 string」在自源里的主战场是 globals.cr 的表指针 ⇒ 会动编译器自身 ⇒ 牵连 .ccr / canary 面(与重锁同批)。

三、§7.1 两条加注(plan-optdex 侦察)——「改」的动作不在调用点

函数 实读 含义
goroutine.cr::g_free Core 侧调用点 = 0(只被 rt.s 汇编调用) 动作在 ABI 面,不在调用点
sched.cr::sched_go Core 侧调用点 = 0(只由 ir_gen 合成发射,名字 intern 后发射) 动作在合成面

⇒ 不写清,实施者会去找根本不存在的调用点。

新增小节:Chan<T> 与 Future<T> 必须同批、同一组调用点——chan_recv 的 12 个调用点里 5 个来自 chan_make、7 个来自 go f(x) ⇒ 先拆一半 ⇒ 另一半悬空 ⇒ 排期上是两步不是一步。


四、§8 头注补协作面纪律(lead 那半)

编号/交叉引用在对话里是活的、在文件里是死的。
本节被删期间,lead 一路按 S1–S8 发指令而那套编号在文件里已不存在——双方都记得,所以执行得很顺。
⇒ ① 发指令侧:按编号下指令时,受令方应先确认该编号在文件里存在;② 受令侧:不存在就报,不要默默按记忆执行(沉默执行会把「文件缺节」一直藏到下游读不到东西的时候——本节藏了四轮)。


未动:checker.cr 行为(S1 在 #153)· ld.cr · 冻结链 · test_pointer_safety.py:173 · ptr_arith.cr。

…ched_go 调用点=0 · Chan/Future 同批 · §7.3 连锁①裁定(b) ≥60 · S1 已实施+CI红归因
@dslsdzc
dslsdzc force-pushed the feature/b8-e1-blade4-v10 branch from 81fbffb to a8c9013 Compare September 23, 2026 04:28
@dslsdzc dslsdzc changed the title docs(批8 (甲) 刀4): 路线图 v10——§8 S1 口径改两侧同批 + §7.3 连锁①裁定(b)落纸(规模6→≥60留痕) + §7.1 ABI/合成面注 + 协作面纪律 docs(批8 (甲) 刀4): 路线图 v10——§8 S1 改判扩到两侧同批 + §7.3 连锁①裁定(b)落纸(规模6→≥60留痕) + §7.1 ABI/合成面注 + 协作面纪律(按 #160 术语重做) Sep 23, 2026
@dslsdzc
dslsdzc merged commit 4e2e526 into develop Sep 23, 2026
4 checks passed
@dslsdzc
dslsdzc deleted the feature/b8-e1-blade4-v10 branch September 23, 2026 04:32
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