Files
hakorune/docs/development/current/CURRENT_TASK.md

6.4 KiB
Raw Blame History

🎯 CURRENT TASK - 2025-08-27Phase 10_b → 10_c → 10_4/10_6横串

フェーズ10はJIT実用化へCore-1 Lowerの雛形を固めつつ、呼出/フォールバック導線を整えるよ。

⏱️ 今日のサマリ10_c実行経路の堅牢化GC/スケジューラ導線)

  • 目的: JIT実行を安全に通す足場を仕上げつつ、GC/スケジューラ導線を整備し回帰検出力を上げる。
    • 10_c: panic→VMフォールバックcatch_unwind/ JIT経路のroot区域化 / Core-1 i64 param minimal passemit_param_i64 + LowerCoreで供給
    • 10_4a/10_4b: GC導線 + Write-Barrier挿入ArraySet/RefSet/BoxCall、root APIenter/pin/leave
    • 10_4c: CountingGcカウンタ出力roots/BoxRef内訳、depth2リーチャビリティ観測NYASH_GC_TRACE=1/2/3 完了
    • 10_4d: STRICTバリア検証CountingGc前後比較で漏れ即検出 完了(NYASH_GC_BARRIER_STRICT=1
    • 10_6b: シングルスレ・スケジューラspawn/spawn_after/poll、Safepointでpoll()連携、NYASH_SCHED_POLL_BUDGET対応 完了
    • ベンチ: CLIベンチへJIT比較追加ウォームアップあり、スクリプト版examples/ny_bench.nyash追加TimerBoxでops/sec

直近タスク(小さく早く)

  1. 10_b: Lower/Core-1 最小化(進行中 → ほぼ完了)
    • IRBuilder抽象 + NoopBuilderemit数カウント 完了
    • CraneliftBuilder 雛形feature cranelift-jit 完了
    • LowerCoreConst/Copy/BinOp/Cmp/Branch/Ret 完了emit→Builder
    • Engine.compile: builder選択feature連動Lower実行JIT handle発行 完了
    • JIT関数テーブルstub: handle→ダミー関数 完了
    • 残: 最小emitconst/binop/retをCLIFで生成し、関数ポインタをテーブル登録feature有効時 → 実装: CraneliftBuilderでi64用のconst/binop/retを生成し、JIT関数テーブルへクロージャとして登録完了args未対応・i64専用
  2. 10_c: 呼出/フォールバック(最小経路) 完了
    • VM側の疑似ディスパッチログcompiled時/実行時ログ)
    • JIT実行→VMValue返却、panic時VMフォールバック engine.execute_handlecatch_unwind
    • Core-1最小: i64 param/return、Const(i64/bool→0/1)、BinOp/Compare/Return
    • HostCall最小Array/Map: len/get/set/push/sizeゲートNYASH_JIT_HOSTCALL=1
    • Branch/Jumpは統計カウントまでCLIFブロック配線は後続フェーズで拡張

備考(制限と次の着手点)

  • 返り値はi64VMValue::Integerに限定。f64はconst最小emit、boolはi64 0/1へ正規化分岐条件入力に対応
  • 引数はi64のみ最小パス。複数引数はparamマッピングで通過、非i64は未対応 → 次対応
  • Branch/JumpのCLIF実配線は準備済みビルダー側は統計カウント。CLIFブロック配線は後続で実装。
  • JIT/VM統合統計フォールバック率/時間の一括出力)未統合 → 次対応

すぐ試せるコマンド

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

# スクリプトベンチTimerBox版
./target/release/nyash examples/ny_bench.nyash
./target/release/nyash --backend vm examples/ny_bench.nyash
NYASH_JIT_EXEC=1 NYASH_JIT_THRESHOLD=1 ./target/release/nyash --backend vm examples/ny_bench.nyash

# CLIベンチウォームアップ3バックエンド比較
./target/release/nyash --benchmark --iterations 200

現在の地図Done / Next

完了Phase 9.79b

  • TypeMeta/Thunk正式化・Poly-PIC2〜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ブリッジ 完了param経路
  • 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統計の統合

残タスク(箇条書き)

  • 10_c:
    • CLIF: Branch/Jumpの実ブロック配線、Compare結果の適用確認
    • 返り値/引数の型拡張bool/f64、複数引数の網羅
    • JIT/VM統合統計フォールバック率/時間の一括出力)
  • 10_4c:
    • リーチャビリティ観測の深さ拡張depth=2→Nと軽量ダンプ
    • 将来実Mark/TraverseのPoC解放はしない
  • 10_4d:
    • STRICTモードのCI導入CountingGc前提/ goldenベンチ導入
  • 10_6b:
    • スケジューラ: poll予算の設定ファイル化、将来のscript API検討継続
  • ベンチ:
    • examples/ny_bench.nyashのケース追加(関数呼出/Map set-getとループ回数のenv化

10_d まとめ(完了)

  • HostCall導線Import+Callと引数配線i64×N→i64?)を実装
  • C-ABI PoCRust内: nyash.array.{len,push,get,set} / nyash.map.size
  • Param経路のE2E確認配列/Mapを関数引数に渡す形でlen/sizeが正しく返る
  • セーフティ: NYASH_JIT_HOSTCALL=1ゲート運用、問題時はVMフォールバック

移管10_e/10_fへ

  • ハンドル表PoCu64→Arcでローカルnew値もHostCall対象に
  • 型拡張(整数以外、文字列キーなど)
  • BoxCallカバレッジ拡張とデオプ/フォールバック強化