Files
hakorune/docs/development/roadmap/phases/phase-12/README.md
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

8.0 KiB
Raw Blame History

Phase 12: Nyashコード共有エコシステム - Everything is Box の実現

🚀 最新ブレイクスルー (2025-09-02)

🔥 セルフホスティングへの道 - ABIすらBoxとして扱う

「Everything is Box」哲学の究極形態ABIそのものをBoxとして実装することで、Rust依存を完全排除

// Nyash ABIもTypeBoxとして提供C言語実装
typedef struct {
    uint32_t abi_tag;           // 'NABI'
    const char* name;           // "NyashABIProvider"
    void* (*create)(void);      // ABIプロバイダ生成
    
    // Nyash ABI操作Rust非依存
    struct {
        nyash_status (*call)(nyash_ctx*, void* obj, nyash_selector, ...);
        void (*retain)(void* obj);
        void (*release)(void* obj);
    } nyash_ops;
} NyashABITypeBox;

AI専門家たちの深い考察:

  • Gemini: 「技術的妥当性が高く、言語哲学とも合致した、極めて優れた設計」
  • Codex: 「Feasible and attractive: 16バイトアライメント、セレクターキャッシング等の具体的実装提案」
  • ChatGPT5: 「統合ABI設計に10の改善点を提供」反映済み

TypeBox統合ABI - プラグイン革命の実現!

「Everything is Box」哲学型情報すらBoxとして扱うTypeBoxにより、C ABI + Nyash ABIの完全統合を達成

🎯 重要な変更 (2025-09-01)

Phase 12の議論とビルトインBox廃止により、プラグインシステムが進化

新しい3層プラグインシステムが確立されました

# Nyashスクリプトプラグインユーザー定義Box
box DataProcessor {
    init {
        me.file = new FileBox()    # C ABIプラグイン使用
        me.math = new MathBox()    # C ABIプラグイン使用
        me.cache = new MapBox()    # これもC ABIプラグインビルトイン廃止
    }
    
    process(data) {
        local result = me.math.sin(data)
        me.file.write("log.txt", result.toString())
        return result
    }
}

# 使用例
local processor = new DataProcessor()
processor.process(3.14)  # すべてプラグインで動作!

📝 なぜ誤解が生まれたのか

「プラグイン」という言葉から、特別な仕組みが必要だと考えてしまいましたが、Nyashの「Everything is Box」哲学により、ユーザー定義Boxこそが最高のプラグインシステムでした。

詳細な分析:なぜ天才AIたちは間違えたのか

🚀 Phase 12の真の価値コード共有エコシステム

本当に必要なもの

  1. export/import構文

    # math_utils.ny
    export box MathUtils {
        factorial(n) { ... }
        fibonacci(n) { ... }
    }
    
    # main.ny
    import { MathUtils } from "math_utils.ny"
    local utils = new MathUtils()
    
  2. パッケージマネージャー

    nyash install awesome-math-utils
    nyash publish my-cool-box
    
  3. ドキュメント生成

    # @doc 素晴らしい数学ユーティリティ
    # @param n 計算したい数値
    # @return 階乗の結果
    export box MathUtils { ... }
    

📊 新しい3層プラグインシステム

NyashエコシステムビルトインBox廃止後
├── Nyashスクリプトプラグインユーザー定義Box← .nyashファイル
├── C ABIプラグイン既存のまま使用← シンプル・高速・安定
│   └── **TypeBox**: プラグイン間Box生成の最小機構 🆕
└── Nyash ABIプラグイン必要時のみ← 言語間相互運用・将来拡張
    └── MIR命令は増やさないBoxCallにabi_hint追加のみ

💡 TypeBoxシンプルなプラグイン間連携

MapBox.keys()がArrayBoxを返したい場合

// TypeBox構造体型情報をBoxとして扱う
typedef struct {
    uint32_t abi_tag;       // 'TYBX'
    const char* name;       // "ArrayBox"
    void* (*create)(void);  // Box生成関数
} NyrtTypeBox;

// MapBox.keys()実装
void* map_keys(void* self, void* array_type_box) {
    NyrtTypeBox* array_type = (NyrtTypeBox*)array_type_box;
    void* array = array_type->create();  // ArrayBox生成
    // ... キーを追加
    return array;
}

詳細: C ABI TypeBox設計仕様書

プラグイン選択の指針

  • C ABIで済むなら、C ABIを使う(シンプルイズベスト)
  • Nyash ABIは以下の場合のみ
    • 他言語Python/Go等からの呼び出し
    • 複雑な型の相互運用が必要
    • 将来の拡張性を重視する場合

📝 MIR命令統合Phase 12での変更

  • PluginInvoke → BoxCall 統合
    • ビルトインBox廃止によりフォールバックがなくなる
    • BoxCallとPluginInvokeの区別が不要に
    • VM層でC ABI/Nyash ABI/Scriptを自動判定
    • Core-15 → Core-14 へ(命令数削減)

🛣️ 実装ロードマップ(セルフホスティング対応版)

Phase 12.0: TypeBox統合ABI実装1週間🆕

  • nyrt_typebox.h完全ヘッダー定義16バイトアライメント
  • セレクターキャッシング機構
  • MapBox両ABI実装実証テスト
  • 所有権ファズテスト
  • 📄 統合ABI設計仕様書

Phase 12.0.5: Nyash ABI C実装2週間🔥🆕

  • C Shim実装既存Rustへのラッパー
  • 基本型のC完全実装Integer/String/Bool
  • アトミック参照カウント + 弱参照
  • 適合性テストスイート
  • 📄 Nyash ABI C実装設計書

現状サマリ2025-09-02

  • C ABITLV: 1/2/3/5/6/7/8でのプラグイン呼び出しはVMで安定運用中。returns_resultnyash.toml で制御可能。
  • JIT は VM と同じBox境界で動作フォールバック含む。Cranelift AOT のオブジェクト出力は未配線(スケルトン)。
  • MapBox を拡張stringキー、remove/clear/getOr/keysStr/valuesStr/toJsonkeys()/values() はランタイムシムで暫定提供。
  • Phase 12 設計TypeBox + Unified Dispatchは破壊的変更不要で段階導入可能と判断。

詳細タスクは TASKS.md を参照。

Phase 12.1: export/import構文2週間

  • exportキーワードのパーサー実装
  • importステートメントの実装
  • モジュール解決システム
  • 📄 詳細仕様書

Phase 12.2: パッケージ管理3週間

Phase 12.3: 開発者体験向上(継続的)

  • ドキュメント生成ツール
  • VSCode拡張補完・定義ジャンプ
  • サンプルパッケージ作成

📚 関連ドキュメント

🎯 主要設計ドキュメント

📂 議論の過程

  • ABI戦略議論: abi-strategy-discussion/
  • Nyash ABI詳細: nyash-abi-discussion/
  • 初期提案アーカイブ: archive/

AIたちがなぜ複雑な解決策を提案したのか、その議論の過程は archive/ ディレクトリに保存されています。良い教訓として残しておきます。