Phase 12: TypeBox革命とJIT制御フロー修正 - セルフホスティングへの道

## 🔥 TypeBox ABI革命(セルフホスティング実現)
- Nyash ABIをC実装TypeBoxで提供する画期的設計
- Gemini/Codexの深い考察を反映した詳細仕様書作成
- 16バイトアライメント、セレクターキャッシング、弱参照等の具体実装案
- Rust依存を完全排除し、セルフホスティングへの明確な道筋を確立

## 🎯 JIT制御フロー根本修正(ChatGPT5の25分長考の成果)
- ブロック挿入点の明確化: switch_to_block()で各ブロックemit開始時に切替
- シール戦略の簡潔化: br/jump直後のseal撤廃、最終シールに一本化
- PHI最小経路実装: ブロック引数の事前プリスキャン、後付けPHI問題解決
- Cranelift制約対応: 開始済みブロックへのappend禁止を正しく実装

## 📚 ドキュメント更新
- Phase 12全体のセルフホスティング対応更新
- NYASH-ABI-C-IMPLEMENTATION.md: 実装仕様書作成
- gemini-codex-deep-thoughts.md: AI専門家の考察アーカイブ
- 各種README/TASKS更新でセルフホスティング要件追加

##  テスト結果
- mir-branch-ret: OK (Result: 1)
- mir-phi-min: OK (Result: 10)
- mir-branch-multi: OK (Result: 1)

「Everything is Box」の究極形態:ABIすらBoxとして扱う革命的設計!

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Moe Charm
2025-09-02 11:18:19 +09:00
parent de99b40bee
commit b05d5dd7ca
13 changed files with 949 additions and 203 deletions

View File

@ -0,0 +1,134 @@
Nyash ABIをC実装TypeBoxで提供する設計案
========================================
【核心的アイデア】
Nyash ABIそのものをTypeBoxC ABIとして実装することで、
Rust依存を排除し、セルフホスティングへの道を開く。
【基本構造】
1. Nyash ABIもTypeBoxの一種として定義
2. C言語で完全実装Rust非依存
3. 既存のプラグインシステムで配布可能
【実装詳細】
■ TypeBox定義
```c
// nyash_abi_provider.h
typedef struct {
// TypeBox標準ヘッダ
uint32_t abi_tag; // 'NABI'
const char* name; // "NyashABIProvider"
void* (*create)(void); // プロバイダインスタンス生成
// Nyash ABI専用拡張
struct {
void* (*create_value)(uint64_t type_id, void* data);
void* (*invoke_method)(void* obj, const char* method, void* args[], int argc);
void (*retain)(void* value);
void (*release)(void* value);
} nyash_ops;
} NyashABITypeBox;
```
■ NyashValueC構造体版
```c
typedef struct {
uint64_t type_id; // 型識別子
uint64_t box_handle; // ポインタまたはインライン値
uint64_t metadata; // フラグ・追加情報
} NyashValue_C;
```
■ 実装戦略
Phase 1: 最小C実装
------------------
- 基本型Integer/String/Boolのみサポート
- シンプルなメソッド呼び出し
- plugins/nyash_abi_c/ として実装
Phase 2: フル機能実装
-------------------
- 全Box型サポート
- エラーハンドリング
- 非同期サポート
Phase 3: Nyashで再実装
--------------------
- C実装をNyashで書き直し
- セルフホスティング達成
【利点】
1. Rust完全非依存
2. 既存インフラTypeBox/C ABI活用
3. 段階的移行可能
4. セルフホスティング対応
【実装例】
```c
// nyash_abi_impl.c
static NyashValue_C call_method_c(
const char* type_name,
const char* method,
void* instance,
NyashValue_C* args,
int argc
) {
// StringBoxの例
if (strcmp(type_name, "StringBox") == 0) {
if (strcmp(method, "length") == 0) {
char* str = (char*)instance;
int len = strlen(str);
return (NyashValue_C){
.type_id = TYPE_INTEGER,
.box_handle = (uint64_t)len,
.metadata = INLINE_FLAG
};
}
}
// 他のBox型も同様に実装...
}
```
【配布方法】
```toml
# nyash.toml
[plugins.nyash_abi_provider]
path = "plugins/nyash_abi_provider.so"
abi = "c"
types = ["NyashABIProvider"]
```
【使用例Nyashコード
```nyash
// TypeBox経由でNyash ABIプロバイダ取得
local abiType = getTypeBox("NyashABIProvider")
local abi = abiType.create()
// Nyash ABIで呼び出し
local str = abi.createValue(TYPE_STRING, "Hello")
local len = abi.invoke(str, "length", [])
print(len) // 5
```
【移行パス】
1. 現在: Rust実装のNyash ABI
2. Phase 12.5: C実装のNyash ABIプロバイダ追加
3. Phase 13: プロバイダ経由に移行
4. Phase 14: Nyashでプロバイダ再実装
5. Phase 15: 完全セルフホスティング
【技術的課題と解決】
- メモリ管理 → 参照カウントCで実装
- 型安全性 → type_idで厳密チェック
- パフォーマンス → インライン値で最適化
- 互換性 → 既存Rust実装と同じインターフェース
【結論】
TypeBoxシステムを使ってNyash ABIをC実装すれば、
Rust依存を排除しつつ、既存のエコシステムを活用して
スムーズにセルフホスティングへ移行できる。
「Everything is Box」の究極形ABIすらBoxとして扱う