## 🔥 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>
134 lines
3.7 KiB
Plaintext
134 lines
3.7 KiB
Plaintext
Nyash ABIをC実装TypeBoxで提供する設計案
|
||
========================================
|
||
|
||
【核心的アイデア】
|
||
Nyash ABIそのものをTypeBox(C 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;
|
||
```
|
||
|
||
■ NyashValue(C構造体版)
|
||
```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として扱う! |