diff --git a/docs/development/roadmap/phases/phase-18/README.md b/docs/development/roadmap/phases/phase-18/README.md new file mode 100644 index 00000000..9da55f98 --- /dev/null +++ b/docs/development/roadmap/phases/phase-18/README.md @@ -0,0 +1,39 @@ +# Phase 18: LifeBox 原則と LoopForm 設計(文書化+最小インタフェース) + +目的(Why) +- 「全てはループ」の統一観に基づき、スコープ/関数/例外/Box を Loop+Signal で語る設計を文書として固定。 +- 実装は最小(インタフェースの骨組み)。Core‑13 の実装は維持しつつ、LoopForm はまだ“思想IR”として扱う。 + +コア概念(最小) +- LifeBox 原則: Box=Loopのインスタンス。`birth → (next)* → signal → fini`。通常Boxは退化(next省略)。 +- ScopeLoop(ループしないループ): 反復1回/Next禁止/単一入出口。`end` 直前に LIFO で fini を直列化。 +- LoopSignal: `{ Next, Break, Return, Err, (必要なら Yield) }`。例外は値+Signal で運ぶ。 + +LoopForm(思想IR) +- スコープ: `loop.begin → 本体 → loop.signal(Break|Return) → loop.end` +- 例外/try: 本体が `Result` を返し、`is_err` 分岐→ catch/finally 集約。finally は `end` 直前に一括。 +- 状態束ね: 局所変数は state tuple(ループ状態)に束ね、`end` で一括 fini。 + +Core‑13 への写像(退化) +- ScopeLoop → 既存の `Jump/Branch/Phi`。追加の call/alloc を発生させない(ゼロコスト退化)。 +- 例外統一 → `Result` + `TypeOp(is_err)` + `Branch` + `Phi`。`?` は Err→Return の定型展開。 +- Box終了 → 合流ブロックで `fini` を LIFO 直列(検証器で一回性/順序確認)。 + +決定トグル(提案) +- ASTは単一・IRで分岐: はい(Phase‑17に準拠) +- ScopeLoopを正式モデル化: はい(名称は LifeBox に統合。ScopeLoopは表現上の別名) +- 例外は Result+分岐で統一: はい +- ゼロコスト条件の監視: Phase‑19 でCI導入(ここでは規約と受入れ基準を明記) + +受入れ基準(Docs) +- LifeBox/ScopeLoop/LoopSignal の定義が本文にあり、Core‑13 への退化ルールが列挙されている。 +- 検証規約(単一入出口/Next禁止/LIFO fini/追加call禁止)が箇条書きで提示されている。 +- Q&A に“なぜLoop化するのか/ゼロコスト条件は何か/例外統一の利点”がまとまっている。 + +アウトオブスコープ(Phase‑18) +- LoopForm の実装(変換/実行):Phase‑19 以降 +- 詳細トレースAPI:Phase‑19 以降 + +次フェーズへの受け渡し +- Phase‑19: LoopForm ⇄ Core‑13 の往復 PoC、可逆性テストと禁則CI、必要最小の LoopBox 実装(feature off 既定)。 + diff --git a/docs/development/roadmap/phases/phase-19/README.md b/docs/development/roadmap/phases/phase-19/README.md new file mode 100644 index 00000000..7b3000f6 --- /dev/null +++ b/docs/development/roadmap/phases/phase-19/README.md @@ -0,0 +1,34 @@ +# Phase 19: LoopForm ⇄ Core‑13 PoC と検証・ゼロコストCI + +目的(Why) +- Phase‑18 の設計を具体化し、限定範囲で LoopForm ⇄ Core‑13 の往復を成立させる。 +- 可逆性と“ゼロコスト退化”の検証を自動化(CI)し、設計の健全性を継続的に保証する。 + +やること(PoC) +- 変換: `lower_loop(ast) -> LoopModule`(限定サブセット) +- 実行: `interp-loop`(限定サブセット) +- ラウンドトリップ: `LoopForm -> Core‑13` と `Core‑13 -> LoopForm`(退化ScopeLoopは等価) + +検証と禁則(CI) +- 可逆性テスト: 値・分岐・fini順序・効果が一致。 +- ゼロコスト条件: 退化ScopeLoopの Core‑13 で “余計な `ExternCall/alloc` がゼロ”。 + - 手順: IR差分/統計で call/alloc 新規発生が無いことをチェック。 + - 将来: AOT/ASM差分の軽量比較(変換に伴う命令増なし)。 + +LoopBox(最小・非既定) +- 目的: 第一級ループとして外部へ渡す/中断再開/反射トレース時のみ具現化。 +- API: `birth/next/signal/fini` + `TypeOp is_signal_kind` + unwrap_*。 +- 既定: feature off(本体は退化ScopeLoopで十分)。 + +段階的導入 +- M1: 退化ScopeLoopの往復可逆性テスト + ゼロコストCI(IR差分) +- M2: LoopBox最小実装 + verify(birth→(next)*→fini 一回性) +- M3: NDJSON拡張(trace/ping/subscribe)と観測ポイント + +アウトオブスコープ(Phase‑19) +- 最適化・高度なスケジューリング(Phase‑20+) + +備考 +- 例外は Result+分岐で統一(引き続き) +- ASTは単一・IR分岐のまま維持 +