## 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>
3.6 KiB
3.6 KiB
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
実装詳細:
nyash-llvm-compilercrateを分離- 入力:MIR(JSON/バイナリ)
- 出力:ネイティブ実行ファイル
- nyrtランタイムとのリンク
メリット:
- ビルド時間短縮(Rust側は軽量化)
- 独立したツールとして配布可能
- パイプライン明確化
Stage 2: Nyashコンパイラ実装(現在計画中)✅
現在: Rustパーサー → MIR
提案: Nyashコンパイラ → AST/JSON → MIR生成層
実装詳細:
- Nyashで再帰下降パーサー実装
- AST構造をJSONで出力
- 既存のMIR生成層に接続
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独立化
- LLVM層をcrateに分離
- MIR JSONインターフェース確立
- スタンドアロンEXE生成
Phase 15.3: Nyashコンパイラ
- パーサー実装(Nyashで)
- AST→MIRブリッジ
- ブートストラップテスト
Phase 15.4: VM層Nyash化
- MIR解釈エンジン(基本13命令)
- BoxCall/ExternCallブリッジ
- パフォーマンス最適化(JIT連携)
💡 ABI移行タイミング
LLVM独立化完了後が最適理由:
- インターフェース確定後に最適化
- 独立EXEならABI変更の影響限定的
- パフォーマンス測定してから判断
📋 検証結果
君の提案は正しい!
- LLVM EXE独立 → MIR JSONで疎結合
- Nyashコンパイラ → AST/JSONでMIR生成
- セルフホスト完了 → Rustコンパイラ不要
- VM層Nyash化 → 究極の柔軟性
この順序なら:
- 段階的に実現可能
- 各段階で動作確認
- リスク最小化
- 最終的に完全セルフホスト
🎯 次のアクション
- LLVM crateの設計開始
- MIR JSONスキーマ確定
- Nyパーサー拡張計画
- VMプロトタイプ設計
これが現実的で革新的なロードマップにゃ!