Skip to content

docs(计划): v4 语法迁移——(乙) 大爆炸 + layout 一次做完;T0 布局规格 → T1…T7;判据三代换代表 + 反向规范化对拍 - #172

Merged
dslsdzc merged 1 commit into
developfrom
feature/v4-syntax-migration-plan
Sep 23, 2026
Merged

dslsdzc merged 1 commit into
developfrom
feature/v4-syntax-migration-plan

Conversation

@dslsdzc

@dslsdzc dslsdzc commented Sep 23, 2026

Copy link
Copy Markdown
Owner

这是什么

docs/superpowers/plans/2026-09-24-v4-syntax-migration.md(1013 行 / 13 节)—— 把 Core 迁到 v4 目标语法的施工计划。

维护者已定的前提(作为前提写死,计划不重新论证):策略 = (乙) 大爆炸(不开影子语法)· layout region 不可让步、一次做完。

(乙) 的三个后果,以及每个逼出哪一节

  1. 必须原子翻转(前端一切到 v4,旧语法源立刻编不过)⇒ 前端 + 自源 43,003 行 + 语料只能同链落地。
  2. 链中间没有可构建态 ⇒ 第一个能构建的状态就是终态。逼出 §二 的定位机制。
  3. 窗口内逐字节判据显式挂起,改挂行为等价判据。

§二 判据纪律 = 本计划的第一等交付物

三代换代表(写死):代 0 采行为等价基线(76 档 rc + 诊断码集 + stdout)→ 代 1 挂起逐字节面(canary 5 值 / .ccr 四条 / rebuild.sh 3 sha / PINNED_REV)→ 代 2 重锁。并写实两个边界:corec2 == corec3 与语法无关(不被迁移削弱),但它 (a) 在 (乙) 窗口内不可跑、(b) 不在 PR 门内。

「中途坏了怎么定位」:(乙) 下按「能否构建」二分(jj bisect)无效。计划给 L1 单档 / L2 单构造 / L3 单拼接单元三层(L2 的计数表在动手前先写死,含反向对照)+ B4「反向规范化对拍」:写一个 v4→v3 的机械还原器,断言 reflow(v4) == v3 逐档逐字节相同 —— 这是**批内唯一能在零构建下判定「T4 只改形状没改语义」**的机器,配正反两条断言(正向 74 档全绿;反向故意改错一个缩进 ⇒ 当场红)。

七步顺序

T0 布局规格 → T1/T2 Python 前端(自举链第一环,不可绕)→ T3 Python 发的 Core 源(1 行改动 + 三处硬耦合)→ T4 自源改写法(机械面:{}→layout、;→换行)→ T5 自源 parser 改语义(真正实现 layout,必须晚于 T4)→ T6 其余语料(必须晚于 T5)→ T7 收尾重锁(显式归因 + 同批重锁 + 旧值留痕)。

对两份侦查报告的 6 条更正(写手实核)

# 原文 实核
1 gap.md:现行关键字「34 个」 36(它列的串本身 36 个 token,34 是算术错误)
2 mech.md:src/** struct 字面量 = 0 不是 0。全仓 32 处 / 17 档,src/ 内 2 处(src/compiler/elf.cr:45、src/stdlib/toml.cr:268)。成因 = 判别式用了 Name{field:(带冒号),而真实写法是 Name { field = value }(等号)。我(team-lead)已复核这两处
3 mech.md:T4 后 corec2==corec3 仍可跑 在 (乙) 下不成立 ⇒ T1–T5 是一个原子批。这条改写了批次结构
4 mech.md:corespec.ebnf 零花括号 11 行含 {}(EBNF 重复记号;结论仍成立,表述要写实)
5 「parity 已修」 成立(基线漂移已留痕,见下)
6 「75 档含内联 Core」 法 A(tokenize 取字符串字面量)= 68,法 B(文件含花括号)= 75。两数都对但测的不是同一件事 ⇒ 计划统一用法 A

写手新发现的两条(两份报告都没有)

  • struct 字面量的字段分隔符是「盲跳一个 token」(src/compiler/parser.cr:552-554,第二个 advance_tok() 的返回值被丢弃)⇒ = 与 : 两形今天都收。所以 T0 输入「照现行形 =」这句本身有歧义,必须二选一(计划给了两候选的改动面:选 = 改 9 档/18 处;选 : 改 8 档/14 处)。
  • src/compiler/*.cr 花括号 = 15,771(7,886 开 + 7,885 闭)—— 与我的读数独立复现一致。

⚠ 一条工作区陷阱(写手报告,我复核确认)

core-v4-ws 的 @ 的父提交是旧 develop ⇒ 该工作区里 tools/baseline/parity_run.sh 与 REBUILD.md 是 #170 之前的版本。谁若把 @ 原样提交并推到新 develop,就会静默回退 #170。 写手未动它们(铁律 #3),只报告。本 PR 只提交计划档一份(1 file changed, 1013 insertions(+))。

待维护者裁的两条 T0 输入

  1. struct 字面量的形(Type { field = value } vs Type { field: value })—— 因上面那条「盲跳」发现,两形今天都收,选哪个都不破坏既有代码。
  2. catch 收口绑定到哪个对象(§6.2 真歧义)。

本 PR 的实核与未核

…T3 拼接源 → T4 自源改写法 → T5 自源 parser → T6 语料 → T7 收尾重锁;判据三代换代表 + 反向规范化对拍(零构建下判 T4 只改形状)
@dslsdzc
dslsdzc merged commit e08df3d into develop Sep 23, 2026
4 checks passed
@dslsdzc
dslsdzc deleted the feature/v4-syntax-migration-plan branch September 23, 2026 22:14
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