diff --git a/CURRENT_TASK.md b/CURRENT_TASK.md index 9803f3d1..294e321e 100644 --- a/CURRENT_TASK.md +++ b/CURRENT_TASK.md @@ -33,11 +33,11 @@ | ControlForm 構造生成 | ✅ 正常動作 | header/body/latch/exit ブロック | | PHI 命令生成 | ✅ 正常動作 | 分岐・ループでの値合流 | | StringBox メソッド | ✅ 正常動作 | length, substring, lastIndexOf | -| ConsoleBox.println | ❌ エラー | メソッド解決失敗(Phase 122+ 課題) | +| ConsoleBox.println | ✅ **Phase 122で解消** | println → log に正規化 | **統計**: -- ✅ **完全成功**: 2/3 プログラム -- ⚠️ **既知の問題**: 1/3(ConsoleBox.println - Phase 122+ で修正予定) +- ✅ **完全成功**: 2/3 プログラム(Phase 120 時点) +- ✅ **Phase 122 で 3/3 達成**: ConsoleBox.println 問題解消 - 📄 **作成ドキュメント**: 3 ファイル - 🧪 **スモークテスト**: 統合完了(6 秒で自動実行) @@ -177,7 +177,80 @@ Phase 122+: 実装(段階的統合) ### 🚀 次のステップ -**Phase 122**: hako_check 環境変数で JoinIR 選択可能に(実装開始) +**Phase 122**: ConsoleBox.println / log 統一(完了)✅ + +--- + +## 🎯 Phase 122: ConsoleBox.println / log 統一(完了)✅ 2025-12-04 + +### 📋 実装内容 + +**目的**: Phase 120 で発見された ConsoleBox.println エラーを根本解決 + +**問題**: esc_dirname_smoke.hako が selfhost Stage-3 + JoinIR Strict 経路で失敗 +- エラーメッセージ: `Unknown method 'println' on ConsoleBox` + +**解決策**: TypeRegistry / VM Method Dispatch レベルで println → log に正規化 + +### 📄 実装詳細 + +| 実装箇所 | ファイル | 変更内容 | +|---------|---------|---------| +| **TypeRegistry** | `src/runtime/type_registry.rs` | `CONSOLE_METHODS` に `println` (slot 400) 追加 | +| **ConsoleBox** | `src/boxes/console_box.rs` | `println()` メソッド追加(log への委譲) | +| **VM Dispatch** | `src/backend/mir_interpreter/handlers/calls/method.rs` | ConsoleBox 専用ハンドラ追加 | +| **Plugin設定** | `nyash.toml` | `println` (method_id 2) 追加 | + +### ✅ テスト結果 + +**Phase 120 で失敗していたケース**: +- ❌ **Phase 120**: esc_dirname_smoke.hako → `Unknown method 'println' on ConsoleBox` +- ✅ **Phase 122**: esc_dirname_smoke.hako → **実行成功** + +**出力確認**: +``` +[Console LOG] +[Console LOG] dir1/dir2 +``` + +**Phase 120 ベースライン更新**: +- ✅ 完全成功: **3/3 プログラム**(Phase 120 時点: 2/3) +- ✅ ConsoleBox.println 問題完全解消 + +### 🏆 Phase 122 の価値 + +**Alias First 原則の確立**: +``` +ユーザーコード: ConsoleBox.println("...") + ↓ +VM TypeRegistry: println → slot 400(log と同じ) + ↓ +ConsoleBox 実装: log の実装が実行される + ↓ +出力: 標準出力にメッセージ表示 +``` + +**正規化ポイントの一元化**: +- **TypeRegistry で管理**: VM レベルで alias を一元管理 +- **MirBuilder 不関与**: 特別扱いなし、自然な設計 +- **全経路統一**: JSON v0 / selfhost / 通常VM すべてで一貫 + +**Phase 120 連携**: +- Phase 120: selfhost 経路ベースライン確立 → **問題発見** +- Phase 122: TypeRegistry レベルで根本解決 → **ベースライン改善** + +### 📄 ドキュメント更新 + +| ドキュメント | 更新内容 | +|-------------|---------| +| `phase122_consolebox_println_unification.md` | 設計・実装・テスト結果の完全記録 | +| `hako_logging_design.md` | ConsoleBox 使い方ガイド追加 | +| `logging_policy.md` | Phase 122 ガイドライン・正規化ルール追加 | +| `core_boxes_design.md` | Section 18: Phase 122 実装記録追加 | + +### 🚀 次のステップ + +**Phase 123**: hako_check 環境変数で JoinIR 選択可能に(予定) ---