Phase 10.10: GC Switchable Runtime & Unified Debug System 実装完了

Phase 10.10の主要実装:
- GcConfigBox: GC設定の実行時制御(counting/trace/barrier_strict)
- DebugConfigBox: デバッグ設定の統一管理(JIT events/stats/dump/dot)
- メソッドディスパッチ: system_methods.rsで両Boxのメソッド実装
- CountingGC動作確認: write_barriers正常カウント(VM実行時)

技術的詳細:
- BoxCore/BoxBase統一アーキテクチャを活用
- setFlag/getFlag/apply/summaryメソッドで統一API提供
- 環境変数経由でVM/JITランタイムと連携
- GcConfigBox.apply()は次回実行から有効(ランタイム作成前に環境変数参照)

テスト済み:
- examples/gc_counting_demo.nyash: CountingGCの動作確認
- write_barriers=3でArray.push/set, Map.setを正しくカウント
- NYASH_GC_TRACE=1でGC統計出力確認

Box-First哲学の体現: 設定も制御も観測もすべてBox!

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Moe Charm
2025-08-28 22:31:51 +09:00
parent 4e1b595796
commit d67f27f4b8
27 changed files with 1341 additions and 63 deletions

View File

@ -336,3 +336,70 @@ NYASH_JIT_EXEC=1 NYASH_JIT_THRESHOLD=1 ./target/release/nyash --backend vm examp
- `NYASH_JIT_EVENTS=1` でイベントJSONを確認fallback/trap理由が出る
- `cargo clean -p nyash-rust` → 再ビルド
- 数値緩和: `NYASH_JIT_HOSTCALL_RELAX_NUMERIC=1` で i64→f64 のコアーションを許容(既定は `native_f64=1` 時に有効)
### ✅ 10.9-β HostCall統合完了
- math.*(関数スタイル): 署名F64一致時に allow/sig_ok をイベント出力。戻りは Float 表示で安定。
- Map.get:
- 受け手=param, key=I64 → `id: nyash.map.get_h`Handle,I64で allow かつ JIT実行
- 受け手=param, key=Handle → `id: nyash.map.get_hh`Handle,Handleで allow かつ JIT実行HH経路
- 受け手がparamでない場合 → fallback`reason: receiver_not_param`)をイベントに記録し VM 実行
- RO系length/isEmpty/charCodeAt/size: 受け手=param は allow/sig_ok。受け手≠param は fallback/receiver_not_param を必ず記録。
- Quick flags: `NYASH_JIT_EVENTS=1` のとき Runner が未指定の `NYASH_JIT_THRESHOLD` を自動で `1` に設定Lowerが1回目から走ってイベントが出る
- 代表コマンド:
```bash
# math.min関数スタイル
NYASH_JIT_EXEC=1 NYASH_JIT_THRESHOLD=1 NYASH_JIT_NATIVE_F64=1 NYASH_JIT_EVENTS=1 \
./target/release/nyash --backend vm examples/jit_math_function_style_min_float.nyash
# Map.getパラメータ受けHandleキー → HH直実行
NYASH_JIT_EXEC=1 NYASH_JIT_THRESHOLD=1 NYASH_JIT_HOSTCALL=1 NYASH_JIT_EVENTS=1 \
./target/release/nyash --backend vm examples/jit_map_get_param_hh.nyash
# Map.get非パラメータ受け → fallback記録
NYASH_JIT_EXEC=1 NYASH_JIT_THRESHOLD=1 NYASH_JIT_HOSTCALL=1 NYASH_JIT_EVENTS=1 \
./target/release/nyash --backend vm examples/jit_hostcall_map_get_handle.nyash
```
### ⏭️ 10.9-δ(書き込みの導線のみ:次)
- 方針: 既定は read-only`policy.read_only=true`)。書き込みは fallback`reason: policy_denied_mutating`)をイベントで可視化。(実装済)
- 対象: Array.push/set, Map.set/delete など。イベントIDは `*_h`Handle受けに統一。
- 仕上げ: `JitPolicyBox` に opt-in 追加(完了)
- `set("read_only", true|false)` / `setWhitelistCsv("id1,id2")` / `addWhitelist("id")` / `clearWhitelist()`
- プリセット: `enablePreset("mutating_minimal")`Array.push_h / `enablePreset("mutating_common")`Array.push_h, Array.set_h, Map.set_h
---
## 🚀 Phase 10.10 Python→Nyash→MIR→VM/Native 実用化整備(着手)
目標DoD 抜粋)
- DebugConfigBox+Rustで dump/events/stats/dot/phi_min 等の切替を一本化CLI/env/Box同期
- GC切替Null/CountingをCLI/Boxから操作可能、root/bARRIERサイト観測が動く
- HostCallRO/一部WOが param でallow、非paramでfallbackイベントで確認可
- 代表サンプル最小集合でE2E安定
着手タスクIn Progress
1) DebugConfigBox新規
- setFlag(name,bool)/setPath(name,string)/apply()/summary()env反映
- 対応: NYASH_JIT_EVENTS/…/DUMP/…/DOT最小
2) GC切替のCLI/Box連携Pending
3) 代表サンプル/README整備Pending
---
### ⏸️ Checkpoint2025-08-28 再起動用メモ)
- 10.9-β/δ 完了RO allow+fallback可視化、WOはpolicy/whitelistでopt-in
- HH経路Map.get_hh実装済み。戻りはCallBoundaryBoxでBoxRef復元。
- JitPolicyBox: addWhitelist/clearWhitelist/enablePresetmutating_minimal/common 等)
- DebugConfigBox: JIT観測系events/stats/dump/dotをBoxで一元制御→apply()でenv反映
- GcConfigBox: counting/trace/barrier_strict をBoxで操作→apply()でenv反映
- 例:
- jit_map_get_param_hh.nyashHH直実行
- jit_policy_optin_mutating.nyashmutatingのopt-in
- gc_counting_demo.nyashCountingGcの可視化、VMパス
次の着手Restart後すぐ
1) Runner統合DebugConfigの反映優先度/CLI連携の整理
- 目標: CLI→DebugConfigBox→env→JIT/VM の一本化既存JitConfigとの整合
2) GCドキュメントに GcConfigBox の使用例を追記(短文 + コマンド)
3) examples/README.md最小手順
- HH直実行、mutating opt-in、CountingGc demo の3本だけ掲載