Files
hakorune/docs/development/roadmap/phases/phase-12/nyash-abi-c-implementation.txt
Moe Charm b05d5dd7ca 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

134 lines
3.7 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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として扱う