- TypeBox ABI雛形: メソッドスロット管理システム追加 - Type Registry: Array/Map/StringBoxの基本メソッド定義 - Host API: C ABI逆呼び出しシステム実装 - Phase 12ドキュメント整理: 設計文書統合・アーカイブ化 - MIR Builder: クリーンアップと分離実装完了 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
63 lines
4.1 KiB
Markdown
63 lines
4.1 KiB
Markdown
# Phase 12: ユーザー箱とプラグイン箱の境界撤廃 + Nyash ABI 導入計画(下準備)
|
||
|
||
目的
|
||
- 境界撤廃: ユーザー箱/プラグイン箱/内蔵箱を「TypeBox + Instance」に統一。
|
||
- Nyash ABI: vtable(slot優先)で高速・型安全に呼び出し、未対応は現行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 解決→vtable/PIC→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で最小PoC(getS)を先行導入(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`
|