Phase 10_6b scheduler complete; 10_4 GC hooks + counting/strict tracing; 10_c minimal JIT path (i64/bool consts, binop/compare/return, hostcall opt-in); docs & examples; add Phase 10.7 roadmap (JIT branch wiring + minimal ABI).

This commit is contained in:
Moe Charm
2025-08-27 17:06:46 +09:00
parent de03514085
commit ddae7fe1fc
67 changed files with 4618 additions and 268 deletions

View File

@ -1,9 +1,15 @@
# 🎯 CURRENT TASK - 2025-08-27Phase 10_b → 10_c
# 🎯 CURRENT TASK - 2025-08-27Phase 10_b → 10_c → 10_4/10_6横串
フェーズ10はJIT実用化へCore-1 Lowerの雛形を固めつつ、呼出/フォールバック導線を整えるよ。
## ⏱️ 今日のフォーカス10_b: Lower(Core-1) 最小化 + 10_c準備
- 目的: IRBuilder抽象/Lowerを整備し、JIT関数テーブルとVM分岐の足場を実装。次の10_cで本実行に繋げる。
## ⏱️ 今日のサマリ10_c実行経路の堅牢化GC/スケジューラ導線
- 目的: JIT実行を安全に通す足場を仕上げつつ、GC/スケジューラ導線を整備し回帰検出力を上げる。
- 10_c: panic→VMフォールバック`catch_unwind`/ JIT経路のroot区域化 / Core-1 i64 param minimal pass`emit_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 最小化(進行中 → ほぼ完了)
@ -14,16 +20,18 @@
- JIT関数テーブルstub: handle→ダミー関数✅ 完了
- 残: 最小emitconst/binop/retをCLIFで生成し、関数ポインタをテーブル登録feature有効時
→ 実装: CraneliftBuilderでi64用の`const/binop/ret`を生成し、JIT関数テーブルへクロージャとして登録完了args未対応・i64専用
2) 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未実装
2) 10_c: 呼出/フォールバック(最小経路)✅ 完了
- VM側の疑似ディスパッチログcompiled時/実行時ログ)✅
- JIT実行→`VMValue`返却、panic時VMフォールバック ✅(`engine.execute_handle``catch_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・bool等は未emit
- 引数は未対応Closureは無視。MIRのLoad/Param配線が必要
- Compare/Branchはカウンタのみemit未着手
- trap→VMフォールバックは未実装Craneliftトラップハンドリング追加が必要
- 返り値はi64VMValue::Integerに限定。f64はconst最小emit、boolはi64 0/1へ正規化分岐条件入力に対応
- 引数はi64のみ最小パス。複数引数はparamマッピングで通過、非i64は未対応 → 次対応
- Branch/JumpのCLIF実配線は準備済みビルダー側は統計カウント。CLIFブロック配線は後続で実装。
- JIT/VM統合統計フォールバック率/時間の一括出力)未統合 → 次対応
### すぐ試せるコマンド
```bash
@ -36,6 +44,14 @@ NYASH_JIT_STATS=1 NYASH_JIT_DUMP=1 NYASH_JIT_EXEC=1 \
# 任意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
@ -48,7 +64,7 @@ cargo build --release -j32 --features cranelift-jit
- 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_d: コレクション基礎 Array/Mapブリッジ ✅ 完了param経路
- 10_e: BoxCall高速化 Thunk/PIC直結
- 10_f: TypeOp/Ref/Weak/Barrier最小
- 10_g: 診断/ベンチ/回帰
@ -63,3 +79,31 @@ cargo build --release -j32 --features cranelift-jit
- 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<Box>でローカルnew値もHostCall対象に
- 型拡張(整数以外、文字列キーなど)
- BoxCallカバレッジ拡張とデオプ/フォールバック強化