nyash

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

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

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

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

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

これにより実現すること

詳細:ユーザー定義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専門家の統合案への評価:

🎯 なぜ統合するのか?

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

統合により実現したこと

  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最適化)
    └── プラグイン間連携(標準装備)

🔄 移行パス

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

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

💡 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設計仕様書

プラグイン選択の指針

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

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

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

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


現状サマリ(2025-09-02)

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

Phase 12.1: export/import構文(2週間)

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

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

📚 関連ドキュメント

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

📐 設計ドキュメント(design/)

📋 仕様書(specs/)

💬 議論の過程(discussions/)

📦 アーカイブ


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