feat(joinir): Phase 176 Pattern2 multi-carrier lowering complete
Task 176-1: Pattern2 limitation investigation - Identified 10 limitation points where only position carrier was handled - Added TODO markers for Phase 176-2/3 implementation - Created phase176-pattern2-limitations.md documentation Task 176-2: CarrierUpdateLowerer helper implementation - Implemented emit_carrier_update() helper function - Supports CounterLike and AccumulationLike UpdateExpr patterns - Added 6 unit tests (all passing) - Fail-Fast error handling for carrier/variable not found Task 176-3: Pattern2 lowerer multi-carrier extension - Extended header PHI generation for all carriers - Implemented loop update for all carriers using emit_carrier_update() - Extended ExitLine/ExitMeta construction for all carriers - Updated function call/jump args to include all carriers - 9/10 tests passing (1 pre-existing test issue) Task 176-4: E2E testing and bug fixes - Fixed Trim pattern loop_var_name overwrite bug (pattern2_with_break.rs) - Fixed InstructionRewriter latch_incoming mapping bug - All E2E tests passing (RC=0): pos + result dual-carrier loops work - test_jsonparser_parse_string_min2.hako verified Task 176-5: Documentation updates - Created phase176-completion-report.md - Updated phase175-multicarrier-design.md with completion status - Updated joinir-architecture-overview.md roadmap - Updated CURRENT_TASK.md with Phase 176 completion + Phase 177 TODO - Updated loop_pattern_space.md F-axis (multi-carrier support complete) Technical achievements: - Pattern2 now handles single/multiple carriers uniformly - CarrierInfo architecture proven to work end-to-end - Two critical bugs fixed (loop_var overwrite, latch_incoming mapping) - No regressions in existing tests Next: Phase 177 - Apply to JsonParser _parse_string full implementation
This commit is contained in:
@ -258,3 +258,53 @@ JoinIR は Rust 側だけでなく、将来的に .hako selfhost コンパイラ
|
||||
- JoinIR ループパターン空間の整理メモ。
|
||||
どの軸(継続条件 / break / continue / PHI / 条件変数スコープ / 更新パターン)でパターンを分けるか、
|
||||
そして P1–P4 / Trim(P5) の位置づけと、今後追加候補のパターン一覧がまとまっている。
|
||||
|
||||
---
|
||||
|
||||
## 6. Roadmap(JoinIR の今後のゴール)
|
||||
|
||||
ここから先の JoinIR の「目指す形」を、箱レベルでざっくり書いておくよ。フェーズ詳細は各 phase ドキュメントに分散させて、このセクションは常に最新の方向性だけを保つ。
|
||||
|
||||
### 6.1 直近(Phase 176-177 まわり)
|
||||
|
||||
- **P5(Trim/JsonParser 系)ループの複数キャリア対応** ✅ Phase 176 完了 (2025-12-08)
|
||||
- 完了内容:
|
||||
- Pattern2 lowerer を全キャリア対応に拡張(ヘッダ PHI / ループ更新 / ExitLine)。
|
||||
- CarrierUpdateLowerer ヘルパで UpdateExpr → JoinIR 変換を統一。
|
||||
- 2キャリア(pos + result)E2E テスト完全成功。
|
||||
- 技術的成果:
|
||||
- CarrierInfo / ExitMeta / ExitLine / LoopHeaderPhiBuilder の multi-carrier 対応を Pattern2 lowerer で完全活用。
|
||||
- Trim pattern の「キャリア = ループ変数」という誤解を解消(loop_var は特殊キャリア)。
|
||||
- 次のステップ (Phase 177):
|
||||
- JsonParser `_parse_string` 本体を P2+P5 で通す(pos + result の 2 キャリアで実ループ動作確認)。
|
||||
|
||||
### 6.2 中期(selfhost depth‑2 / JsonParser 本体)
|
||||
|
||||
- **JsonParserBox / Trim 系ループの本線化**
|
||||
- 目標:
|
||||
- `_trim` / `_skip_whitespace` / `_parse_string` / `_parse_array` などの主要ループが、すべて JoinIR Pattern1–4 + P5 で通ること。
|
||||
- LoopConditionScopeBox + LoopBodyCarrierPromoter + TrimLoopHelper の上で安全に正規化できるループを広げていく。
|
||||
- 方針:
|
||||
- 「ループの形」は P1–P4 から増やさず、複雑さは BoolExprLowerer / ContinueBranchNormalizer / P5 系の補助箱で吸収する。
|
||||
- LoopPatternSpace の P6/P7/P12 候補(break+continue 同時 / 複数キャリア条件更新 / early return)は、実アプリで必要になった順に小さく足す。
|
||||
|
||||
- **selfhost depth‑2(.hako JoinIR/MIR Frontend)**
|
||||
- 目標:
|
||||
- `.hako → JsonParserBox → Program/MIR JSON → MirAnalyzerBox/JoinIrAnalyzerBox → VM/LLVM` の深度 2 ループを、日常的に回せるようにする。
|
||||
- Rust 側の JoinIR は「JSON を受け取って実行・検証するランナー層」、.hako 側が「JoinIR/MIR を構築・解析する言語側 SSOT」という役割分担に近づける。
|
||||
- 前提:
|
||||
- 本ドキュメント(joinir-architecture-overview.md)を .hako 側の JoinIR 実装の参照設計として維持し、仕様変更は必ずここを更新してから .hako にも反映する。
|
||||
|
||||
### 6.3 当面やらないこと(Non‑Goals)
|
||||
|
||||
- ループパターンを闇雲に増やすこと
|
||||
- P1–P4(構造)+ P5(body‑local 条件を昇格する補助パス)を「骨格」とみなし、
|
||||
新しいパターンが必要になったときは LoopPatternSpace に追記してから、小さな箱で補う方針。
|
||||
- LoopBuilder の復活や、JoinIR 以外の別ラインによるループ lowering
|
||||
- LoopBuilder 系は Phase 186–187 で完全に削除済み。
|
||||
ループに関する新しい要件はすべて JoinIR 側のパターン/箱の拡張で扱う。
|
||||
- JoinIR の中に言語固有のハードコード(特定 Box 名や変数名)を戻すこと
|
||||
- Trim/JsonParser 系は、構造(パターン)と補助箱(Promoter/Helper)で扱い、
|
||||
「sum」「ch」など名前ベースの判定は LoopUpdateSummary / TrimLoopHelper の内部に閉じ込める。
|
||||
|
||||
この Roadmap は、JoinIR 層の変更や selfhost 深度を進めるたびに更新していくよ。
|
||||
|
||||
Reference in New Issue
Block a user