From 4df66e44d7bec51b9a9cac5ce5025e55440e69d1 Mon Sep 17 00:00:00 2001 From: nyash-codex Date: Sat, 13 Dec 2025 22:40:24 +0900 Subject: [PATCH] docs(joinir): clarify ValueId worlds and routing vs fallback MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 架構 overview の矛盾解消: - ValueId の 3 つの世界を明文化(JoinIR/MIR/PHI dst) - routing/fallback 語彙を不変条件に統合(Section 0.1 と整合) - 章番号重複を解消(見出し参照へ統一) Changes: - Section 1: Added ValueId worlds clarification, routing/fallback definitions - Removed duplicate section numbers (5, 6, 3 duplicates → renamed/unnumbered) - Total: +25 lines, -7 lines (net +18) No specification changes, readability improvements only 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 --- .../main/joinir-architecture-overview.md | 32 +++++++++++++++---- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/docs/development/current/main/joinir-architecture-overview.md b/docs/development/current/main/joinir-architecture-overview.md index 8082c7be..ba6b1998 100644 --- a/docs/development/current/main/joinir-architecture-overview.md +++ b/docs/development/current/main/joinir-architecture-overview.md @@ -67,6 +67,24 @@ NYASH_JOINIR_DEBUG=1 cargo test --release --lib JoinIR ラインで守るべきルールを先に書いておくよ: +**ValueId の 3 つの世界** (明文化): +1. **JoinIR 内部**: JoinParam (100-999) / JoinLocal (1000+) のみ。alloc_param()/alloc_local() が SSOT。 +2. **MIR builder**: builder.variable_map で管理。JoinInst の operand には持ち込まない。 +3. **PHI dst (メタ)**: LoopHeader PHI の dst は MIR builder が割り当て。JoinIR の reserve_phi() は衝突防止マークのみ。 + +**語彙統一**: +- `alloc_value()` は `alloc_local()` の alias(実装上、概念上は Local を増やす) +- `LOCAL_MAX` は debug/verifier 上限(概念上無限ではない、図と実装の関係を明記) + +**Routing vs Fallback の語彙 SSOT** (Section 0.1 と整合): +- **routing**: JoinIR Core 内での正規な経路選択(Pattern1/2/3/4 ルータ、if-sum mode 選択等) +- **soft fallback**: 任意箱失敗時の同等意味論退避(例: pre-validation 失敗 → 別 JoinIR 経路) +- **prohibited fallback**: 非 JoinIR への退避(LoopBuilder へ落ちる等)、サイレント退避、契約違反握りつぶし + +不変条件 6 (Fail-Fast) はこの定義に基づく: prohibited fallback は絶対禁止、soft fallback は理由ログ必須。 + +--- + 1. **JoinIR 内部は JoinIR ValueId だけ** - JoinIR lowering が発行する `JoinInst` の `ValueId` は JoinValueSpace の領域(Param/Local)のみを使う。 - `alloc_param()`(Param 100–999)/ `alloc_local()`(Local 1000+)が SSOT。 @@ -925,7 +943,7 @@ Phase 210–221 で「数値ループ+if-sum」を実戦投入し、JoinIR イ --- -## 5. selfhost / .hako JoinIR Frontend との関係 +## selfhost / .hako JoinIR Frontend との関係 JoinIR は Rust 側だけでなく、将来的に .hako selfhost コンパイラ側でも生成・解析される予定だよ: @@ -950,17 +968,17 @@ JoinIR は Rust 側だけでなく、将来的に .hako selfhost コンパイラ - 189–193: Multi-function merge / Select bridge / ExitLine 箱化 - 171–172 / 33‑10/13: ConditionEnv, ConditionBinding, JoinFragmentMeta, ExitLineRefactor 等 - `docs/development/current/main/loop_pattern_space.md` - - JoinIR ループパターン空間の整理メモ。 - どの軸(継続条件 / break / continue / PHI / 条件変数スコープ / 更新パターン)でパターンを分けるか、 + - JoinIR ループパターン空間の整理メモ。 + どの軸(継続条件 / break / continue / PHI / 条件変数スコープ / 更新パターン)でパターンを分けるか、 そして P1–P4 / Trim(P5) の位置づけと、今後追加候補のパターン一覧がまとまっている。 --- -## 6. Roadmap(JoinIR の今後のゴール) +## Roadmap 詳細版(JoinIR の今後のゴール) ここから先の JoinIR の「目指す形」を、箱レベルでざっくり書いておくよ。フェーズ詳細は各 phase ドキュメントに分散させて、このセクションは常に最新の方向性だけを保つ。 -### 6.1 直近(Phase 176-177 まわり) +### 直近(Phase 176-177 まわり) - **P5(Trim/JsonParser 系)ループの複数キャリア対応** ✅ Phase 176 完了 (2025-12-08) - 完了内容: @@ -1141,9 +1159,9 @@ JoinIR は Rust 側だけでなく、将来的に .hako selfhost コンパイラ --- -## 3. JoinIR → JoinIR 正規化レイヤ(構想 / Phase 26-H ライン) +## JoinIR 正規化レイヤ(構想 / Phase 26-H ライン) -### 3.1 Structured JoinIR と Normalized JoinIR(概念レベル) +### Structured JoinIR と Normalized JoinIR(概念レベル) JoinIR ラインは、今後は「同じ JoinIR をフェーズごとに正規化していく」二段構成で扱う想定だよ: