- Add opt-in optimizations (defaults OFF) - Ret purity verifier: NYASH_VERIFY_RET_PURITY=1 - strlen FAST enhancement for const handles - FAST_INT gate for same-BB SSA optimization - length cache for string literals in llvmlite - Expand bench harness (tools/perf/microbench.sh) - Add branch/call/stringchain/arraymap/chip8/kilo cases - Auto-calculate ratio vs C reference - Document in benchmarks/README.md - Compiler health improvements - Unify PHI insertion to insert_phi_at_head() - Add NYASH_LLVM_SKIP_BUILD=1 for build reuse - Runtime & safety enhancements - Clarify Rust/Hako ownership boundaries - Strengthen receiver localization (LocalSSA/pin/after-PHIs) - Stop excessive PluginInvoke→BoxCall rewrites - Update CURRENT_TASK.md, docs, and canaries 🤖 Generated with [Claude Code](https://claude.com/claude-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.hako
- 期待:
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.hako
- 期待: 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.hako
- 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.hako
- 期待:
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出力先を指定可能。
5) AOT最小手順(--compile-native)
- 目的: Craneliftでオブジェクトを生成し、
libnyrtとリンクしてEXE化。 - 事前:
cargo build --release --features cranelift-jit - 実行例(String/Integer/Consoleの最小):
./target/release/nyash --compile-native examples/aot_min_string_len.hako -o app && ./app
# 結果は `Result: <val>` として標準出力に表示
- Python最小チェーン(RO):
./target/release/nyash --compile-native examples/aot_py_min_chain.hako -o app && ./app
- スクリプト版(詳細な手順):
tools/build_aot.sh <file> -o <out>(Windowsはtools/build_aot.ps1)
6) Scheduler(Phase 10.6b 準備)
- 目的: 協調スケジューラのSafepoint連携を観測
- 実行(デモ):
NYASH_SCHED_DEMO=1 NYASH_SCHED_POLL_BUDGET=2 \
./target/release/nyash --backend vm examples/scheduler_demo.hako
- 期待:
[SCHED] immediate task ran at safepointと[SCHED] delayed task ran at safepointが出力