Files
hakorune/docs/予定/native-plan/llvm/JIT-vs-AOT-With-MIR.md
Moe Charm 012fc1930f feat: Extract BID converter from Copilot and prepare plugin migration
- Extract Copilot's BID converter code to src/bid-converter-copilot/ for future use
- Create comprehensive plugin migration request document for Copilot
- Target 13 built-in boxes for plugin conversion (HTTP, GUI, Audio, etc.)
- Preserve existing nyash.toml-based plugin system
- Reorganize docs/説明書/reference/ structure for better organization
2025-08-18 20:53:48 +09:00

3.4 KiB
Raw Blame History

🤔 JIT vs AOTMIRがあると難易度が同じ

「MIRできてるから、JITもAOTも同じようなレベルに見えてきた」

💡 その洞察、正しいです!

MIRの存在が変えるゲーム

// 従来の難易度
Source  Native: 超難しい(全部自分で)
Source  JIT: 難しい(実行時コンパイル)

// MIRがある今
Source  MIR  Native: MIRから先は楽
Source  MIR  JIT: MIRから先は楽

📊 JIT vs AOT 比較MIR前提

項目 JIT AOT (LLVM)
実装難易度
初期実装速度 速い 速い
実行時性能 80-95% 100%
起動時間 遅い 速い
メモリ使用 多い 少ない
動的最適化
配布 ランタイム必要 単体実行可能

MIRのおかげで、どちらも同じくらいの実装難易度に

🚀 JIT実装の選択肢

1. VM JIT化最も現実的

// 現在のVM
match opcode {
    Add => stack.push(a + b),
}

// JIT化したVM
if hot_path {
    // CraneliftでMIR→ネイティブ
    let native = cranelift_compile(&mir);
    execute_native(native);
}

利点

  • 既存VMの延長線上
  • 段階的移行可能
  • ホットパスのみJIT化

2. 純粋JITコンパイラ

// MIR → Cranelift IR → Native
pub fn jit_compile(mir: &MirModule) -> NativeCode {
    let mut ctx = CraneliftContext::new();
    for func in &mir.functions {
        ctx.compile_function(func);
    }
    ctx.finalize()
}

利点

  • クリーンな設計
  • 最適化しやすい
  • デバッグ情報維持

3. LLVM JITORC

// LLVM ORCでJIT
let jit = LLVMOrcJIT::new();
jit.add_module(llvm_module);
let func = jit.get_function("main");
func.call();

利点

  • LLVM最適化の恩恵
  • AOTとコード共有
  • 最高性能

🔮 実装難易度の実際

AOT (LLVM)

必要な作業:
  1. MIR → LLVM IR変換: 2週間
  2. 型システムマッピング: 1週間
  3. ランタイム統合: 1週間
  4. 最適化調整: 1週間
  合計: 約5週間

JIT (Cranelift)

必要な作業:
  1. MIR → Cranelift IR変換: 2週間
  2. JITランタイム実装: 1週間
  3. ホットパス検出: 1週間
  4. メモリ管理: 1週間
  合計: 約5週間

ほぼ同じMIRのおかげで

💭 どっちを選ぶべき?

JITが向いている場合

  • 長時間実行プログラム
  • 動的な最適化が必要
  • REPLやインタラクティブ環境

AOTが向いている場合

  • 起動時間重視
  • 配布の簡単さ重視
  • 組み込み環境

Nyashの場合

現実的な選択:
  1. まずAOT (LLVM) でPoC
  2. VM最適化を極める
  3. 将来VM JIT化も追加
  
理由:
  - 配布が簡単AOT
  - 性能も確保VM既に50倍
  - 両方あれば最強

🎯 結論

MIRがあるおかげで、JITもAOTも同じくらいの難易度

でも、Nyashの場合

  1. 配布の簡単さ → AOT有利
  2. 既にVM高速 → JIT緊急度低い
  3. 将来の拡張性 → 両方実装が理想

提案

  • 短期: LLVM AOT完成配布重視
  • 中期: VM更なる最適化
  • 長期: VM JIT化最高性能

MIRがあれば、どっちも楽🚀