docs: Phase 100 rollout plan (Pinned then mutable carrier)

This commit is contained in:
nyash-codex
2025-12-17 05:18:09 +09:00
parent 8ab95666c8
commit 692d44da62
3 changed files with 14 additions and 0 deletions

View File

@ -9,6 +9,7 @@
Next設計メモ:
- Phase 100: Pinned ReadOnly Capturesループ外 local を loop 内 receiver として解決): `docs/development/current/main/phases/phase-100/README.md`
- 段階投入: P1=readonlyPinned→ P2=mutable は LoopStatecarrier/env
## 20251215Phase 132 完了 ✅

View File

@ -11,6 +11,10 @@ Related:
- **P5b “完全E2E”**escape skip の実ループを end-to-end で固定)
- 現状: Phase 94 で VM E2E まで固定済み。次は selfhost 実コード(`apps/selfhost-vm/json_loader.hako`)へ横展開して回帰を減らす。
- 入口: `docs/development/current/main/phases/phase-94/README.md`
- **Pinned ReadOnly CapturesPhase 100**
- ねらい: loop 外 local動的式でも可を loop 内 receiver として解決できるようにする(`receiver not found` を潰す)。
- 段階投入: P1=readonlyPinned→ P2=mutable は LoopStatecarrier/envへ昇格。
- 入口: `docs/development/current/main/phases/phase-100/README.md`
- **制御の再帰合成docs-only → dev-only段階投入**
- ねらい: `loop/if` ネストの “構造” を SSOTControlTree/StepTreeで表せるようにする
- 注意: canonicalizer は観測/構造SSOTまでValueId/PHI配線は Normalized 側へ)

View File

@ -33,3 +33,12 @@ loop(i < n) {
- Phase 100 は「ループ外の値が loop 内で見えない」問題capture/wiringを解く。
- Loop Canonicalizer は「ループ内の不変式を外に出す」AST 変換であり、別ユースケース。
## 予定(段階投入)
この Phase は「自由度を上げるほどバグが出やすい領域」なので、段階投入で進める。
- **P1readonly**: ループ外 local を `Pinned` として `CapturedEnv` に取り込み、receiver 解決を通す。
- FailFast: loop body 内で再代入される変数は pinned 禁止(理由付き)
- **P2mutable**: loop body 内で再代入される外側変数は `Pinned` では扱わず、LoopStatecarrier/envに昇格して運ぶ。
- 初期は “更新形を限定” して shape guard を作り、未対応は FailFast曖昧に通さない
- **P3hoist**: ループ内の不変式の巻き上げは Loop Canonicalizer 側で扱う(別ユースケースとして分離)