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>
This commit is contained in:
Moe Charm
2025-09-03 05:04:56 +09:00
parent e2e25f6615
commit 53d88157aa
84 changed files with 4739 additions and 2750 deletions

View File

@ -0,0 +1,229 @@
# Nyash ABIをC実装TypeBoxで提供する設計仕様書
## 🎯 概要
「Everything is Box」哲学の究極形**ABIすらBoxとして扱う**
本設計は、Nyash ABIをTypeBoxC ABIとして実装することで、Rust依存を排除し、完全なセルフホスティングを実現する革新的アプローチです。
**3大AI専門家の評価**
- **Gemini**: 「技術的妥当性が高く、言語哲学とも合致した、極めて優れた設計」
- **Codex**: 「Feasible and attractive: ABI-as-Box completes the idea」
- **ChatGPT5**: 「実装に耐える設計。10の改善点で完璧」統合ABI設計に反映済み
## 📐 技術設計
### 基本アーキテクチャ
```c
// nyash_abi_provider.h - Codex推奨の16バイトアライメント版
typedef struct __attribute__((aligned(16))) {
// TypeBox標準ヘッダバージョニング対応
uint32_t abi_tag; // 'NABI' (0x4942414E)
uint16_t api_version; // APIバージョン
uint16_t struct_size; // 構造体サイズ(互換性チェック用)
const char* name; // "NyashABIProvider"
void* (*create)(void); // プロバイダインスタンス生成
// Nyash ABI専用拡張コンテキストベース
struct {
// セレクターキャッシング対応
nyash_status (*lookup_selector)(nyash_ctx*, uint64_t type_id, const char* name, nyash_selector* out);
nyash_status (*call)(nyash_ctx*, void* obj, nyash_selector sel, nyash_value* argv, int argc, nyash_value* out);
// 基本操作
nyash_status (*create_value)(nyash_ctx*, uint64_t type_id, void* data, uint64_t flags, nyash_value* out);
void (*retain)(void* obj);
void (*release)(void* obj);
// 型情報
uint64_t (*type_of)(nyash_value value);
bool (*is_null)(nyash_value value);
bool (*eq)(nyash_value a, nyash_value b);
uint64_t (*hash)(nyash_value value);
} nyash_ops;
// 機能ビット(将来拡張用)
uint64_t capabilities; // NYASH_CAP_ASYNC | NYASH_CAP_WEAKREF等
void* reserved[4]; // 将来拡張用
} NyashABITypeBox;
```
### NyashValue - 16バイト最適化構造Codex提案
```c
// JIT/LLVM最適化を考慮した16バイトアライメント
typedef struct __attribute__((aligned(16))) {
uint64_t type_id; // 型識別子上位16bit: vendor, 8bit: kind
uint64_t payload; // ポインタまたはインライン値
uint64_t metadata; // フラグ・追加情報下位3bit: タグ)
} nyash_value;
// メタデータタグGemini提案のTagged Pointers
#define NYASH_TAG_POINTER 0x0 // ヒープオブジェクトへのポインタ
#define NYASH_TAG_SMALL_INT 0x1 // 61ビット整数符号付き
#define NYASH_TAG_BOOL 0x2 // 真偽値
#define NYASH_TAG_NULL 0x3 // null
#define NYASH_TAG_SMALL_ENUM 0x4 // 小さな列挙型
```
### メモリ管理 - Intrusive参照カウントGemini詳細提案
```c
// すべてのヒープBoxの共通ヘッダ
typedef struct {
atomic_size_t ref_count; // アトミック参照カウント
const nyash_obj_vtable* vtable; // メソッドテーブル
uint64_t type_id; // 型識別子
uint64_t flags; // THREAD_AFFINE等のフラグ
// 弱参照サポート(循環参照対策)
struct weak_ref_list* weak_refs; // 弱参照リスト(オプション)
} nyash_obj_header;
// Gemini推奨弱参照による循環参照回避
typedef struct {
nyash_obj_header* target; // 対象オブジェクトNULL可能
atomic_bool is_valid; // 有効性フラグ
} nyash_weak_ref;
```
### コンテキストベースAPICodex推奨
```c
// グローバル状態を避けるコンテキスト構造
typedef struct {
nyash_allocator* allocator; // カスタムアロケータ
nyash_scheduler* scheduler; // スケジューラasync用
void* tls; // スレッドローカルストレージ
uint64_t feature_flags; // 機能フラグ
nyash_error* last_error; // 最後のエラー
} nyash_ctx;
// ステータスコード(例外を使わない)
typedef enum {
NYASH_OK = 0,
NYASH_E_TYPE, // 型エラー
NYASH_E_NULL, // NULL参照
NYASH_E_BOUNDS, // 境界外アクセス
NYASH_E_MEMORY, // メモリ不足
NYASH_E_NOT_FOUND, // メソッド/プロパティ未定義
} nyash_status;
```
## 🚀 実装戦略3段階
### Phase 1: C Shim実装1-2週間
既存Rust実装へのCラッパーとして開始
```c
// plugins/nyash_abi_c/src/shim.c
nyash_status nyash_call_shim(nyash_ctx* ctx, void* obj,
nyash_selector sel, nyash_value* argv,
int argc, nyash_value* out) {
// Rust FFI経由で既存実装を呼び出し
extern nyash_status rust_nyash_call(/* ... */);
return rust_nyash_call(ctx, obj, sel, argv, argc, out);
}
```
### Phase 2: フルC実装1ヶ月
- 基本型Integer/String/Bool/Array/Mapの完全実装
- セレクターキャッシング機構
- アトミック参照カウント + 弱参照
- 型情報レジストリ
### Phase 3: Nyash再実装2ヶ月
- C実装をNyashで書き直し
- AOTコンパイルで同じC ABIを公開
- セルフホスティング達成!
## 🔧 パフォーマンス最適化
### セレクターキャッシングCodex提案
```c
// 文字列ルックアップは初回のみ
typedef struct {
uint32_t vtable_slot; // 解決済みvtableスロット
uint64_t cache_cookie; // インラインキャッシュ用
} nyash_selector;
// JITは直接vtable_slotを使用可能
```
### Tagged PointersGemini提案
- 64bitポインタの下位3bitをタグとして活用
- 小さな整数61bit、真偽値、nullをヒープ確保なしで表現
- `metadata & 0x7`でタグ判定、分岐なしアンボックス可能
## 📊 テスト戦略
### 適合性テストスイート
```bash
tests/abi/
├── conformance/ # ABI適合性テスト
├── memory/ # 参照カウント・弱参照テスト
├── threading/ # マルチスレッド安全性
├── performance/ # ベンチマーク1.5x以内目標)
└── compatibility/ # Rust/C実装の差分テスト
```
### ファジングCodex提案
- `nyash_value`エンコード/デコード
- `type_id`正規化
- 循環参照パターン
## 🌟 技術的革新性
### 1. ABI as a Box
「Everything is Box」哲学の完成形。ABIそのものがBoxとして扱われることで
- 実行時のABI切り替えが可能
- デバッグ用ABI、プロファイリング用ABIの動的ロード
- 異なるメモリ管理モデルGC等の実験が容易
### 2. セルフホスティングへの明確な道筋
1. **Rust製コンパイラ** → **C ABI上のNyashコンパイラ**をビルド
2. **Nyashコンパイラ****自分自身を再コンパイル**
3. Rust依存完全排除
### 3. 長期的保守性
- C ABIは最も安定した普遍的インターフェース
- プラットフォーム非依存
- 30年後も動作する設計
## 📝 配布と使用
### nyash.toml設定
```toml
[plugins.nyash_abi_provider]
path = "plugins/nyash_abi_provider.so"
abi = "c"
types = ["NyashABIProvider"]
capabilities = ["async", "weakref", "selector_cache"]
```
### Nyashコードでの使用
```nyash
// ABIプロバイダーの取得
local abiType = getTypeBox("NyashABIProvider")
local abi = abiType.create()
// セレクターキャッシングを活用した高速呼び出し
local strType = abi.lookupType("StringBox")
local lengthSel = abi.lookupSelector(strType, "length")
local str = abi.createValue(strType, "Hello World")
local len = abi.call(str, lengthSel, [])
print(len) // 11
```
## 🎯 まとめ
本設計により、Nyashは
- **Rust非依存**でセルフホスティング可能に
- **「Everything is Box」哲学**を完全実現
- **高性能**Tagged Pointers、セレクターキャッシング
- **安全**(アトミック参照カウント、弱参照)
- **拡張可能**(バージョニング、機能ビット)
これは単なる実装の変更ではなく、言語の哲学を技術で体現する、美しいアーキテクチャの完成です。

View File

@ -0,0 +1,356 @@
# 統合ABI設計仕様書 v1.0 (2025-09-01)
## 🎯 概要
**革命的発見**: TypeBoxブリッジにより、C ABI + Nyash ABI統合プラグインシステムが実現可能
Codex専門家分析により、既存のC ABIプラグインを維持しながら、型安全で高性能なNyash ABIプラグインを同一システムで運用する統合設計が確立されました。
### 設計哲学
1. **既存を壊さない**: C ABIプラグインはそのまま動作
2. **段階的進化**: プラグインごとに個別でABI選択可能
3. **パフォーマンス**: Nyash ABI優先、必要時のみC ABIブリッジ
4. **Everything is Box**: TypeBox自体もBox哲学に従う
## 📐 核心設計統一TypeBoxディスクリプタ
### UnifiedTypeBox構造体ChatGPT5改善版
```c
// crates/nyrt/include/nyrt_typebox.h
#pragma pack(push, 8) // ABIアライメント固定
typedef struct {
// ヘッダー(バージョン管理・互換性)
uint32_t abi_tag; // 'TYBX' (0x54594258)
uint16_t ver_major; // 1
uint16_t ver_minor; // 0
uint32_t size; // sizeof(nyrt_typebox) - 拡張互換性
nyrt_abi_kind_t abi_kind; // C/Nyash/統合
uint32_t callconv; // 呼び出し規約Win/Linux差分
// 型識別(衝突安全性強化)
const char* name; // "nyash.core.Array" - FQN
uint8_t stable_id[32]; // SHA-256ハッシュ衝突耐性
uint64_t fast_key; // 高速ルックアップ用64bitキー
// スレッド安全性・最適化ヒント
uint32_t flags; // THREAD_SAFE/IMMUTABLE/REENTRANT/MAY_BLOCK
uint32_t align; // アライメントヒント
// ABI別vtablenullable
const nyrt_c_vtable* c; // C ABI vtable
const nyrt_ny_vtable* ny; // Nyash ABI vtable
// メタデータ
nyrt_type_meta meta; // JSON/CBOR形式
const void* user_data; // プラグイン定義データ
} nyrt_typebox;
#pragma pack(pop)
// ABIサイズ検証コンパイル時
_Static_assert(sizeof(nyrt_typebox) <= 128, "TypeBox size too large");
```
### ABI種別とvtableChatGPT5強化版
```c
// ABI種別定義
typedef enum {
NYRT_ABI_NONE = 0,
NYRT_ABI_C = 1, // C ABIのみ
NYRT_ABI_NYASH = 2, // Nyash ABIのみ
NYRT_ABI_UNIFIED = 3 // 両方サポート
} nyrt_abi_kind_t;
// 呼び出し規約(プラットフォーム差分対応)
typedef enum {
NYRT_CALLCONV_SYSTEMV = 1, // Linux/Unix標準
NYRT_CALLCONV_WIN64 = 2, // Windows x64
NYRT_CALLCONV_FASTCALL = 3 // Windows最適化
} nyrt_callconv_t;
// エラーコード(厳密化)
typedef int32_t nyrt_err;
#define NYRT_OK 0
#define NYRT_E_ARG 1 // 引数エラー
#define NYRT_E_TYPE 2 // 型エラー
#define NYRT_E_STATE 3 // 状態エラー
#define NYRT_E_OOM 4 // メモリ不足
#define NYRT_E_ABORT 5 // 致命的エラー
// 所有権契約(明文化)
typedef enum {
NYRT_OWN_BORROW = 0, // 借用(呼び出し期間のみ有効)
NYRT_OWN_TRANSFER = 1, // 所有権移譲受け取り側がrelease
NYRT_OWN_CLONE = 2 // クローン(コピー、独立管理)
} nyrt_ownership;
// スレッド安全性フラグ
#define NYRT_FLAG_THREAD_SAFE 0x0001 // スレッドセーフ
#define NYRT_FLAG_IMMUTABLE 0x0002 // 不変オブジェクト
#define NYRT_FLAG_REENTRANT 0x0004 // 再帰呼び出し可能
#define NYRT_FLAG_MAY_BLOCK 0x0008 // 長時間処理GCセーフポイント必要
// C ABI vtable: nothrow保証・所有権明確化
typedef struct {
// ライフサイクルすべてnothrow
void* (*create)(void* env); // 例外禁止
void (*retain)(void* instance); // 参照カウント増加
void (*release)(void* instance); // 参照カウント減少
// NyashValue ↔ void* 変換(所有権明示)
nyrt_err (*to_nyash)(const void* instance, nyrt_nyash_value* out, nyrt_ownership* own);
nyrt_err (*from_nyash)(nyrt_nyash_value val, void** out, nyrt_ownership* own);
// メソッド呼び出しnothrow、GCセーフポイント配慮
nyrt_err (*invoke_by_id)(void* instance, nyrt_method_id method,
const void* const* argv, size_t argc,
void** ret_out, nyrt_ownership* ret_own);
// フォールバックID不明時
nyrt_err (*invoke_by_name)(void* instance, const char* method_name,
const void* const* argv, size_t argc,
void** ret_out, nyrt_ownership* ret_own);
} nyrt_c_vtable;
// Nyash ABI vtable: ネイティブNyashValue
typedef struct {
// ライフサイクル
nyrt_nyash_value (*create)(void* ctx);
void (*retain)(nyrt_nyash_value v);
void (*release)(nyrt_nyash_value v);
// 直接NyashValueでメソッド呼び出し
nyrt_err (*invoke_by_id)(nyrt_nyash_value* this_val, nyrt_method_id method,
const nyrt_nyash_value* args, size_t argc,
nyrt_nyash_value* ret_out);
nyrt_err (*invoke_by_name)(nyrt_nyash_value* this_val, const char* method_name,
const nyrt_nyash_value* args, size_t argc,
nyrt_nyash_value* ret_out);
} nyrt_ny_vtable;
```
## 🛡️ ChatGPT5安全性強化10の重要改善
### 1. ID衝突安全性
- **SHA-256ハッシュ**: 64bitから256bitへ強化衝突耐性
- **高速キー併用**: 64bit fast_keyでホットパス最適化
- **重複登録拒否**: 同一type_idの重複をランタイムで検出・拒否
### 2. 所有権契約の明文化
```c
// 所有権と解放責務の明確な定義
NYRT_OWN_BORROW = 0, // 呼び出し期間のみ有効、releaseしない
NYRT_OWN_TRANSFER = 1, // 受け取り側がrelease責務を負う
NYRT_OWN_CLONE = 2 // 独立コピー、各々がrelease
```
### 3. 例外/パニック越境禁止
- **C ABIは完全nothrow**: すべての関数で例外禁止
- **Nyash側例外捕捉**: パニック → nyrt_err変換
- **境界ガード**: `try-catch`でC/Nyash境界を保護
### 4. GC/セーフポイント規則
```rust
// MAY_BLOCKフラグ付きC ABI呼び出し前後
if type_info.flags & NYRT_FLAG_MAY_BLOCK != 0 {
vm.gc_safepoint_enter();
let result = c_vtable.invoke_by_id(...);
vm.gc_safepoint_exit();
}
```
### 5. プラグイン初期化と互換性交渉
```c
// プラグインエントリーポイント
NYRT_EXPORT nyrt_err nyash_plugin_init(const nyrt_host*, const nyrt_runtime_info*);
NYRT_EXPORT const nyrt_typebox** nyash_typeboxes(size_t* count);
// バージョン確認必須
typedef struct {
uint16_t size; // 構造体サイズ
uint16_t ver_major; // メジャーバージョン
uint16_t ver_minor; // マイナーバージョン
uint16_t reserved;
} nyrt_runtime_info;
```
### 6. NyashValueインライン表現
```c
// インライン値エンコーディング規則
typedef struct {
uint64_t type_id; // 型識別子
uint64_t box_handle; // ポインタ or インライン値
uint64_t metadata; // INLINEフラグ + 追加情報
} nyrt_nyash_value;
#define NYASH_META_INLINE 0x0001 // box_handleがインライン値
#define NYASH_META_ASYNC 0x0002 // 非同期結果
#define NYASH_META_ERROR 0x0010 // エラー値
```
## 🔄 統一ディスパッチ戦略
### VM層での透明なABI選択
```rust
// src/runtime/unified_dispatch.rs
pub fn call_with_typebox(
method: MethodId,
this_ty: &TypeBoxInfo,
this_val: NyashValue,
args: &[NyashValue],
) -> Result<NyashValue, NyError> {
// Nyash ABI優先ゼロコストパス
if let Some(ny) = &this_ty.ny {
return ny.invoke_by_id(this_val, method, args);
}
// C ABIブリッジ必要時のみ
let c = this_ty.c.as_ref().ok_or(NyError::MissingVTable)?;
let (this_ptr, this_own) = c.from_nyash(this_val)?;
let (argv, arena) = marshal_args_to_c(args, c)?;
let (ret_ptr, ret_own) = c.invoke_by_id(this_ptr, method, &argv)?;
let ret = c.to_nyash(ret_ptr, ret_own)?;
Ok(ret)
}
```
### 7. ホストコールバック(プラグイン支援)
```c
// プラグインが使える安全なホスト機能
typedef struct {
uint16_t size; // 構造体サイズ
void* (*host_alloc)(size_t); // メモリ確保
void (*host_free)(void*); // メモリ解放
void (*log)(int level, const char* msg); // ログ出力
nyrt_err (*gc_safepoint)(void); // GCセーフポイント
} nyrt_host;
```
### 8. セキュリティ/不正プラグイン対策
- **TypeBox検証**: abi_tag、サイズ、バージョンの完全性確認
- **重複登録拒否**: 同一名前・type_idの重複を検出
- **境界チェック**: user_dataのサイズ・内容検証
- **Capability予約**: 将来のファイル/ネット権限制御用フラグ
### 9. プラグインアンロード安全性
```rust
// プラグインアンロード前の安全確認
fn can_unload_plugin(plugin_id: &str) -> bool {
let live_instances = registry.count_live_instances(plugin_id);
live_instances == 0 // 生存インスタンスがない場合のみアンロード可能
}
```
### 10. テスト戦略ChatGPT5推奨
- **ABIクロスパリティ**: 同一Box実装C/Nyash/Unifiedで結果一致
- **所有権ファズ**: Borrow/Transfer/Clone組み合わせでリーク検出
- **呼び出し規約クロス**: Win(Fastcall)↔Linux(SystemV)結果一致
- **性能目標**: Nyash ABI = 1.0x、C ABIブリッジ ≤ 1.5x
## 📝 nyash.toml v3.0設定
```toml
# 統一プラグイン設定
[plugins.map_simple]
path = "plugins/map.so"
abi = "c" # C ABIのみ
types = ["nyash.core.Map"]
[plugins.map_advanced]
path = "plugins/advanced_map.so"
abi = "nyash" # Nyash ABIのみ
types = ["nyash.core.Map"]
[plugins.map_hybrid]
path = "plugins/hybrid_map.so"
abi = "unified" # 両方サポートNyash優先
types = ["nyash.core.Map", "nyash.core.Array"]
symbols.boxes = "nyash_typeboxes"
symbols.init = "nyash_plugin_init"
```
## ⚡ パフォーマンス最適化
### 1. IDベースディスパッチ
- 型ID: 64bit安定ハッシュFQN + 型引数)
- メソッドID: 64bitハッシュシグネチャ
- ホットパスで文字列ハッシュ回避
### 2. インライン値サポート
```c
// NyashValueNyash ABI
typedef struct {
uint64_t type_id; // 型識別子
uint64_t box_handle; // Arc<Box>ポインタ or インライン値
uint64_t metadata; // INLINEフラグ等
} NyashValue;
#define NYASH_META_INLINE 0x0001 // box_handleがインライン値
```
### 3. ゼロコピーブリッジ
- 所有権フラグBORROW/PLUGIN/HOSTで適切な参照管理
- 不要なコピー回避
- retain/releaseの最適化
## 🏗️ 実装ロードマップ
### Phase 1: TypeBox統合基盤1週間
- [ ] nyrt_typebox.h完全定義
- [ ] Rust FFIミラーcrates/nyrt/src/typebox.rs
- [ ] UnifiedPluginRegistry実装
### Phase 2: 実証実装2週間
- [ ] MapBoxの両ABI実装
- [ ] 統一ディスパッチテスト
- [ ] パフォーマンスベンチマーク
### Phase 3: プロダクション化3週間
- [ ] nyash.toml v3.0パーサー
- [ ] プラグイン移行ガイドライン
- [ ] デバッグツール整備
## 🎯 成功指標
1. **機能性**: MapBox.keys()がArrayBoxを返す両ABI対応
2. **パフォーマンス**: Nyash ABIで直接呼び出し、C ABIで1.5倍以内
3. **互換性**: 既存C ABIプラグインがそのまま動作
4. **拡張性**: 新しいABI追加が容易
## 🌟 なぜ統合が可能になったのか
### TypeBoxの革命的価値
1. **型情報の統一表現**: Everything is Box哲学の完全実現
2. **ABI間ブリッジ**: 異なるABI間の透明な変換
3. **バージョン管理**: 前方互換性のある拡張メカニズム
4. **段階的移行**: 破壊的変更なしの進化
### 3大AI専門家の一致した結論
**Codex専門家分析**:
> 「TypeBoxを汎用ブリッジとして使用する統合設計は、
> 安定性・パフォーマンス・拡張性のすべてを満たす理想的なアーキテクチャ」
**ChatGPT5専門家分析**:
> 「方向性は合ってるし、実装に耐える設計。10の改善点で
> 衝突安全性・所有権・セキュリティが完璧になる」
**設計の確実性**: 3つのAIシステムが独立に同じ結論に到達
## 🚀 次のステップChatGPT5推奨
1. **nyrt_typebox.h実装** - 完全なヘッダー定義
2. **MapBox両ABI実装** - 実証実装でパリティ確認
3. **所有権ファズテスト** - メモリリーク検出
4. **パフォーマンス測定** - 1.5x以内目標達成確認
---
*Everything is Box - 型情報も、ABI情報も、すべてがBoxとして統一される世界*
*3大AI専門家による完全検証済み設計 ✅*

View File

@ -0,0 +1,131 @@
# なぜ天才AIたちは間違えたのか - Phase 12の教訓
## 🤔 根本的な誤解
### AIたちの誤解
```
「スクリプトプラグイン」という特別な仕組みが必要
→ JIT/AOTから呼び出せない問題がある
→ 複雑な解決策が必要
```
### 実際の真実
```
Nyashスクリプト = 普通のユーザー定義Box
→ すでに動いている
→ 何も問題ない
```
## 💡 なぜこんな誤解が生まれたのか
### 1. 「プラグイン」という言葉の罠
- AI思考「プラグイン = 外部DLL/SO = 特別な仕組み」
- 実際:「プラグイン = 再利用可能なBox = 普通のユーザー定義Box」
### 2. 実装レイヤーの混同
```
AIの頭の中
┌─────────────────────┐
│ JIT/AOT (最適化層) │ ← ここに固執
├─────────────────────┤
│ C ABI プラグイン │
├─────────────────────┤
│ スクリプトプラグイン │ ← 新しい層を作ろうとした
└─────────────────────┘
実際のNyash
┌─────────────────────┐
│ Nyash VM/インタープリター │
├─────────────────────┤
│ すべてがBox統一層
│ - ビルトインBox │
│ - C ABIプラグイン │
│ - ユーザー定義Box │ ← これだけで十分!
└─────────────────────┘
```
### 3. 過度な最適化思考
- AI「JIT/AOTで高速化しなければ
- 実際:「インタープリター言語として十分高速」
### 🚀 なぜスクリプトファイルでも高速なのか
**重要な真実NyashはAOT/JITをサポートしている**
```bash
# スクリプトファイルをAOTコンパイル可能
./nyash --aot script.nyash -o script.exe
# JITで実行ホットコードを自動最適化
./nyash --backend vm --jit script.nyash
```
つまり:
1. **開発時**: スクリプトファイルで即座に実行・修正
2. **本番時**: AOTコンパイルで最高速度
3. **中間**: JITで自動的に最適化
**スクリプト言語の利便性 + ネイティブコードの速度 = 両方手に入る!**
### 4. Everything is Boxの哲学を忘れた
```nyash
# これが既に「スクリプトプラグイン」!
box DataProcessor {
init {
me.file = new FileBox() # C ABIプラグイン
me.math = new MathBox() # C ABIプラグイン
me.cache = new MapBox() # ビルトインBox
}
process(data) {
# 全部普通に動く!
local result = me.math.sin(data)
me.file.write("log.txt", result.toString())
return result
}
}
```
## 🎓 教訓
### 1. シンプルな解決策を見逃すな
- 複雑な問題に見えても、既存の仕組みで解決できることが多い
- 「Everything is Box」は強力な統一原理
### 2. 言葉に惑わされるな
- 「プラグイン」→「特別な仕組み」という連想を避ける
- 本質を見る:「再利用可能なコード」
### 3. ユーザー視点を忘れるな
```nyash
# ユーザーから見れば、これで十分!
local processor = new DataProcessor()
local result = processor.process(3.14)
```
### 4. AIの弱点
- 技術用語から過度に複雑な解釈をしがち
- 既存の解決策より新しい仕組みを作りたがる
- レイヤーを増やしたがる傾向
## 📝 Phase 12の本当の価値
### 実は必要なのは
1. **export/import構文**ファイル間でBoxを共有
2. **パッケージマネージャー**Boxの配布・インストール
3. **ドキュメント生成**Boxの使い方を共有
### 必要ないもの
- 特別な「スクリプトプラグイン」層
- JIT/AOT統合
- 複雑なトランスパイル
## 🚀 結論
**Nyashは最初から正しかった。Everything is Boxだから、すべてが統一的に動く。**
AIたちは「プラグイン」という言葉に惑わされて、存在しない問題を解決しようとしていた。
---
*時に、最も賢い解決策は「何もしないこと」である。*