Phase 10_b JIT Lower implementation: - IRBuilder abstraction with NoopBuilder (emit counting) ✅ - CraneliftBuilder skeleton (feature `cranelift-jit`) ✅ - LowerCore implementation (Const/Copy/BinOp/Cmp/Branch/Ret) ✅ - Engine.compile with builder selection and JIT handle generation ✅ - JIT function table with stub functions ✅ - Basic i64 const/binop/ret emission for Cranelift - VM execution path with NYASH_JIT_EXEC=1 support Academic ideas and analysis: - "Everything is Thread-Safe Box" concept - "GC as debug tool" paradigm analysis - GC switchable semantic equivalence documentation - Gemini & Codex evaluation on academic paper potential - Nyash academic papers potential themes Current limitations: - Return values limited to i64 (VMValue::Integer) - Arguments not yet supported - Compare/Branch emit not implemented - Trap→VM fallback not implemented 🤖 Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com>
3.5 KiB
3.5 KiB
🎯 CURRENT TASK - 2025-08-27(Phase 10_b → 10_c)
フェーズ10はJIT実用化へ!Core-1 Lowerの雛形を固めつつ、呼出/フォールバック導線を整えるよ。
⏱️ 今日のフォーカス(10_b: Lower(Core-1) 最小化 + 10_c準備)
- 目的: IRBuilder抽象/Lowerを整備し、JIT関数テーブルとVM分岐の足場を実装。次の10_cで本実行に繋げる。
直近タスク(小さく早く)
- 10_b: Lower/Core-1 最小化(進行中 → ほぼ完了)
- IRBuilder抽象 +
NoopBuilder(emit数カウント)✅ 完了 CraneliftBuilder雛形(featurecranelift-jit)✅ 完了- LowerCore(Const/Copy/BinOp/Cmp/Branch/Ret)✅ 完了(emit→Builder)
- Engine.compile: builder選択(feature連動)+Lower実行+JIT handle発行✅ 完了
- JIT関数テーブル(stub: handle→ダミー関数)✅ 完了
- 残: 最小emit(const/binop/ret)をCLIFで生成し、関数ポインタをテーブル登録(feature有効時)
→ 実装: CraneliftBuilderでi64用の
const/binop/retを生成し、JIT関数テーブルへクロージャとして登録完了(args未対応・i64専用)
- IRBuilder抽象 +
- 10_c: 呼出/フォールバック(準備 → 部分実装)
- VM側の疑似ディスパッチログ(compiled時/実行時ログ)✅ 完了
- 残: is_compiled +
NYASH_JIT_EXEC=1でJIT実行→VMValue返却、trap時VMフォールバック → 実装:VM.execute_functionでNYASH_JIT_EXEC=1かつ対象関数がcompiledならJIT実行し、そのVMValueを即return(現状はargs未使用・trap未実装)
備考(制限と次の着手点)
- 返り値はi64(VMValue::Integer)に限定。f64・bool等は未emit
- 引数は未対応(Closureは無視)。MIRのLoad/Param配線が必要
- Compare/Branchはカウンタのみ(emit未着手)
- trap→VMフォールバックは未実装(Craneliftトラップハンドリング追加が必要)
すぐ試せるコマンド
cargo build --release -j32
NYASH_JIT_STATS=1 NYASH_JIT_DUMP=1 ./target/release/nyash examples/p2p_ping_pong.nyash
# 疑似実行パスを確認(まだVMフォールバック)
NYASH_JIT_STATS=1 NYASH_JIT_DUMP=1 NYASH_JIT_EXEC=1 \
./target/release/nyash examples/p2p_ping_pong.nyash
# (任意)Craneliftを含めてビルド(今は最小初期化のみ)
cargo build --release -j32 --features cranelift-jit
現在の地図(Done / Next)
✅ 完了(Phase 9.79b)
- TypeMeta/Thunk正式化・Poly-PIC(2〜4)・Plugin TLV拡張(bool/i64/f64/bytes)
- VM fast-path整備(Instance/Plugin/Builtin)と統計サマリ強化
⏭️ 次(Phase 10)
- 10_a: JITブートストラップ ✅ 完了
- 10_b: Lower(Core-1) – Const/Move/BinOp/Cmp/Branch/Ret(最小emit仕上げ中)
- 10_c: ABI/呼出し – JIT→JIT/JIT→VM、例外バイアウト(実行経路を実体化)
- 10_d: コレクション基礎 – Array/Mapブリッジ
- 10_e: BoxCall高速化 – Thunk/PIC直結
- 10_f: TypeOp/Ref/Weak/Barrier(最小)
- 10_g: 診断/ベンチ/回帰
- 10_h: 硬化・最適化調整
参考リンク
- フェーズ10ロードマップ:
docs/development/roadmap/phases/phase-10/phase_10_cranelift_jit_backend.md - MIR命令セット:
docs/reference/mir/INSTRUCTION_SET.md - VM/Thunk/PIC:
docs/development/roadmap/phases/phase-9/phase_9_79b_3_vm_vtable_thunks_and_pic.md
Parking Lot(後でやる)
- Lower emitのテスト雛形
- CLIFダンプ/CFG表示(
NYASH_JIT_DUMP=1) - VM
--vm-statsとJIT統計の統合