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

Phase 12: Nyashコード共有エコシステム - Everything is Box の実現

Status note (Phase15): このフォルダは「統一TypeBox ABI」の長期設計青写真です。現在の main 実装は最小の v2 ABI に収束しており、実用重視で段階導入中です。現行仕様は docs/reference/plugin-abi/nyash_abi_v2.md を参照してください。Phase12 の要素create/destroy、型メタ、NyValue、vtable/RC/GCは前方互換を維持しつつ段階追加予定です。

🌟 最新ブレイクスルー (2025-09-02) - 統一TypeBox ABI誕生

🚨 究極の発見ユーザー定義Boxもプラグインに

AI先生たちの深い技術的検討により、革命的なアイデアが実現可能と判明

// ユーザーBoxもプラグインとして動的登録
NyashTypeBox* register_user_box(const char* name, 
                                NyashBoxMethods* methods);

これにより実現すること

  • 🎯 すべての箱をC ABI上で一つで管理
  • 🔄 ユーザー定義Box ↔ プラグインBox 完全相互運用
  • 🚀 Nyash側から見ると完全に統一された世界観

詳細:ユーザー定義Box統合 🆕

🔥 究極の統合すべてのプラグインがTypeBoxになる

「Everything is Box」哲学の完成形C ABIもNyash ABIも統一TypeBoxに統合

// 統一TypeBox - すべてのプラグインがこの形式に!
typedef struct {
    uint32_t abi_tag;        // 'TYBX' - すべて同じ
    uint16_t version;        // APIバージョン
    const char* name;        // "StringBox", "FileBox", etc.
    
    // 基本操作旧C ABI互換
    void* (*create)(void* args);
    void (*destroy)(void* self);
    
    // 高速メソッドディスパッチ(新機能)
    uint32_t (*resolve)(const char* name);    // 名前→ID変換
    NyResult (*invoke_id)(void* self,         // ID呼び出しJIT最適化
                         uint32_t method_id, 
                         NyValue* args, int argc);
    
    // メタ情報
    uint64_t capabilities;   // THREAD_SAFE | ASYNC_SAFE等
} NyashTypeBox;

3大AI専門家の統合案への評価:

  • Gemini: 「技術的妥当性は非常に高い。単なるアイデアではなく、堅牢なアーキテクチャ」
  • Codex: 「TypeBox統合は実現可能で有益。JIT最適化で33倍高速化も可能」
  • ChatGPT5: 「『Everything is Box』哲学に最も適した設計」設計に反映済み

🎯 なぜ統合するのか?

以前は2つのシステムが混在していました

  • C ABI:シンプルだが拡張性に限界
  • TypeBox:プラグイン間連携は可能だが別システム

統合により実現したこと

  1. 概念の統一すべてがTypeBoxという1つの形式
  2. プラグイン間連携が標準装備どのプラグインも他のBoxを作れる
  3. JIT/AOT最適化メソッドID化で最大33倍高速化
  4. 段階的移行:既存資産を保護しながら進化

🎯 重要な変更 (2025-09-01)

Phase 12の議論とビルトインBox廃止により、プラグインシステムが進化

新しい3層プラグインシステムが確立されました

# Nyashスクリプトプラグインユーザー定義Box
box DataProcessor {
    init {
        me.file = new FileBox()    # C ABIプラグイン使用
        me.math = new MathBox()    # C ABIプラグイン使用
        me.cache = new MapBox()    # これもC ABIプラグインビルトイン廃止
    }
    
    process(data) {
        local result = me.math.sin(data)
        me.file.write("log.txt", result.toString())
        return result
    }
}

# 使用例
local processor = new DataProcessor()
processor.process(3.14)  # すべてプラグインで動作!

📝 なぜ誤解が生まれたのか

「プラグイン」という言葉から、特別な仕組みが必要だと考えてしまいましたが、Nyashの「Everything is Box」哲学により、ユーザー定義Boxこそが最高のプラグインシステムでした。

詳細な分析:なぜ天才AIたちは間違えたのか

🚀 Phase 12の真の価値コード共有エコシステム同一実行の確立

最終ゴールは「Nyashコード → VM → JIT の同一実行」。同じプログラムがVMとJITで同じ意味・結果・副作用になるよう、ディスパッチ/ABI/Barrier/Safepointの規約を共有し、差分をなくします。テストハーネスで同値性を比較できるように整備します。

本当に必要なもの

  1. export/import構文

    # math_utils.ny
    export box MathUtils {
        factorial(n) { ... }
        fibonacci(n) { ... }
    }
    
    # main.ny
    import { MathUtils } from "math_utils.ny"
    local utils = new MathUtils()
    
  2. パッケージマネージャー

    nyash install awesome-math-utils
    nyash publish my-cool-box
    
  3. ドキュメント生成

    # @doc 素晴らしい数学ユーティリティ
    # @param n 計算したい数値
    # @return 階乗の結果
    export box MathUtils { ... }
    

📊 新しい統一プラグインシステム

Nyashエコシステム統一TypeBox ABI採用後
├── Nyashスクリプトプラグイン ← .nyashファイル純粋なNyashコード
└── 統一TypeBoxプラグイン    ← .so/.dllネイティブ実装
    ├── 基本機能旧C ABI互換
    ├── 高速ディスパッチJIT最適化
    └── プラグイン間連携(標準装備)

🔄 移行パス

  • 既存C ABIプラグイン → そのまま動作(互換レイヤー経由)
  • 新規プラグイン → 統一TypeBox形式で作成
  • 段階的移行 → ツールで自動変換支援

📚 プラグインシステムドキュメント

📦 レガシードキュメント(参考用)

💡 TypeBoxシンプルなプラグイン間連携

MapBox.keys()がArrayBoxを返したい場合

// TypeBox構造体型情報をBoxとして扱う
typedef struct {
    uint32_t abi_tag;       // 'TYBX'
    const char* name;       // "ArrayBox"
    void* (*create)(void);  // Box生成関数
} NyrtTypeBox;

// MapBox.keys()実装
void* map_keys(void* self, void* array_type_box) {
    NyrtTypeBox* array_type = (NyrtTypeBox*)array_type_box;
    void* array = array_type->create();  // ArrayBox生成
    // ... キーを追加
    return array;
}

詳細: C ABI TypeBox設計仕様書

プラグイン選択の指針

  • C ABIで済むなら、C ABIを使う(シンプルイズベスト)
  • Nyash ABIは以下の場合のみ
    • 他言語Python/Go等からの呼び出し
    • 複雑な型の相互運用が必要
    • 将来の拡張性を重視する場合

📝 MIR命令統合Phase 12での変更

  • PluginInvoke → BoxCall 統合
    • ビルトインBox廃止によりフォールバックがなくなる
    • BoxCallとPluginInvokeの区別が不要に
    • VM層でC ABI/Nyash ABI/Scriptを自動判定
    • Core-15 → Core-14 へ(命令数削減)

🛣️ 実装ロードマップ統一TypeBox ABI版

Phase 12.0: 統一TypeBox ABI実装1週間🆕

  • nyash_typebox.h完全ヘッダー定義
  • メソッドID解決・キャッシング機構
  • NyValue統一値表現の実装
  • 互換レイヤー既存C ABI→TypeBox
  • 📄 統一TypeBox ABI仕様

Phase 12.0.5: 移行ツール開発2週間🔧

  • プラグイン自動変換ツール
  • 検証・テストツール
  • パフォーマンスベンチマーク
  • サンプルプラグイン集
  • 📄 移行ガイド

現状サマリ2025-09-02

  • C ABITLV: 1/2/3/5/6/7/8でのプラグイン呼び出しはVMで安定運用中。returns_resultnyash.toml で制御可能。
  • JIT は VM と同じBox境界で動作フォールバック含む。Cranelift AOT のオブジェクト出力は未配線(スケルトン)。
  • MapBox を拡張stringキー、remove/clear/getOr/keysStr/valuesStr/toJsonkeys()/values() はランタイムシムで暫定提供。
  • Phase 12 設計TypeBox + Unified Dispatchは破壊的変更不要で段階導入可能と判断。

詳細タスクは TASKS.md を参照。

Phase 12.1: export/import構文2週間

  • exportキーワードのパーサー実装
  • importステートメントの実装
  • モジュール解決システム
  • 📄 詳細仕様書

Phase 12.2: パッケージ管理3週間

Phase 12.3: 開発者体験向上(継続的)

  • ドキュメント生成ツール
  • VSCode拡張補完・定義ジャンプ
  • サンプルパッケージ作成

📚 関連ドキュメント

🎯 プラグインシステムガイド(メインドキュメント)

📐 設計ドキュメントdesign/

📋 仕様書specs/

💬 議論の過程discussions/

  • ABI戦略議論: discussions/abi-strategy-discussion/
  • Nyash ABI詳細: discussions/nyash-abi-discussion/

📦 アーカイブ

  • 初期提案: archive/ ← 過去の提案や古いドキュメント

AIたちがなぜ複雑な解決策を提案したのか、その議論の過程は archive/ ディレクトリに保存されています。良い教訓として残しておきます。