# LoopSignal IR: Box×Loopによる制御統一と最小MIR設計 ## 1. 背景と問題 NyashのMIR(Middle Intermediate Representation)は現在、制御フロー命令が分散している: - `if`/`while`/`for`がそれぞれ独立した命令 - `return`/`break`/`continue`が個別の特殊形式 - ジェネレータ/async/await の統一的表現がない - Box哲学(Everything is Box)とLoop哲学(Everything is Loop)が未統合 **問題点**: 1. 最適化パスが各制御構造を個別に扱う必要がある 2. 新しい制御構造(generator/async)の追加が困難 3. LLVM IRへの変換が複雑(各構文ごとの特殊ケース) 4. デバッグ情報(DWARF)の一貫性が保ちにくい ## 2. 目標 **ユースケース**を統一的に扱える最小MIR設計: - `scope` - RAII/デストラクタ呼び出し - `if`/`while`/`for` - 条件分岐とループ - `function`/`return` - 関数呼び出しと戻り値 - `generator`/`yield` - 中断可能な計算 - `async`/`await` - 非同期計算(将来) **設計原則**: - Everything is Box × Everything is Loop の融合 - 最小命令セット(4命令)ですべての制御を表現 - LLVM IRへの直接的なマッピング - 段階的導入可能(既存MIRとの共存) ## 3. 設計 ### 3.1 型: LoopSignal ```rust // LoopSignal = 制御フロー + 値の統一表現 enum LoopSignal { Next(T), // 継続(次のイテレーション) Break(T), // 脱出(ループ終了) Yield(T), // 中断(ジェネレータ) Return(T), // 復帰(関数終了)- オプション } // LLVM表現: { i8 tag, iN value } // tag: 0=Next, 1=Break, 2=Yield, 3=Return ``` ### 3.2 MIR命令 ``` loop.begin