AI先生たちの深い技術的検討により、革命的なアイデアが実現可能と判明!
// ユーザーBoxもプラグインとして動的登録
NyashTypeBox* register_user_box(const char* name,
NyashBoxMethods* methods);
これにより実現すること:
詳細:ユーザー定義Box統合 🆕
「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つのシステムが混在していました:
統合により実現したこと:
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たちは間違えたのか
最終ゴールは「Nyashコード → VM → JIT の同一実行」。同じプログラムがVMとJITで同じ意味・結果・副作用になるよう、ディスパッチ/ABI/Barrier/Safepointの規約を共有し、差分をなくします。テストハーネスで同値性を比較できるように整備します。
# math_utils.ny
export box MathUtils {
factorial(n) { ... }
fibonacci(n) { ... }
}
# main.ny
import { MathUtils } from "math_utils.ny"
local utils = new MathUtils()
nyash install awesome-math-utils
nyash publish my-cool-box
# @doc 素晴らしい数学ユーティリティ
# @param n 計算したい数値
# @return 階乗の結果
export box MathUtils { ... }
Nyashエコシステム(統一TypeBox ABI採用後):
├── Nyashスクリプトプラグイン ← .nyashファイル(純粋なNyashコード)
└── 統一TypeBoxプラグイン ← .so/.dll(ネイティブ実装)
├── 基本機能(旧C ABI互換)
├── 高速ディスパッチ(JIT最適化)
└── プラグイン間連携(標準装備)
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;
}
returns_result
も nyash.toml
で制御可能。keys()/values()
はランタイムシムで暫定提供。詳細タスクは TASKS.md を参照。
discussions/abi-strategy-discussion/
discussions/nyash-abi-discussion/
archive/
← 過去の提案や古いドキュメントAIたちがなぜ複雑な解決策を提案したのか、その議論の過程は archive/
ディレクトリに保存されています。良い教訓として残しておきます。