Files
hakorune/CURRENT_TASK.md

233 lines
18 KiB
Markdown
Raw Normal View History

# Current Task — JoinIR / PHI 削減スナップショット2025-11-29 時点)
> このファイルは「今どこまで終わっていて、次に何をやるか」を 1000 行以内でざっくり把握するためのスナップショットだよ。
> 過去の詳細ログは `docs/private/roadmap2/CURRENT_TASK_2025-11-29_full.md` や各 Phase の README/TASKS を見てね。
---
## 0. 現在地ざっくり
- **✅ JoinIR ラインは Phase 68 で一旦 Chapter Close**
- Phase 27-67 で JoinIR の「第1章構造 + PHI + 型ヒント SSOT」が完了。
- 4つの柱Structure / Scope / JoinIR / Type Hintsが確立。
- Trio 削除ラインPhase 70 完了を経て、wasm/Web デモラインと最適化ラインに分岐。
- 詳細: [phase-30-final-joinir-world/README.md](docs/private/roadmap2/phases/phase-30-final-joinir-world/README.md)
- **最終ゴール**
- 制御構造と PHI の意味論は **JoinIRLoopScopeShape/IfPhiContext 等の薄い箱)** に一本化する。
- 実行の SSOT は VM / LLVM ラインとし、JoinIR→MIR→VM/LLVM は「構造 SSOT → 実行 SSOT」への変換として扱う。
- 既存の PHI 箱if_phi.rs / PhiBuilderBox / conservative.rs / Trio 等は、JoinIR 側のカバレッジが十分になったところから順に削っていく。
- Stage-3 parser デフォルトON化Phase 30.1 完了): `config::env::parser_stage3_enabled()` で NYASH_FEATURES=stage3 をSSOT化し、legacy env は明示OFF専用の互換に縮退。
- JoinIR Strict 着手Phase 81: `NYASH_JOINIR_STRICT=1` で代表パスのフォールバックを禁止JoinIR失敗は即エラー。dev/trace は観測のみ継続。
- **これからPhase 69+**
- wasm/Web デモライン: JoinIR ベースの軽量デモ実装。
- 最適化ライン: JoinIR の最適化パスと LLVM/ny-llvmc 統合。
- Trio 削除ライン: 完了Phase 70、LoopScopeShape SSOT
- JoinIR Strict ラインPhase 81: 代表 If/Loop/VM ブリッジについては `NYASH_JOINIR_STRICT=1` で常に JoinIR 経路のみを通すようにし、レガシー if_phi / LoopBuilder / 旧 MIR Builder は「未対応関数専用」に縮退。
---
## 1. JoinIR 第1章完了までの道のりPhase 3367 簡潔版)
### Phase 33-62: 構造 + PHI + スコープの基盤構築 ✅ 完了
- **Phase 33-34**: IfSelect/IfMerge lowering 実装、AST→JoinIR Frontend 設計・実装If/Loop/Break/Continue
- **Phase 35-36**: PHI 箱削減 HIGH/MEDIUM537行削減: if_body_local_merge / phi_invariants / LoopSnapshotMergeBox 縮退)
- **Phase 37-40**: If 側 PHI Level 1/2設計array_ext.filter 移行、collect_assigned_vars 削除)
- **Phase 41-46**: If 側 PHI Level 3NestedIfMerge、read_quoted_from、IfMerge 拡張)
- **Phase 49-56**: JoinIR Frontend 本線統合print_tokens / filter
- **Phase 57-62**: If 側 PHI 本体削減conservative.rs 縮退、If Handler 箱化、PHI Core Cleanup
**詳細**: 各 Phase の README を参照(`docs/private/roadmap2/phases/phase-*/README.md`
---
### Phase 63-67: 型ヒントライン完全実装 ✅ 完了2025-11-30
#### Phase 63-3: JoinIR 型ヒント最小配線
- `JoinInst::Select``MergePair``type_hint: Option<MirType>` 追加
- 13ファイル更新、全 JoinIR テスト PASS
#### Phase 63-4: infer_type_from_phi 縮退設計
- 型ヒント優先+従来ロジックフォールバック仕様を docs 化
- 削除条件 5/5 を定義P1: IfSelectTest, P2: read_quoted/IfMerge, P3: Method/Box
#### Phase 63-5: infer_type_from_phi 縮退実装
- `infer_type_from_phi_with_hint()` 実装(+44行
- lifecycle.rs で呼び出し経路統一
- 削除条件達成率: 3/560%
#### Phase 63-6: P1 ケース型ヒント完全実装
- `MirInstruction::Phi``type_hint` 追加21ファイル修正
- JoinIR→MIR Bridge で型ヒント伝播実装
- P1 ケースIfSelectTest.*)で JoinIR 型ヒントのみで型決定
- 削除条件達成率: 4/580%
#### Phase 64: P2 型ヒント拡大
- P2 ケースread_quoted_from, IfMerge型ヒント実装
- `is_type_hint_target()` 箱化TypeHintPolicy 萌芽)
- 削除条件達成率: 4.5/590%
#### Phase 65: P3-A/B 型ヒント実装
- P3-A: `type_inference.rs` 新設、`JoinInst::MethodCall` に型ヒントStringBox メソッド)
- P3-B: `JoinInst::NewBox` に型ヒントBox コンストラクタ)
- 代表ケースベースで削除条件 5/5 達成
#### Phase 66: P3-C ジェネリック型推論箱化
- `generic_type_resolver.rs` 新設180行
- `TypeHintPolicy::is_p3c_target()` 追加
- ArrayBox.get / MapBox.get 等のジェネリック型推論基盤確立
#### Phase 67: P3-C 実利用への一歩
- `phase67_generic_type_resolver.rs` テスト追加3テスト全 PASS
- lifecycle.rs に P3-C 経路フック追加GenericTypeResolver 優先使用)
- A/B テストで旧経路との一致確認11 tests PASS
**技術的成果**:
- JoinIR が構造 + PHI + 型ヒントの SSOT として確立
- infer_type_from_phi は P3-C フォールバック専用に縮退
- 4つの柱Structure / Scope / JoinIR / Type Hints完成
### Phase 69: MIR 決定性 & Trio 経路の整理 ✅ 一部完了2025-11-30
- 目的: LoopSnapshotMergeBox / LoopForm 周辺の Inspector/Trio 依存を整理しつつ、MIR の predecessor 順を決定的にしてフラッキーテストを解消する。
- 実績:
- 69-1: LoopSnapshotMergeBox と Trio 経路の現状を確認し、merge_exit_with_classification が LocalScopeInspectorBox を引き回しているだけであり、情報自体は LoopScopeShape/ExitAnalysis 側に揃っていることを整理。
- 69-2: `merge_exit_with_classification` から Inspector 引数を削除し、LoopScopeShape/ExitAnalysis 経由で必要な情報を取る形に縮退(約 42 行削減)。既存の 3 テストはすべて PASS。
- 69-3: `BasicBlock.predecessors``HashSet``BTreeSet` に変更するなど、MIR の predecessor イテレーションを決定的にし、これまで非決定性でフラッキーだった 2 つのループ系テストを安定化。loopform 14/14 / merge_exit 3/3 を含む関連テストはすべて PASS。
- 未了:
- 69-5: conservative.rs の docs/ 移設も今後の小フェーズとして残しておく。
- 追加完了 (Phase 70):
- 69-4: Trio 3 箱LoopVarClassBox / LoopExitLivenessBox / LocalScopeInspectorBoxを削除し、LoopScopeShape を SSOT とする構成に移行。2025-12-01 時点でコードベース再スキャン済みで、Trio 本体ファイルおよび Trio Box 直接参照は **src/mir/** から完全に除去されていることを確認名称としての「Trio」は docs の歴史メモ内にのみ残存)。
## 2. 次の一手Phase 69+
### 直近の候補タスク
- **P3-C 拡大 / If PHI 本体削除**Phase 70+ 候補)
- GenericTypeResolver 経由で全 P3-C ケースをカバー
- `infer_type_from_phi` 本体削除と if_phi.rs 大掃除
2025-12-02 10:19:07 +09:00
- **Phase 71: SelfHosting 再ブートストラップ(初回観測完了! 2025-12-02** ✅
- `docs/private/roadmap2/phases/phase-71-selfhost-reboot/README.md` で代表パス 1 本Stage3 + JoinIR 前提)と ENV 方針を整理済み。
2025-12-02 10:19:07 +09:00
- 代表パス(確定): `NYASH_FEATURES=stage3 NYASH_USE_NY_COMPILER=1 NYASH_NY_COMPILER_EMIT_ONLY=1 NYASH_SELFHOST_KEEP_RAW=1 ./tools/selfhost/selfhost_build.sh --in apps/tests/stage1_run_min.hako --run`
- **Phase 71初回実行成果 (2025-12-02)**:
- ✅ Phase 70完了直後にPhase 71代表パス実行成功
- ✅ RAW観測レイヤ活用成功 (`logs/selfhost/stageb_20251202_101623_2665649.log` 707K)
- ✅ 根本原因特定: **SSA undef (4件)** + **dev verify (1件)** が Program JSON emit失敗を引き起こしている
- ✅ JoinIR/プラグイン初期化は **問題なし** (JoinIR経路正常動作、プラグイン成功確認)
- **SSA undef詳細 (初回観測時)**:
2025-12-02 10:19:07 +09:00
1. `ParserCommonUtilsBox.trim/1` - ValueId(272)未定義
2. `ParserBox.trim/1` - ValueId(272)未定義
3. `Main._parse_number/1` - ValueId(12)未定義
4. `ParserBox.parse_block2/2` - ValueId(440)未定義
→ Phase 71-SSA での `.hako` 側整理により、現在はいずれも解消済みSSA undef 13件→0件
- **dev verify警告 (初回観測時)**: `StageBDriverBox` NewBox直後にbirth()未呼び出し
→ StageBDriverBox が static box であることを考慮し、lifecycle.rs 側の特例で警告は解消済み。
- **完了判定基準**: 観測窓としてのPhase 71は完了。代表 selfhost パスで JSON v0 emit→VM 実行(出力 `abc`)まで通ることを確認済みで、
SSA 修正は今後 StageB 他ケースと s3/parity 系にフォーカスする。
- **詳細レポート**: `docs/development/current/main/phase71-findings-20251202.md` と Phase 71-SSA 追加レポート
- quick プロファイルでは JoinIR/VM 系は緑維持を目標としつつ、selfhost_minimal / stageb_min_emit は「SSA ラインの観測窓」として赤許容。StageB/SSA 起因の赤は Phase 71-SSA 側でハンドルする。
- **Phase 72: JoinIR dev フラグ棚卸し** ✅
- `config::env::joinir_core_enabled()` / `joinir_dev_enabled()` を追加し、Core/DevOnly/Deprecated の区分を整理。
- `NYASH_JOINIR_EXPERIMENT``HAKO_JOINIR_IF_SELECT` を含む JoinIR 関連フラグの読み書きを、
`src/config/env/joinir_dev.rs` / `src/tests/helpers/joinir_env.rs` 経由の SSOT に統一(本体コードからの `std::env` 直読みを排除)。
- docs/private/roadmap2/phases/phase-72-joinir-dev-flags/README.md に一覧表と実装状況メモを追加済み。
- **Phase 73: ENV 整理・不要フラグ削除JoinIRStage3 周辺)**
- docs/private/roadmap2/phases/phase-73-env-cleanup/README.md に Stage3 / JoinIR / その他 ENV の棚卸しと Dead/Alias/Keep の分類方針を追加
- 実コードからは `parser_stage3_enabled()` / `joinir_core_enabled()` / `joinir_dev_enabled()` 経由で判定し、legacy/env 名は Alias-only 扱いとして段階的に削除候補へ寄せていく
- Stage3 旧 ENV は tools/selfhost/hako_check + JoinIR/LoopForm/PHI テスト + Stage1/SSA 代表テストBatchCからは排除済みで、残りは dev/perf 用や一部 SSA/StageB 系テストと docs の歴史メモに限定されているPhase 7311 で現状を棚卸し済み)
- **Phase 73-7: Stage3 旧 ENV の縮退**
- tools/selfhost/hako_check から `NYASH_PARSER_STAGE3` / `HAKO_PARSER_STAGE3` を順次削除し、Stage3 gate を `NYASH_FEATURES=stage3` ベースに移行開始
- Rust tests 側の Stage3 alias は次フェーズでグループごとに `NYASH_FEATURES=stage3` へ寄せる予定
- **Phase 73-8: Rust tests BatchA の Stage3 ENV 縮退**
- JoinIR/PHI 周辺の代表テストmir_loopform_* / mir_joinir_* の一部)を対象に、`NYASH_PARSER_STAGE3` / `HAKO_PARSER_STAGE3``NYASH_FEATURES=stage3` に置き換え開始
- **Phase 73-9: Rust tests BatchB の Stage3 ENV 縮退**
- 残りの JoinIR 系テストjoinir_runner_min / mir_joinir_* / joinir_json_min / joinir_vm_bridge_* / joinir/mainline_phase49についても、Stage3 旧 ENV を廃止し `NYASH_FEATURES=stage3` ベースに統一
- **wasm/Web デモライン**Phase 71 候補)
- JoinIR ベースの軽量デモ実装
- ブラウザで動く最小構成
- **最適化ライン**Phase 72+ 候補)
- JoinIR 最適化パス実装
- LLVM/ny-llvmc 統合強化
docs(phi_core): Phase 70 完全達成!Trio 完全削除 (~1,443行) ## Phase 70 実装完了 ### ✅ 完了タスク(6/6) **70-1**: loop_form_intake.rs Trio 使用削除 - 29行 → 2行(27行削減、85%削減) - LocalScopeInspectorBox / LoopVarClassBox imports 削除 - 二重分類問題解消(LoopScopeShape が SSOT) **70-2**: loop_to_join.rs 呼び出し側修正 - var_classes 引数削除 - Trio 依存ゼロ達成 **70-3**: 中間テスト - loopform 14/14 PASS ✅ - 退行なし確認 **70-4**: phi_core/mod.rs 公開面削除(ユーザー実施) - pub mod 3箇所削除 **70-5**: Trio 本体3ファイル削除(ユーザー実施) - loop_var_classifier.rs: 578行 - loop_exit_liveness.rs: 414行 - local_scope_inspector.rs: 361行 **70-6**: 最終テスト・ドキュメント - 498 passed, loopform 全 PASS ✅ - Phase 70 完了記録追加 ### 📊 削減実績 **合計削減**: **~1,443行**(Phase 69-4 見込み通り) **ファイル別**: - Trio 定義3ファイル: 1,353行削除 - loop_form_intake.rs: 27行削減 - phi_core/mod.rs: pub mod 3箇所削除 ### 🎯 達成内容 **1. 二重分類問題解消** ✅ - Before: intake_loop_form() + LoopScopeShape で2回分類 - After: LoopScopeShape のみで1回分類(SSOT 確立) **2. Trio 依存完全排除** ✅ - 外部依存: 2箇所 → 0箇所 - Trio 本体: 完全削除 **3. LoopScopeShape SSOT 確立** ✅ - 変数分類: LoopScopeShape.pinned / carriers - Exit liveness: LoopScopeShape.exit_live - 定義追跡: LoopScopeShape.variable_definitions ### 🎊 Phase 48-6 設計の完全達成 **Phase 48-6 目標**: Trio を builder.rs のみに封じ込める **Phase 70 達成**: Trio 完全削除(封じ込めから削除への昇華) **進化の完結**: 1. Phase 25.1: Option C 実装(Trio 誕生) 2. Phase 48-4: LoopScopeShape 実装(Trio 代替) 3. Phase 48-6: Trio を builder.rs に封じ込め 4. Phase 69-3: MIR 決定性修正(BTreeSet 化) 5. Phase 69-4: Trio 削除準備完了 6. **Phase 70: Trio 完全削除** 🎉 ### 🧪 テスト結果 - loopform: 14/14 PASS ✅ - 全体: 498 passed; 43 failed(既知エラーのみ、新規エラーなし) ### 📝 変更ファイル **削除**: - src/mir/phi_core/loop_var_classifier.rs (578行) - src/mir/phi_core/loop_exit_liveness.rs (414行) - src/mir/phi_core/local_scope_inspector.rs (361行) **修正**: - src/mir/join_ir/lowering/loop_form_intake.rs - src/mir/join_ir/lowering/loop_to_join.rs - src/mir/phi_core/mod.rs **ドキュメント**: - docs/development/current/main/phase69-4-trio-deletion-plan.md ### 🚀 Phase 69-70 合計削減 **~1,485行削減**: - Phase 69-2: 42行(inspector 引数削除) - Phase 70: 1,443行(Trio 完全削除) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-02 09:45:54 +09:00
### 今後の優先タスク順selfhost + hack_check 観点の整理)
1. **Phase 71-SSA/selfhost 再ブートストラップの収束**
- 代表パスselfhost_build + stage1_run_min.hakoが JSON v0 emit→VM 実行まで通ることは確認済みとし、
以降は StageB 他ケースと s3/parity 系を「SSA ラインの観測窓」として整理していく。
docs(phi_core): Phase 70 完全達成!Trio 完全削除 (~1,443行) ## Phase 70 実装完了 ### ✅ 完了タスク(6/6) **70-1**: loop_form_intake.rs Trio 使用削除 - 29行 → 2行(27行削減、85%削減) - LocalScopeInspectorBox / LoopVarClassBox imports 削除 - 二重分類問題解消(LoopScopeShape が SSOT) **70-2**: loop_to_join.rs 呼び出し側修正 - var_classes 引数削除 - Trio 依存ゼロ達成 **70-3**: 中間テスト - loopform 14/14 PASS ✅ - 退行なし確認 **70-4**: phi_core/mod.rs 公開面削除(ユーザー実施) - pub mod 3箇所削除 **70-5**: Trio 本体3ファイル削除(ユーザー実施) - loop_var_classifier.rs: 578行 - loop_exit_liveness.rs: 414行 - local_scope_inspector.rs: 361行 **70-6**: 最終テスト・ドキュメント - 498 passed, loopform 全 PASS ✅ - Phase 70 完了記録追加 ### 📊 削減実績 **合計削減**: **~1,443行**(Phase 69-4 見込み通り) **ファイル別**: - Trio 定義3ファイル: 1,353行削除 - loop_form_intake.rs: 27行削減 - phi_core/mod.rs: pub mod 3箇所削除 ### 🎯 達成内容 **1. 二重分類問題解消** ✅ - Before: intake_loop_form() + LoopScopeShape で2回分類 - After: LoopScopeShape のみで1回分類(SSOT 確立) **2. Trio 依存完全排除** ✅ - 外部依存: 2箇所 → 0箇所 - Trio 本体: 完全削除 **3. LoopScopeShape SSOT 確立** ✅ - 変数分類: LoopScopeShape.pinned / carriers - Exit liveness: LoopScopeShape.exit_live - 定義追跡: LoopScopeShape.variable_definitions ### 🎊 Phase 48-6 設計の完全達成 **Phase 48-6 目標**: Trio を builder.rs のみに封じ込める **Phase 70 達成**: Trio 完全削除(封じ込めから削除への昇華) **進化の完結**: 1. Phase 25.1: Option C 実装(Trio 誕生) 2. Phase 48-4: LoopScopeShape 実装(Trio 代替) 3. Phase 48-6: Trio を builder.rs に封じ込め 4. Phase 69-3: MIR 決定性修正(BTreeSet 化) 5. Phase 69-4: Trio 削除準備完了 6. **Phase 70: Trio 完全削除** 🎉 ### 🧪 テスト結果 - loopform: 14/14 PASS ✅ - 全体: 498 passed; 43 failed(既知エラーのみ、新規エラーなし) ### 📝 変更ファイル **削除**: - src/mir/phi_core/loop_var_classifier.rs (578行) - src/mir/phi_core/loop_exit_liveness.rs (414行) - src/mir/phi_core/local_scope_inspector.rs (361行) **修正**: - src/mir/join_ir/lowering/loop_form_intake.rs - src/mir/join_ir/lowering/loop_to_join.rs - src/mir/phi_core/mod.rs **ドキュメント**: - docs/development/current/main/phase69-4-trio-deletion-plan.md ### 🚀 Phase 69-70 合計削減 **~1,485行削減**: - Phase 69-2: 42行(inspector 引数削除) - Phase 70: 1,443行(Trio 完全削除) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-02 09:45:54 +09:00
- この段階では JoinIR Strict は代表 if/loop/VM ブリッジに限定し、selfhost_minimal/stageb_min_emit の赤は SSA 側の課題として扱う。
2. **Phase 7273: ENV / JoinIR dev フラグの集約完了**
- `joinir_core_enabled()` / `joinir_dev_enabled()` / `parser_stage3_enabled()` を SSOT として使い切り、tools/selfhost/hako_check/tests から旧 ENV を整理する。
docs(phi_core): Phase 70 完全達成!Trio 完全削除 (~1,443行) ## Phase 70 実装完了 ### ✅ 完了タスク(6/6) **70-1**: loop_form_intake.rs Trio 使用削除 - 29行 → 2行(27行削減、85%削減) - LocalScopeInspectorBox / LoopVarClassBox imports 削除 - 二重分類問題解消(LoopScopeShape が SSOT) **70-2**: loop_to_join.rs 呼び出し側修正 - var_classes 引数削除 - Trio 依存ゼロ達成 **70-3**: 中間テスト - loopform 14/14 PASS ✅ - 退行なし確認 **70-4**: phi_core/mod.rs 公開面削除(ユーザー実施) - pub mod 3箇所削除 **70-5**: Trio 本体3ファイル削除(ユーザー実施) - loop_var_classifier.rs: 578行 - loop_exit_liveness.rs: 414行 - local_scope_inspector.rs: 361行 **70-6**: 最終テスト・ドキュメント - 498 passed, loopform 全 PASS ✅ - Phase 70 完了記録追加 ### 📊 削減実績 **合計削減**: **~1,443行**(Phase 69-4 見込み通り) **ファイル別**: - Trio 定義3ファイル: 1,353行削除 - loop_form_intake.rs: 27行削減 - phi_core/mod.rs: pub mod 3箇所削除 ### 🎯 達成内容 **1. 二重分類問題解消** ✅ - Before: intake_loop_form() + LoopScopeShape で2回分類 - After: LoopScopeShape のみで1回分類(SSOT 確立) **2. Trio 依存完全排除** ✅ - 外部依存: 2箇所 → 0箇所 - Trio 本体: 完全削除 **3. LoopScopeShape SSOT 確立** ✅ - 変数分類: LoopScopeShape.pinned / carriers - Exit liveness: LoopScopeShape.exit_live - 定義追跡: LoopScopeShape.variable_definitions ### 🎊 Phase 48-6 設計の完全達成 **Phase 48-6 目標**: Trio を builder.rs のみに封じ込める **Phase 70 達成**: Trio 完全削除(封じ込めから削除への昇華) **進化の完結**: 1. Phase 25.1: Option C 実装(Trio 誕生) 2. Phase 48-4: LoopScopeShape 実装(Trio 代替) 3. Phase 48-6: Trio を builder.rs に封じ込め 4. Phase 69-3: MIR 決定性修正(BTreeSet 化) 5. Phase 69-4: Trio 削除準備完了 6. **Phase 70: Trio 完全削除** 🎉 ### 🧪 テスト結果 - loopform: 14/14 PASS ✅ - 全体: 498 passed; 43 failed(既知エラーのみ、新規エラーなし) ### 📝 変更ファイル **削除**: - src/mir/phi_core/loop_var_classifier.rs (578行) - src/mir/phi_core/loop_exit_liveness.rs (414行) - src/mir/phi_core/local_scope_inspector.rs (361行) **修正**: - src/mir/join_ir/lowering/loop_form_intake.rs - src/mir/join_ir/lowering/loop_to_join.rs - src/mir/phi_core/mod.rs **ドキュメント**: - docs/development/current/main/phase69-4-trio-deletion-plan.md ### 🚀 Phase 69-70 合計削減 **~1,485行削減**: - Phase 69-2: 42行(inspector 引数削除) - Phase 70: 1,443行(Trio 完全削除) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-02 09:45:54 +09:00
- ここまでで「selfhost / hack_check / tests が同じ Stage3 + JoinIR/ENV ポリシー上に乗る」状態を目指す。
3. **Phase 80: VM/LLVM 本線の JoinIR 統一****完了**2025-12-02 c61f4bc7
- 代表 if/loop の本線化を実装。`joinir_core_enabled()` 時は JoinIR→MIR 経路が既定となり、レガシー経路は JoinIR 未対応ケース専用に縮退。
- SSOT ヘルパー(`should_try_joinir_mainline()` / `should_panic_on_joinir_failure()`)を実装。
- **Phase 82**: JOINIR_TARGETS テーブル SSOT 化93f51e40完了。
4. **Phase 81: selfhost 用 JoinIR Strictfail-fast の確立****完了**2025-12-02 a9e10d2a
- selfhost_build.sh に `--core` / `--strict` オプション追加。環境変数 `NYASH_JOINIR_CORE` / `NYASH_JOINIR_STRICT` を子プロセスに自動伝播。
- 代表パスskip_ws / trim / resolve / print_tokens / filter / Stage1/StageB 代表)が JoinIR 経由でのみ通る Strict モード実装完了。
- hack_check ラインは引き続き「Stage3 + 旧 MIR Builder + VM」の安定ルートとして維持。
5. **Phase 82-if-phi-retire: P3-C 完了if_phi.rs 削除****次の焦点**
- P3-C 代表ケースを含む型決定を GenericTypeResolver で食い切り、`lifecycle.rs` から `infer_type_from_phi*` 呼び出しを排除する。
- `collect_assigned_vars_via_joinir` を JoinIR/AST 側の分析モジュールに移し、`phi_core::if_phi` への参照をゼロにした上で `if_phi.rs` を削除する。
docs(phi_core): Phase 70 完全達成!Trio 完全削除 (~1,443行) ## Phase 70 実装完了 ### ✅ 完了タスク(6/6) **70-1**: loop_form_intake.rs Trio 使用削除 - 29行 → 2行(27行削減、85%削減) - LocalScopeInspectorBox / LoopVarClassBox imports 削除 - 二重分類問題解消(LoopScopeShape が SSOT) **70-2**: loop_to_join.rs 呼び出し側修正 - var_classes 引数削除 - Trio 依存ゼロ達成 **70-3**: 中間テスト - loopform 14/14 PASS ✅ - 退行なし確認 **70-4**: phi_core/mod.rs 公開面削除(ユーザー実施) - pub mod 3箇所削除 **70-5**: Trio 本体3ファイル削除(ユーザー実施) - loop_var_classifier.rs: 578行 - loop_exit_liveness.rs: 414行 - local_scope_inspector.rs: 361行 **70-6**: 最終テスト・ドキュメント - 498 passed, loopform 全 PASS ✅ - Phase 70 完了記録追加 ### 📊 削減実績 **合計削減**: **~1,443行**(Phase 69-4 見込み通り) **ファイル別**: - Trio 定義3ファイル: 1,353行削除 - loop_form_intake.rs: 27行削減 - phi_core/mod.rs: pub mod 3箇所削除 ### 🎯 達成内容 **1. 二重分類問題解消** ✅ - Before: intake_loop_form() + LoopScopeShape で2回分類 - After: LoopScopeShape のみで1回分類(SSOT 確立) **2. Trio 依存完全排除** ✅ - 外部依存: 2箇所 → 0箇所 - Trio 本体: 完全削除 **3. LoopScopeShape SSOT 確立** ✅ - 変数分類: LoopScopeShape.pinned / carriers - Exit liveness: LoopScopeShape.exit_live - 定義追跡: LoopScopeShape.variable_definitions ### 🎊 Phase 48-6 設計の完全達成 **Phase 48-6 目標**: Trio を builder.rs のみに封じ込める **Phase 70 達成**: Trio 完全削除(封じ込めから削除への昇華) **進化の完結**: 1. Phase 25.1: Option C 実装(Trio 誕生) 2. Phase 48-4: LoopScopeShape 実装(Trio 代替) 3. Phase 48-6: Trio を builder.rs に封じ込め 4. Phase 69-3: MIR 決定性修正(BTreeSet 化) 5. Phase 69-4: Trio 削除準備完了 6. **Phase 70: Trio 完全削除** 🎉 ### 🧪 テスト結果 - loopform: 14/14 PASS ✅ - 全体: 498 passed; 43 failed(既知エラーのみ、新規エラーなし) ### 📝 変更ファイル **削除**: - src/mir/phi_core/loop_var_classifier.rs (578行) - src/mir/phi_core/loop_exit_liveness.rs (414行) - src/mir/phi_core/local_scope_inspector.rs (361行) **修正**: - src/mir/join_ir/lowering/loop_form_intake.rs - src/mir/join_ir/lowering/loop_to_join.rs - src/mir/phi_core/mod.rs **ドキュメント**: - docs/development/current/main/phase69-4-trio-deletion-plan.md ### 🚀 Phase 69-70 合計削減 **~1,485行削減**: - Phase 69-2: 42行(inspector 引数削除) - Phase 70: 1,443行(Trio 完全削除) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-02 09:45:54 +09:00
- 必要であれば、後続フェーズで hack_check 側も JoinIR/型ヒントラインに徐々に寄せていくただし現時点では「selfhost を先に Strict 化、hack_check は安定 VM ライン維持」を優先)。
### バックログ
- StageB/selfhost smokes の扱い整理Phase 30.1 フォロー)
- quick プロファイルで `stage1_launcher_*` / `phase251*` 系が Stage3 デフォルト環境で不安定。今後、quick では SKIP にするか、StageB emit 抽出ロジックを安定化するかを決める。
- `MirFunction.blocks: HashMap``BTreeMap` で非決定的テスト解消
- Phase 25.1 同様のパターン適用
- selfhost StageB 子プロセスへのソース渡し経路の簡素化(`--source "$SRC_CONTENT"` で argv を肥大化させず、HAKO_SRC 環境変数や一時ファイル経由に統一する設計を将来フェーズで検討)。
- Phase 71-SSA: StageB / selfhost ラインは「SSA デバッグ用の観測窓」として切り出し、
代表パスselfhost_build + stage1_run_min.hakoが JSON v0 emit まで通るかどうかを別フェーズで追う。
詳細: `docs/private/roadmap2/phases/phase-71-ssa-debug/README.md`
- Phase 81-JoinIR-Strict: JoinIR を「if/loop/PHI の真」として扱い、
JoinIR 対象関数では `if_phi` / `LoopBuilder` / 旧 MIR Builder にフォールバックしない Strict モードを導入する。
代表 If/Loopmir_joinir_if_select / mir_stage1_staticcompiler_receiver / mir_joinir_stage1_using_resolver_min
`NYASH_JOINIR_CORE=1 NYASH_JOINIR_STRICT=1` で全て green を確認済みStrict で lowering 失敗なし)。
代表パスskip_ws / trim / resolve / print_tokens / filter / read_quoted / Stage1/StageB 代表)では、
JoinIR lowering / VM ブリッジ失敗を即エラー扱いとし、レガシー経路は「未対応関数専用」に縮退させる。
docs(phi_core): Phase 70 完全達成!Trio 完全削除 (~1,443行) ## Phase 70 実装完了 ### ✅ 完了タスク(6/6) **70-1**: loop_form_intake.rs Trio 使用削除 - 29行 → 2行(27行削減、85%削減) - LocalScopeInspectorBox / LoopVarClassBox imports 削除 - 二重分類問題解消(LoopScopeShape が SSOT) **70-2**: loop_to_join.rs 呼び出し側修正 - var_classes 引数削除 - Trio 依存ゼロ達成 **70-3**: 中間テスト - loopform 14/14 PASS ✅ - 退行なし確認 **70-4**: phi_core/mod.rs 公開面削除(ユーザー実施) - pub mod 3箇所削除 **70-5**: Trio 本体3ファイル削除(ユーザー実施) - loop_var_classifier.rs: 578行 - loop_exit_liveness.rs: 414行 - local_scope_inspector.rs: 361行 **70-6**: 最終テスト・ドキュメント - 498 passed, loopform 全 PASS ✅ - Phase 70 完了記録追加 ### 📊 削減実績 **合計削減**: **~1,443行**(Phase 69-4 見込み通り) **ファイル別**: - Trio 定義3ファイル: 1,353行削除 - loop_form_intake.rs: 27行削減 - phi_core/mod.rs: pub mod 3箇所削除 ### 🎯 達成内容 **1. 二重分類問題解消** ✅ - Before: intake_loop_form() + LoopScopeShape で2回分類 - After: LoopScopeShape のみで1回分類(SSOT 確立) **2. Trio 依存完全排除** ✅ - 外部依存: 2箇所 → 0箇所 - Trio 本体: 完全削除 **3. LoopScopeShape SSOT 確立** ✅ - 変数分類: LoopScopeShape.pinned / carriers - Exit liveness: LoopScopeShape.exit_live - 定義追跡: LoopScopeShape.variable_definitions ### 🎊 Phase 48-6 設計の完全達成 **Phase 48-6 目標**: Trio を builder.rs のみに封じ込める **Phase 70 達成**: Trio 完全削除(封じ込めから削除への昇華) **進化の完結**: 1. Phase 25.1: Option C 実装(Trio 誕生) 2. Phase 48-4: LoopScopeShape 実装(Trio 代替) 3. Phase 48-6: Trio を builder.rs に封じ込め 4. Phase 69-3: MIR 決定性修正(BTreeSet 化) 5. Phase 69-4: Trio 削除準備完了 6. **Phase 70: Trio 完全削除** 🎉 ### 🧪 テスト結果 - loopform: 14/14 PASS ✅ - 全体: 498 passed; 43 failed(既知エラーのみ、新規エラーなし) ### 📝 変更ファイル **削除**: - src/mir/phi_core/loop_var_classifier.rs (578行) - src/mir/phi_core/loop_exit_liveness.rs (414行) - src/mir/phi_core/local_scope_inspector.rs (361行) **修正**: - src/mir/join_ir/lowering/loop_form_intake.rs - src/mir/join_ir/lowering/loop_to_join.rs - src/mir/phi_core/mod.rs **ドキュメント**: - docs/development/current/main/phase69-4-trio-deletion-plan.md ### 🚀 Phase 69-70 合計削減 **~1,485行削減**: - Phase 69-2: 42行(inspector 引数削除) - Phase 70: 1,443行(Trio 完全削除) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-02 09:45:54 +09:00
- Phase 82-if-phi-retire予定: P3-C ジェネリック型推論ラインを拡張し、
`lifecycle.rs` から `infer_type_from_phi*` 呼び出しを完全に排除するP3-C まで GenericTypeResolver で食い切る)。
あわせて `collect_assigned_vars_via_joinir` を JoinIR/AST 側の分析モジュールに移動し、
`phi_core::if_phi` への実コードからの参照をゼロにした上で `if_phi.rs` 本体を削除する(歴史メモは docs 側にのみ保持)。
- Phase 74-SSA-static-delegation将来フェーズ候補: Phase 71-SSA で判明した「static box 委譲時に ValueId マッピングが壊れる」
Rust MIR ビルダー側の根本バグを正式に修正するライン。
現 HEAD では `.hako` 層で ParserBox → ParserStringUtilsBox などの委譲を外すことで SSA undef は 13件→0件に根治しており、
最小 .hako ではバグを再現できないため、MIR Builder の修正は **再現用テストを用意できる将来フェーズに委譲**する。
当面は「box→static box への薄い委譲メソッドを増やさない」というコーディング規約で安全運用し、
Phase 74 では commit 13ce9e68 以前の形を元にした再現用テストMIR Builder 修正+委譲パターンの復活をまとめて扱う。
---
## 3. 旧フェーズ(過去ログへのポインタ)
古いフェーズの詳細な経緯やログは、以下のドキュメントと
`docs/private/roadmap2/CURRENT_TASK_2025-11-29_full.md` を見てね。
- Phase 21.7 — Static Box Methodization
- StaticMethodId / NamingBox で BoxName.method/arity 名前解決の SSOT 化。
- docs: `docs/development/current/main/phase-21.7-naming-ssot-checklist.md` など。
- Phase 25.x / 26.x — LoopForm v2 / LoopSSA v2 / Exit PHI / ExitLiveness
- LoopForm v2 / LoopSSA v2 の整備と Exit PHI / ExitLiveness まわりの 4 箱構成。
- Phase 2732 — JoinIR 初期実験〜汎用化
- LoopToJoinLowerer / LoopScopeShape / JoinIR VM Bridge を minimal ケースから Stage1 / StageB へ広げていくライン。
- docs: `docs/private/roadmap2/phases/phase-27-joinir*`, `phase-31-looptojoin-lowerer`, `phase-32-joinir-complete-migration` など。
CURRENT_TASK.md 自体は「いまどこを触っているか」と「次に何をやるか」を
1 画面で把握できる軽さを維持する方針だよ。***