Files
hakorune/docs/development/roadmap/phases/phase-12/PLAN.md

63 lines
4.1 KiB
Markdown
Raw Normal View History

# Phase 12: ユーザー箱とプラグイン箱の境界撤廃 + Nyash ABI 導入計画(下準備)
目的
- 境界撤廃: ユーザー箱プラグイン箱内蔵箱を「TypeBox + Instance」に統一。
- Nyash ABI: vtableslot優先で高速・型安全に呼び出し、未対応は現行C ABI(TLV)へフォールバック。
- 綺麗な箱化: VM/JIT/LLVM/WASMが同一ディスパッチ構造を共有できる形へ段階導入。
- 同一実行: Nyashコードが VM と JIT で「意味・結果・副作用」が一致(同値性がテストで担保)。
非スコープ(当面)
- 既存C ABIの破壊的変更。段階導入のためC ABIは維持fallback専用
- 直ちに全プラグインを移行することまずは1プラグインでPoC
設計の要点(サマリ)
- TypeBox静的メタ: 型名、メソッドslot→関数ポインタ、属性可変/不変など)。
- Instance実体: type_id + 実体ハンドル(ユーザー/プラグイン/内蔵いずれも統一の箱)。
- VMディスパッチ: method_id/slotがあれば vtable 直呼び。なければ name→slot 解決→vtablePIC→C ABI。
- JIT: まずはホストコールthunkでTypeBox vtable呼び出し→後続でモモーフィック直埋め最適化。
- GC/Barrier: BoxCall(setField)/ArraySetでWrite Barrier発火既存fast-path維持
トグル(管理棟に集約予定)
- NYASH_ABI_VTABLE=1 … vtable経路を有効化既定OFF
- NYASH_ABI_STRICT=1 … vtable未登録メソッド時にC ABIフォールバック禁止実験
段階導入Tier
1) Tier-0雛形
- 追加: `src/runtime/type_box_abi.rs`NyrtValue/TypeBox/関数ポインタ型、最小API
- 追加: `src/runtime/type_registry.rs`TypeId→TypeBox参照
- VM: `execute_boxcall` に vtable 優先のstubを追加`NYASH_ABI_VTABLE=1`時のみ)
- Docs/CI: 仕様追記・スモーク追加準備まだvtableは未実装でもOK
2) Tier-1実証
- 1プラグイン例: MapBox.getSを Nyash ABI で動作させるVM→vtable→関数ポインタ
- JIT: vtable呼び出しthunk追加VM側レジストリから関数ポインタ取得
- テスト: C ABI とNyash ABIの同等性差分テスト
3) Tier-2拡張
- 内蔵箱のTypeBox化Array/String/Mapの主要メソッド
- ユーザー箱InstanceBoxをTypeBox上に還元Rust関数を関数ポインタで包む
- name→slot化の徹底slot_registry と連携強化)
4) Tier-3セルフホスティング準備
- Nyash ABI のC実装を開始Rust⇔C シム)
- JIT: モノモーフィックサイトで vtable_slot 直呼び最適化
完了条件Phase 12の下準備
- PLAN/TASKS/TECHNICAL_DECISIONS に統一方針と段階計画が明記されている。
- `NYASH_ABI_VTABLE` トグルの導入方針が定義済み(まだコードは雛形で可)。
- VM側にvtable優先呼び出しstubの追加計画が固まり、レジストリ/TypeBox ABIの最小構成が決まっている。
- Cross-backend同値テストの設計方針が固まっているVM/JITを同条件で走らせ、結果/ログ/副作用を比較する仕組み)。
次アクションこのPR/コミット範囲外の実装)
- TypeBox ABIモジュール雛形の追加、VM vtable stub の実装既定OFF
- MapBoxで最小PoCgetSを先行導入C ABIと同じ結果を返す
- docs/TASKSのTier-0チェックを更新、CIスモークの草案を追加。
検証(同一実行)の方針
- テストハーネス: 同一 Nyash プログラムを VM と JIT で実行し、以下を比較
- 戻り値の等価NyashValue同値: int/float/bool/string/null/void
- Box状態の差分対象: Map/Array/Instance の代表ケース)
- ログイベントの正規化比較(必要最小限)
- スコープ: array/field/arithmetic/extern_call を最小セットにし、段階的に拡張
- CI連携: `consistency` ラベルのテストジョブを追加(将来)
参考ドキュメント
- Nyash ABI Minimal Coreと進化戦略: `docs/reference/abi/NYASH_ABI_MIN_CORE.md`