Files
hakorune/lang/src/runner
nyash-codex 2692eafbbf feat(mir): Phase 26-H JoinIR型定義実装完了 - ChatGPT設計
## 実装内容(Step 1-3 完全達成)

### Step 1: src/mir/join_ir.rs 型定義追加
- **JoinFuncId / JoinContId**: 関数・継続ID型
- **JoinFunction**: 関数(引数 = φノード)
- **JoinInst**: Call/Jump/Ret/Compute 最小命令セット
- **MirLikeInst**: 算術・比較命令ラッパー
- **JoinModule**: 複数関数保持コンテナ
- **単体テスト**: 型サニティチェック追加

### Step 2: テストケース追加
- **apps/tests/joinir_min_loop.hako**: 最小ループ+breakカナリア
- **src/tests/mir_joinir_min.rs**: 手書きJoinIR構築テスト
  - MIR → JoinIR手動構築で型妥当性確認
  - #[ignore] で手動実行専用化
  - NYASH_JOINIR_EXPERIMENT=1 トグル制御

### Step 3: 環境変数トグル実装
- **NYASH_JOINIR_EXPERIMENT=1**: 実験モード有効化
- **デフォルト挙動**: 既存MIR/LoopForm経路のみ(破壊的変更なし)
- **トグルON時**: JoinIR手書き構築テスト実行

## Phase 26-H スコープ遵守
 型定義のみ(変換ロジックは未実装)
 最小限の命令セット
 Debug 出力で妥当性確認
 既存パイプライン無影響

## テスト結果
```
$ NYASH_JOINIR_EXPERIMENT=1 cargo test --release mir_joinir_min_manual_construction -- --ignored --nocapture
[joinir/min] MIR module compiled, 3 functions
[joinir/min] JoinIR module constructed:
[joinir/min]  JoinIR型定義は妥当(Phase 26-H)
test result: ok. 1 passed; 0 failed
```

## JoinIR理論の実証
- **φノード = 関数引数**: `fn loop_step(i, k_exit)`
- **merge = join関数**: 分岐後の合流点
- **ループ = 再帰関数**: `loop_step` 自己呼び出し
- **break = 継続呼び出し**: `k_exit(i)`

## 次フェーズ (Phase 27.x)
- LoopForm v2 → JoinIR 自動変換実装
- break/continue ハンドリング
- Exit PHI の JoinIR 引数化

🌟 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: ChatGPT <noreply@openai.com>
2025-11-23 04:10:12 +09:00
..

Runner Facade / Stage1 CLI — Runner Layer Guide

Responsibility

  • Provide script-side orchestration primitives for execution:
    • Runner facade (runner_facade.hako) for entry selection and pre/post hooks.
    • Stage1 CLI launcher (launcher.hako) for top-level command dispatch.
  • Delegate actual execution to existing backendsRust VM / LLVM / ny-llvmc。既定挙動は変えない。

Files

  • runner_facade.hako

    • Contractdraft:
      • Entry: Runner.run(entry: string, args: array<string>) -> i64
      • Gate: HAKO_SCRIPT_RUNNER=1default OFF
    • Role:
      • Script-first runner facadePhase 20.10)。
      • Pre-hooks: validate entry/args, emit short diagnostics。
      • Post-hooks: normalize result / metrics将来
    • Notes:
      • Keep this layer pure; platform I/O は C-ABI 側に委譲。
      • Fail-Fast: invalid entry/args は非0で即終了。
      • Short diagnostics:
        • Success: [script-runner] invoke
        • Failure: [script-runner] invoke: FAIL
  • launcher.hako

    • Contractdraft:
      • Entry: Main.main(args: array<string>) -> i64
      • Role: Stage1 hakorune CLI のトップレベル dispatcher。
        • コマンド: run / build / emit / check(詳細は docs/development/runtime/cli-hakorune-stage1.md
    • Current statusPhase 25.1:
      • 構造のみ実装(HakoCli box にコマンド別のメソッドを定義)。
      • 各コマンドはまだプレースホルダで、"[hakorune] <cmd>: not implemented yet" を出力して終了コード 9093 を返す。
      • 実際のパイプラインStageB / MirBuilder / AotPrep / ny-llvmc など)への接続は後続フェーズで段階的に実装する。
    • Design reference:
      • docs/development/runtime/cli-hakorune-stage1.md を Stage1 CLI の仕様 SSOT として参照すること。

Notes

  • Runner 層は「構造とオーケストレーション専用レイヤ」として扱う。
    • 言語意味論・最適化ロジックは compiler / opt / AotPrep に留める。
    • VM/LLVM の実行コアは Rust 側Stage0 / NyRTに委譲する。
  • Fail-Fast 原則:
    • 未実装コマンドや不正な引数は明示的なメッセージ非0終了コードで返す。
    • 暗黙のフォールバックや静かな無視は行わない。