Files
hakorune/docs/development/roadmap/phases/phase-12/PLAN.md
Moe Charm 53d88157aa Phase 12: 統一TypeBox ABI実装開始 - ChatGPT5による極小コアABI基盤構築
- 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>
2025-09-03 05:04:56 +09:00

63 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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`