132 lines
3.6 KiB
Markdown
132 lines
3.6 KiB
Markdown
|
|
# 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. 入力:MIR(JSON/バイナリ)
|
|||
|
|
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呼び出し)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**実装詳細**:
|
|||
|
|
```nyash
|
|||
|
|
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プロトタイプ設計**
|
|||
|
|
|
|||
|
|
これが現実的で革新的なロードマップにゃ!
|