Files
hakorune/docs/development/roadmap/phases/phase-15/implementation/self-hosting-strategy-2025-09.md
Selfhosting Dev a530b454f6 📋 Phase 15セルフホスティング戦略整理 & LLVM改善
## Phase 15戦略整理
- セルフホスティング戦略2025年9月版を作成
- Phase 15.2-15.5の段階的実装計画を明確化
  - 15.2: LLVM独立化(nyash-llvm-compiler crate)
  - 15.3: Nyashコンパイラ実装でセルフホスト達成
  - 15.4: VM層のNyash化(革新的アプローチ)
  - 15.5: ABI移行(LLVM完成後)
- ROADMAP.mdの優先順位調整、README.md更新

## LLVM改善(ChatGPT5協力)
- BuilderCursor::with_block改善(状態の適切な保存/復元)
- seal_blockでの挿入位置管理を厳密化
- 前任ブロックのみ処理、重複PHI incoming防止
- defined_in_blockトラッキングで値のスコープ管理

## 洞察
- コンパイル不要のセルフホスティング実現可能
- VM層をNyashで書けば即座実行可能
- Phase 22(Nyash LLVMコンパイラ)への道筋

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-12 14:59:03 +09:00

3.6 KiB
Raw Blame History

Phase 15 セルフホスティング戦略 2025年9月版

🎯 セルフホスティングの段階的実現戦略

現在地

  • v0 NyパーサーNy→JSON IR完成
  • MIR生成基盤ありRust実装
  • 🚧 LLVM層改善中ChatGPT5協力
  • 📅 NyコンパイラMVP計画中

君の提案の妥当性検証

📊 セルフホスティングの段階

Stage 1: LLVM層の独立最優先

現在: Rustモリス → MIR → LLVM → オブジェクト
提案: Rustモリス → MIR(JSON) → [LLVM EXE] → ネイティブEXE

実装詳細

  1. nyash-llvm-compiler crateを分離
  2. 入力MIRJSON/バイナリ)
  3. 出力:ネイティブ実行ファイル
  4. nyrtランタイムとのリンク

メリット

  • ビルド時間短縮Rust側は軽量化
  • 独立したツールとして配布可能
  • パイプライン明確化

Stage 2: Nyashコンパイラ実装現在計画中

現在: Rustパーサー → MIR
提案: Nyashコンパイラ → AST/JSON → MIR生成層

実装詳細

  1. Nyashで再帰下降パーサー実装
  2. AST構造をJSONで出力
  3. 既存のMIR生成層に接続
  4. NYASH_USE_NY_COMPILER=1で切替

これでセルフホスティング達成!

  • Nyashで書いたコンパイラがNyashをコンパイル
  • Rustコンパイラは不要に

Stage 3: VM層のNyash実装革新的

現在: Rust VM → MIR解釈
提案: Nyash VM → MIR解釈 → (必要時LLVM呼び出し)

実装詳細

box NyashVMBox {
    mir_module: MIRModuleBox
    pc_stack: ArrayBox
    value_stack: ArrayBox
    frame_stack: ArrayBox
    
    execute(mir_json) {
        me.mir_module = MIRModuleBox.parse(mir_json)
        me.runFunction("main")
    }
    
    runFunction(name) {
        local func = me.mir_module.getFunction(name)
        local frame = new FrameBox(func)
        me.frame_stack.push(frame)
        
        loop(frame.pc < func.instructions.length()) {
            local inst = func.instructions[frame.pc]
            me.executeInstruction(inst, frame)
            frame.pc = frame.pc + 1
        }
    }
}

メリット

  • コンパイル不要で即実行
  • VMロジックを動的に変更可能
  • デバッグ・実験が容易

🚀 実現順序の提案

Phase 15.2: LLVM独立化

  1. LLVM層をcrateに分離
  2. MIR JSONインターフェース確立
  3. スタンドアロンEXE生成

Phase 15.3: Nyashコンパイラ

  1. パーサー実装Nyashで
  2. AST→MIRブリッジ
  3. ブートストラップテスト

Phase 15.4: VM層Nyash化

  1. MIR解釈エンジン基本13命令
  2. BoxCall/ExternCallブリッジ
  3. パフォーマンス最適化JIT連携

💡 ABI移行タイミング

LLVM独立化完了後が最適理由:

  1. インターフェース確定後に最適化
  2. 独立EXEならABI変更の影響限定的
  3. パフォーマンス測定してから判断

📋 検証結果

君の提案は正しい!

  1. LLVM EXE独立 → MIR JSONで疎結合
  2. Nyashコンパイラ → AST/JSONでMIR生成
  3. セルフホスト完了 → Rustコンパイラ不要
  4. VM層Nyash化 → 究極の柔軟性

この順序なら:

  • 段階的に実現可能
  • 各段階で動作確認
  • リスク最小化
  • 最終的に完全セルフホスト

🎯 次のアクション

  1. LLVM crateの設計開始
  2. MIR JSONスキーマ確定
  3. Nyパーサー拡張計画
  4. VMプロトタイプ設計

これが現実的で革新的なロードマップにゃ!