docs: update Phase104 status and JoinIR map
This commit is contained in:
@ -6,6 +6,7 @@
|
||||
- read_digits_from 形の `loop(true)` を Pattern2 で受理(loop var 抽出 + break cond 正規化)
|
||||
- fixture: `apps/tests/phase104_read_digits_loop_true_min.hako`(expected: `2`, `1`)
|
||||
- smoke: `tools/smokes/v2/profiles/integration/apps/phase104_read_digits_vm.sh` / `tools/smokes/v2/profiles/integration/apps/phase104_read_digits_llvm_exe.sh`
|
||||
- P2: json_cur 由来の回帰面を追加(fixture+VM/LLVM EXE smoke)
|
||||
|
||||
## 2025-12-17:Phase 103 P0 完了 ✅
|
||||
|
||||
|
||||
@ -10,9 +10,9 @@ Related:
|
||||
|
||||
- **real-app loop regression の横展開(VM + LLVM EXE)**
|
||||
- ねらい: 実コード由来ループを 1 本ずつ最小抽出して fixture/smoke で固定する(段階投入)。
|
||||
- 現状: Phase 102(read_quoted)まで固定済み。
|
||||
- 次候補: `parse_object` / `parse_array` の key/value ループ、read_digits 系。
|
||||
- 入口: `docs/development/current/main/phases/phase-102/README.md`
|
||||
- 現状: Phase 104(read_digits / json_cur 由来)まで固定済み。
|
||||
- 次候補: `apps/libs/json_cur.hako` の `find_balanced_array_end` / `find_balanced_object_end`(depth scan + nested if)。
|
||||
- 入口: `docs/development/current/main/phases/phase-104/README.md`
|
||||
|
||||
- **P5b “完全E2E”**(escape skip の実ループを end-to-end で固定)
|
||||
- 現状: Phase 94 で VM E2E まで固定済み。次は selfhost 実コード(`apps/selfhost-vm/json_loader.hako`)へ横展開して回帰を減らす。
|
||||
@ -24,10 +24,6 @@ Related:
|
||||
|
||||
## 中期(ループ在庫の残り)
|
||||
|
||||
- **loop(true) + break-only(digit scan など)**
|
||||
- ねらい: bounded ではない実ループを段階的に飲み込む(fixture + shape guard + Fail-Fast)。
|
||||
- 方針: “新パターン増殖”よりも Pattern5 系(infinite loop family)として扱う設計を先に固める。
|
||||
|
||||
- **P5(guard-bounded)**: 大型ループを “小粒度” に割ってから取り込む(分割 or 新契約)
|
||||
- **P6(nested loops)**: capability guard で Fail-Fast 維持しつつ、解禁時の契約を先に固定
|
||||
|
||||
|
||||
@ -60,9 +60,9 @@ flowchart LR
|
||||
|
||||
| 領域 | 役割(何を決めるか) | 主な入口/箱(SSOT寄り) | 主な出力 | Fail-Fast(典型) |
|
||||
|---|---|---|---|---|
|
||||
| Pattern検出 | ループ形を分類し、どの lowerer に渡すか決める | [`src/mir/builder/control_flow/joinir/patterns/router.rs`](../../../../../src/mir/builder/control_flow/joinir/patterns/router.rs), [`src/mir/builder/control_flow/joinir/patterns/ast_feature_extractor.rs`](../../../../../src/mir/builder/control_flow/joinir/patterns/ast_feature_extractor.rs), [`src/mir/loop_pattern_detection/mod.rs`](../../../../../src/mir/loop_pattern_detection/mod.rs) | `LoopPatternKind` / Pattern 選択 | 「分類不能」→ 明示的に Err(サイレントな非JoinIR退避は禁止) |
|
||||
| Pattern検出 | ループ形を分類し、どの lowerer に渡すか決める | [`src/mir/builder/control_flow/joinir/patterns/router.rs`](../../../../../src/mir/builder/control_flow/joinir/patterns/router.rs), [`src/mir/builder/control_flow/joinir/patterns/ast_feature_extractor.rs`](../../../../../src/mir/builder/control_flow/joinir/patterns/ast_feature_extractor.rs), [`src/mir/builder/control_flow/joinir/patterns/pattern2_inputs_facts_box.rs`](../../../../../src/mir/builder/control_flow/joinir/patterns/pattern2_inputs_facts_box.rs), [`src/mir/builder/control_flow/joinir/patterns/policies/`](../../../../../src/mir/builder/control_flow/joinir/patterns/policies/), [`src/mir/loop_pattern_detection/mod.rs`](../../../../../src/mir/loop_pattern_detection/mod.rs) | `LoopPatternKind` / Pattern 選択 | 「分類不能」→ 明示的に Err(サイレントな非JoinIR退避は禁止) |
|
||||
| shape guard | 「この shape なら lower/merge 契約が成立する」を保証する | [`src/mir/join_ir/normalized/shape_guard.rs`](../../../../../src/mir/join_ir/normalized/shape_guard.rs), `src/mir/builder/control_flow/joinir/patterns/*_validator.rs` | shape OK / 詳細診断 | shape 不一致を握りつぶさず Err |
|
||||
| lowering | JoinIR(Structured/Normalized)を生成する | [`src/mir/join_ir/lowering/mod.rs`](../../../../../src/mir/join_ir/lowering/mod.rs), `src/mir/builder/control_flow/joinir/patterns/pattern*_*.rs` | `JoinModule` | 未対応の構造は `error_tags::freeze(...)` 等で Err |
|
||||
| lowering | JoinIR(Structured/Normalized)を生成する | [`src/mir/join_ir/lowering/mod.rs`](../../../../../src/mir/join_ir/lowering/mod.rs), [`src/mir/builder/control_flow/joinir/patterns/pattern2_lowering_orchestrator.rs`](../../../../../src/mir/builder/control_flow/joinir/patterns/pattern2_lowering_orchestrator.rs), `src/mir/builder/control_flow/joinir/patterns/pattern*_*.rs` | `JoinModule` | 未対応の構造は `error_tags::freeze(...)` 等で Err |
|
||||
| merge | JoinIR→MIR 変換後、ホスト関数に統合する | [`src/mir/builder/control_flow/joinir/patterns/conversion_pipeline.rs`](../../../../../src/mir/builder/control_flow/joinir/patterns/conversion_pipeline.rs), [`src/mir/builder/control_flow/joinir/merge/mod.rs`](../../../../../src/mir/builder/control_flow/joinir/merge/mod.rs) | ホスト MIR のブロック/ValueId 更新 | ValueId 競合、ExitLine 未接続、PHI 破綻を Err |
|
||||
| ExitMeta | 「出口でどの carrier をどの host slot に戻すか」のメタ | [`src/mir/join_ir/lowering/carrier_info.rs`](../../../../../src/mir/join_ir/lowering/carrier_info.rs), [`src/mir/builder/control_flow/joinir/merge/exit_line/meta_collector.rs`](../../../../../src/mir/builder/control_flow/joinir/merge/exit_line/meta_collector.rs) | `ExitMeta` / `exit_bindings` | carrier 不整合(不足/過剰)を Err |
|
||||
| CarrierInit | carrier 初期化の SSOT(FromHost/Const/LoopLocal) | [`src/mir/builder/control_flow/joinir/merge/carrier_init_builder.rs`](../../../../../src/mir/builder/control_flow/joinir/merge/carrier_init_builder.rs), [`src/mir/join_ir/lowering/carrier_info.rs`](../../../../../src/mir/join_ir/lowering/carrier_info.rs) | 初期値 `ValueId` | 初期化経路の分岐が散らばらない(SSOT を使う) |
|
||||
@ -187,6 +187,15 @@ Box を新規実装・変更した際は以下を必ず確認:
|
||||
|
||||
---
|
||||
|
||||
## Smoke(LLVM EXE)SSOT(integration)
|
||||
|
||||
LLVM EXE の integration smoke は、原則として共通ヘルパーに寄せる(重複禁止 / SKIP 規約の統一)。
|
||||
|
||||
- SSOT helper: `tools/smokes/v2/lib/llvm_exe_runner.sh`
|
||||
- LLVM 前提チェック(`llvm-config-18` / `llvmlite` / `--backend llvm`)
|
||||
- 必須プラグインの dlopen gating + 必要時だけ `tools/plugins/build-all.sh`
|
||||
- build → run → 数値行だけ抽出して比較(デバッグログ混入耐性)
|
||||
|
||||
## スコープ解決の SSOT(Pinned Read‑Only Captures)
|
||||
|
||||
JoinIR lowering では「ループ内で参照される値」を次の層で解決する(探索順 SSOT):
|
||||
|
||||
Reference in New Issue
Block a user