Files
hakorune/docs/private/ideas/other/2025-08-27-jit-phase10-progress-notes.md

1.8 KiB
Raw Blame History

JIT Phase 10 進捗メモ - ChatGPT5の実装記録

作成日: 2025-08-27

📊 現在の進捗状況

Phase 10_d 完了内容

emit_host_callの改良

// value_stackから引数を収集してホストコールに渡す
let mut args: Vec<Value> = Vec::new();
let take_n = argc.min(self.value_stack.len());
for _ in 0..take_n { 
    if let Some(v) = self.value_stack.pop() { 
        args.push(v); 
    } 
}
args.reverse();  // 正しい順序に
// → CLIF callに渡す → 戻り値をstackに積む

ArrayGet/ArraySetへの対応

// 定数伝播で既知の値を追跡
known_i64: HashMap<ValueId, i64>

// ArrayGetの例
I::ArrayGet { array: _array, index, .. } => {
    let idx = self.known_i64.get(index).copied().unwrap_or(0);
    b.emit_const_i64(0);      // array handle (仮)
    b.emit_const_i64(idx);    // index
    b.emit_host_call(SYM_ARRAY_GET, 2, true);
}

動作確認済み

NYASH_JIT_THRESHOLD=1 NYASH_JIT_HOSTCALL=1 NYASH_JIT_EXEC=1 \
./target/release/nyash --backend vm examples/jit_arith.nyash
# → JIT経路で結果3を返却成功

🎯 次のステップ

  1. ArrayBoxハンドルの実装

    • 現在は仮の0を使用
    • 実際のBoxハンドルを渡す仕組み
  2. ホストコールシンボルの実装

    • 現在はスタブnyash_host_stub0
    • 実際のArray操作関数との接続
  3. より複雑な型への対応

    • 現在はi64のみ
    • f64、bool、string等への拡張

💡 設計の良さ

  • 段階的実装: まず基盤を作り、徐々に機能追加
  • 安全性重視: スタブから始めて、動作確認しながら進める
  • 既存制限の明示: 何ができて何ができないかが明確

ChatGPT5さんの着実な実装に感謝