diff --git a/docs/development/current/main/hako_check_design.md b/docs/development/current/main/hako_check_design.md index a4ad9153..3bbc809f 100644 --- a/docs/development/current/main/hako_check_design.md +++ b/docs/development/current/main/hako_check_design.md @@ -249,9 +249,9 @@ Phase 121 は設計と調査のみ。実装は Phase 122+ で段階的に実施 --- -## Phase 123: 実行フロー図(2パス実装完了) +## Phase 124: 実行フロー図(JoinIR 専用化完了) -### Legacy パス (NYASH_HAKO_CHECK_JOINIR=0 or unset) +### JoinIR Only パス (Phase 124 以降) ``` .hako file @@ -260,87 +260,54 @@ Tokenize / Parse (Rust Parser) ↓ AST Generation ↓ -MIR Builder (legacy if/loop lowering) - ├─ cf_if() → lower_if_form() (legacy PHI generation) - └─ cf_loop() → LoopBuilder (legacy PHI generation) +MIR Builder (JoinIR lowering for if/loop) + ├─ cf_if() → lower_if_form() (JoinIR-based PHI generation) + └─ cf_loop() → LoopBuilder (JoinIR-based PHI generation) ↓ -MIR Generation (with legacy PHI) +MIR Generation (with JoinIR PHI) ↓ VM Interpreter ↓ Execution Result ``` -### JoinIR パス (NYASH_HAKO_CHECK_JOINIR=1) - -``` -.hako file - ↓ -Tokenize / Parse (Rust Parser) - ↓ -AST Generation - ↓ -MIR Builder (with JoinIR switch check) - ├─ cf_if() → [Phase 123] Check hako_check_joinir_enabled() - │ ├─ true: try_cf_if_joinir() → [Placeholder] fallback to legacy - │ └─ false: lower_if_form() (legacy) - └─ cf_loop() → [Phase 124 予定] JoinIR Loop Lowering - ↓ -MIR Generation - ↓ -[Phase 124 予定] JoinIR Lowerer (if/loop → PHI) - ├─ IfSelectLowerer: Simple if/else → Select instruction - └─ LoopLowerer: Loop → PHI + LoopForm - ↓ -MIR (with JoinIR-generated PHI) - ↓ -VM Interpreter - ↓ -Execution Result -``` - -### Phase 123 実装状態 +### Phase 124 実装状態 **✅ 実装完了**: -- 環境変数 `NYASH_HAKO_CHECK_JOINIR` 読み取り -- `cf_if()` での分岐処理 -- フォールバック機構(プレースホルダー → レガシー) - -**📋 未実装(Phase 124 予定)**: -- `try_cf_if_joinir()` の実際の JoinIR 統合処理 -- JoinIR Lowerer の適用 -- Loop の JoinIR 統合 +- NYASH_HAKO_CHECK_JOINIR フラグ完全削除 +- MIR Builder から legacy if/loop lowering 分岐削除 +- JoinIR 一本化(Fail-Fast エラーハンドリング) +- 代表テスト 4 ケース全て JoinIR Only で PASS ### 実行時の動作確認 ```bash -# Legacy Path (デフォルト) +# JoinIR Only (デフォルト - 環境変数不要) $ ./target/release/hakorune --backend vm test.hako -[MirBuilder] cf_if() → lower_if_form() (legacy) +[MirBuilder] cf_if() → lower_if_form() (JoinIR) RC: 0 -# JoinIR Path (Phase 123 実装) -$ NYASH_HAKO_CHECK_JOINIR=1 ./target/release/hakorune --backend vm test.hako -[MirBuilder] cf_if() → try_cf_if_joinir() → fallback to lower_if_form() -RC: 0 - -# JoinIR Debug Output (Phase 123) -$ NYASH_HAKO_CHECK_JOINIR=1 NYASH_HAKO_CHECK_JOINIR_DEBUG=1 ./target/release/hakorune test.hako -[cf_if/joinir] Routing if statement through JoinIR lowering -[cf_if/joinir] JoinIR not applicable, falling back to legacy +# デバッグ出力 (環境変数は削除済み) +$ ./target/release/hakorune --backend vm test.hako +[MirBuilder] Using JoinIR lowering (legacy path removed) ``` -### 設計ノート +### アーキテクチャの進化 -**Phase 123 の焦点**: -- 環境変数による経路選択機能の実装 -- プレースホルダー実装によるフレームワーク確立 -- テスト基盤の構築 +**Phase 121**: JoinIR 統合設計確立 +**Phase 123**: 環境変数フラグで 2パス選択可能 +**Phase 124**: JoinIR 一本化 & レガシー削除 ✅ -**Phase 124 での完全実装**: -- JoinIR Lowerer の統合 -- MIR 後処理としての JoinIR 変換 -- レガシー経路からの完全移行 +### 設計原則 + +**Fail-Fast**: +- JoinIR が失敗した場合、明示的にエラーを返す +- フォールバック処理は完全削除(CLAUDE.md Fail-Fast 原則遵守) + +**JoinIR 専用化の利点**: +- コードベース簡素化(環境変数分岐削除) +- テスト対象経路の一本化 +- 保守性向上 --- diff --git a/docs/development/current/main/phase121_hako_check_joinir_design.md b/docs/development/current/main/phase121_hako_check_joinir_design.md index 59b01c46..6ac87d19 100644 --- a/docs/development/current/main/phase121_hako_check_joinir_design.md +++ b/docs/development/current/main/phase121_hako_check_joinir_design.md @@ -724,4 +724,44 @@ Phase 123 は **環境変数による経路選択機能の実装**に焦点を 3. ✅ 代表テストケース4件作成・検証完了(両経路で100% PASS) 4. ✅ ドキュメント更新完了 -Phase 124 では実際の JoinIR 統合処理を実装し、レガシー経路からの完全移行を完了する。 +--- + +## Phase 122-124 実装完了サマリー + +### Phase 123: 環境変数スイッチ導入(完了) +- NYASH_HAKO_CHECK_JOINIR で 2パス選択可能に +- プレースホルダー実装でフレームワーク確立 +- 代表テスト 4 ケース両経路で PASS + +### Phase 124: JoinIR 専用化 & レガシー削除(完了 ✅) +- NYASH_HAKO_CHECK_JOINIR を完全廃止 +- MIR Builder から legacy if/loop lowering 分岐削除 +- hako_check は JoinIR 一本化(Fail-Fast 原則) +- 環境変数なしで JoinIR 経路がデフォルト動作 + +### 最終アーキテクチャ図(Phase 124) + +``` +.hako file + ↓ +Parse & Tokenize → AST + ↓ +MIR Builder (JoinIR lowering for if/loop) + ├─ cf_if() → lower_if_form() (JoinIR) + └─ cf_loop() → LoopBuilder (JoinIR) + ↓ +MIR (SSA form with JoinIR-generated PHI) + ↓ +VM Interpreter + ↓ +Diagnostic Output +``` + +### 成果 +✅ hako_check + selfhost Stage-3 が JoinIR 統一パイプラインで動作 +✅ ドキュメント・実装・テストが JoinIR 前提に統一 +✅ 環境変数フラグ削除により実装簡素化 +✅ Fail-Fast 原則に準拠したエラーハンドリング + +### 次章予告 +次は selfhost Stage-4(高度なパターン対応)への準備を進める。