Files
hakorune/docs/development/roadmap/phases/phase-12/nyash-abi-c-implementation.txt

134 lines
3.7 KiB
Plaintext
Raw Normal View History

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>
2025-09-02 11:18:19 +09:00
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として扱う