🎯 革命的発見: プラグインC ABI = JIT→EXE変換の統一基盤 ## 主な変更点 - ArrayBoxプラグイン: get/set/push/size/is_empty実装 - MapBoxプラグイン: size/get/has実装(ROメソッドのみ) - Phase 10.1ドキュメント: プラグインBox統一化計画 - デモファイル3種: プラグイン動作確認用 ## 技術的詳細 - BID-FFI (Box ID Foreign Function Interface) 活用 - 既存のプラグインシステムでJIT/AOT統一可能 - スタティックリンクでオーバーヘッド解消 - "Everything is Box → Everything is Plugin → Everything is Executable" ## テスト済み - array_plugin_demo.nyash: 基本動作確認 ✅ - array_plugin_set_demo.nyash: set操作確認 ✅ - map_plugin_ro_demo.nyash: RO操作確認 ✅ 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
Examples Quick Start (Minimal)
このページはPhase 10.10の再起動用ミニ手順です。3つだけ確かめればOK。
- 事前ビルド:
cargo build --release -j32 - 実行は
./target/release/nyashを使用
1) HH直実行(Map.get_hh)
- 目的: 受け手/キーが関数パラメータのとき、JIT HostCallを許可(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
- 期待:
allow id: nyash.map.get_hhイベントが出る。戻り値はvalue1。
2) mutating opt-in(JitPolicyBox)
- 目的: 既定 read_only。必要最小の書き込みだけホワイトリストで許可。
- 実行:
NYASH_JIT_EXEC=1 NYASH_JIT_THRESHOLD=1 NYASH_JIT_HOSTCALL=1 NYASH_JIT_EVENTS=1 \
./target/release/nyash --backend vm examples/jit_policy_optin_mutating.nyash
- 期待: 1回目は
policy_denied_mutatingでfallback、whitelist後の2回目はallow。
イベントの見やすさ(任意):
# コンパイル時(lower)のみ: phase="lower" が付与(compileは明示opt-in)
NYASH_JIT_EVENTS_COMPILE=1 NYASH_JIT_EVENTS_PATH=events.jsonl ...
# 実行時(runtime)のみ: phase="execute" が付与される
NYASH_JIT_EVENTS_RUNTIME=1 NYASH_JIT_EVENTS_PATH=events.jsonl ...
3) CountingGc デモ
- 目的: GCのカウント/トレース/バリア観測の導線確認(VM経路)。
- 実行:
./target/release/nyash --backend vm examples/gc_counting_demo.nyash
- Tips: 詳細ログは
NYASH_GC_COUNTING=1 NYASH_GC_TRACE=2を併用。
4) Policy whitelist(events分離)
- 目的: read_only下でのfallback→allow(whitelist)と、compile/runtimeのphase分離をイベントで確認。
- 実行(しきい値=1を明示/またはDebugConfigBoxでapply後にRunnerが自動設定):
NYASH_JIT_THRESHOLD=1 NYASH_JIT_HOSTCALL=1 \
./target/release/nyash --backend vm examples/jit_policy_whitelist_demo.nyash
- 期待:
policy_events.jsonlにphase:"lower"(計画)とphase:"execute"(実績)が出る。
補足
- DebugConfigBox(events/stats/dump/dot)と GcConfigBox は Box から
apply()で環境へ反映できます。 --emit-cfg path.dotまたはDebugConfigBox.setPath("jit_dot", path)でCFGのDOT出力。いずれもdumpを自動有効化。- イベントは
phaseフィールドで区別(lower/execute)。jit_events_pathでJSONL出力先を指定可能。