Files
hakorune/docs/private/research/paper-02-box-theory-jit/02-paper-draft.md

4.2 KiB
Raw Blame History

Box-First JIT: Decoupled, Probe-Driven JIT Enablement in Nyash within 24 Hours (WIP)

1. Introduction

JIT を安全に導入しつつ短時間で価値を出すには、実装より先に「戻せる足場」を設計する必要がある。本稿は Nyash において、箱理論Box-First— 設定・境界・観測をまず「箱」に封じ込める — を適用し、24時間で分岐/PHI/f64 の JIT 経路と可視化・統計・回帰検出を着地させた実務手法を報告する。

貢献は以下である。

  • Box-First の JIT適用法則設定/境界/可視化/可逆性の箱化)
  • 設定箱 JitConfigBox + runtime capability probe + current()参照の実装
  • JIT⇔VM 疎結合JitValue/HandleRegistry/フォールバック)の設計
  • 型付きシグネチャの足場i64/f64/bool混在、b1 は内部→将来ワンフリップ切替)
  • CFG/PHI の DOT 可視化cond:b1/phi:b1、統合 JIT 統計

2. Box-First Design

2.1 Configuration as a Box

  • JitConfigBox で env 直読みを排し、apply() で env と jit::config::set_current() を同時反映。
  • 起動時に probe_capabilities()(例: supports_b1_sig=false)を適用して、native_bool_abi を自動調整。
  • ホットパスは常に jit::config::current() を参照テスト・CLI・箱の三者を束ねる

2.2 Boundary as a Box

  • JIT/VM 境界は JitValueadapter、Host 側は HandleRegistry(u64↔Arc) に集約。
  • VMValue は境界一箇所でのみ変換。panic は catch_unwind→VM へフォールバック。

2.3 Typed ABI Scaffold

  • prepare_signature_typed(params, ret_is_f64) に一本化された型決定。
  • ParamKind::B1 は現状 I64(0/1) にマップ(将来 types::B1 に一行切替)。
  • 戻り F64 はビルダ状態 desired_ret_is_f64 に紐づけてトランポリンを選択env依存を排除

2.4 b1 Internal Path (Conservative)

  • ABI は I64(0/1) のまま、内部で push_block_param_b1_at により b1 正規化icmp!=0
  • LowerCore は Compare の dst を bool として記録し、全入力が bool の PHI を bool-phi として b1 で取得。

2.5 Observability & Reversibility

  • NYASH_JIT_DUMP/…_JSONNYASH_JIT_DOT
  • DOT に cond:b1phi:b1 を表示。統合 JIT 統計に exec_ok/trap/fallback_rate。
  • すべての切替は Box/flag/feature によって可逆で、フォールバック経路が常に通る。

3. Implementation Overview

  • src/jit/config.rs: current()/set_current()/probe_capabilities()/apply_runtime_caps()
  • src/boxes/jit_config_box.rs: env排除・箱中心、from_runtime_probe() でcapability反映
  • src/jit/lower/{core,builder}.rs: 型付きシグネチャ・b1内部API・BinOp/Compareの昇格
  • src/jit/engine.rs: dump/統計・DOT 出力接続

4. Evaluation (Early)

  • 正当性VM vs JIT
    • branch_return, jit_phi_demo, jit_f64_arith で一致f64 は NYASH_JIT_NATIVE_F64=1)。
  • 性能compileコスト込み
    • arith_loop_100k: JIT ≈ 1.40× VM、f64_add: JIT ≈ 1.06× VM、branch_return: ≈VM 同等。
  • 観測fallback率・handle数・cfg/phi可視化により回帰確認が容易。
  • LuaJIT/HotSpot のプロファイル駆動設計、Cranelift/Wasmtime の安全分離設計。
  • Box-First は DI/境界設計に近似するが、Box共有できる実体で統一し、開発・回帰・視覚化の軸まで包含する点が異なる。

6. Limitations & Future Work

  • B1 ABI は現行ツールチェーン非対応:supports_b1_sig=true 確認後、ParamKind::B1→types::B1 に一行切替。
  • f64/bool の完全ネイティブ化には、混在署名の網羅とトランポリン形状整理が必要。
  • 回帰強化小さなゴールデンb1合流、昇格混在、フォールバック異常系と stats.jsonlabi_modeを追加。

7. Conclusion

箱理論Box-Firstにより、実装前に戻せる足場を先に固定し、AI支援下でも力づく最適化に頼らず、可視・可逆・切替可能なJITを24時間で実用化した。設定・境界・観測の箱化、typed ABI の一本化、b1内部パス、DOT/統計の可視化は、段階的最適化を安定に進める強力な作法である。