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

4.1 KiB
Raw Blame 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.rsNyrtValue/TypeBox/関数ポインタ型、最小API
    • 追加: src/runtime/type_registry.rsTypeId→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