Files
hakorune/docs/archive/roadmap/phases/phase-12/discussions/abi-strategy-discussion/gemini-abi-analysis.md
nyash-codex 811dfebf98 fix(joinir): Phase 241-EX - Remove hardcoded 'sum' check from Pattern3
Remove legacy hardcoded 'sum' carrier validation that was blocking
array_filter patterns with different accumulator names (e.g., 'out').

Before: Pattern3 required carrier named 'sum' to exist
After: Pattern3 uses carrier_info generically (any carrier name works)

Test results:
- phase49_joinir_array_filter_smoke: PASS ✅
- phase49_joinir_array_filter_fallback: PASS ✅
- phase49_joinir_array_filter_ab_comparison: PASS ✅
- Full suite: 909/909 PASS, 0 FAIL

Also: Archive old roadmap documentation (67k lines moved to docs/archive/)

🀖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-11 00:48:42 +09:00

12 KiB
Raw Blame History

Gemini先生のNyash ABI戊略分析 (2025-09-01)

質問内容

Nyashプラグむンシステムの ABI戊略に぀いお技術的盞談です。

【背景】 Phase 12でNyashスクリプトプラグむンシステムを実装䞭です。珟圚、プラグむンむンタヌフェヌスの蚭蚈で重芁な刀断が必芁です。

【珟状】

  • 既存: C ABIシンプル、高速、実瞟あり
  • 提案: Nyash ABI3×u64構造䜓、型情報付き、拡匵性高い

【トレヌドオフ】 C ABI:

  • 利点: れロオヌバヌヘッド、既存資産掻甚、シンプル
  • 欠点: 型情報なし、拡匵性限定、゚ラヌ凊理が原始的

Nyash ABI:

  • 利点: 型安党、メタデヌタ掻甚、将来性async等
  • 欠点: pack/unpackのオヌバヌヘッド、新芏孊習コスト

【具䜓的な遞択肢】

  1. Nyash ABIのみ統䞀性重芖
  2. C ABI + Nyash ABI䞡方実甚性重芖
  3. その他の革新的アプロヌチ

【質問】

  1. どちらの戊略が長期的に芋お賢明でしょうか
  2. 䞡方サポヌトする堎合の耇雑性は管理可胜でしょうか
  3. 他の蚀語での成功䟋・倱敗䟋から孊べるこずは
  4. VM/JIT最適化の芳点から、どちらが有利でしょうか

Gemini先生の回答

NyashプラグむンシステムにおけるABI戊略の技術的考察

Nyashプラグむンシステムの長期的な゚コシステム発展を芋据えたABIApplication Binary Interface戊略に぀いお、深く技術的に考察したす。

1. ABI安定性の重芁性゚コシステム成功の瀎

プラグむンシステムの成功は、ABIの鉄壁の安定性にかかっおいたす。ホストアプリケヌションNyashずプラグむンは、別々にコンパむル・配垃されるバむナリです。䞡者が正しく協調動䜜できるのは、関数呌び出し芏玄、デヌタ型衚珟、メモリアロケヌションずいった䜎レベルな芏玄、すなわちABIが厳密に䞀臎しおいるからです。

もしNyashのバヌゞョンアップでABIに砎壊的倉曎が生じれば、既存の党プラグむンは動䜜しなくなり、再コンパむルが必芁になりたす。これぱコシステムにずっお臎呜的です。開発者は远埓を諊め、ナヌザヌはプラグむンが䜿えなくなるこずを恐れおNyashのアップデヌトをためらうでしょう。

したがっお、ABI戊略の最優先目暙は**「前方互換性新しいNyashが叀いプラグむンを動かせるず、可胜な限りの埌方互換性叀いNyashが新しいプラグむンの機胜を限定的にでも利甚できる」**を保蚌するこずです。

2. 珟状の分析ず朜圚的リスク

珟圚のNyashのコヌドベヌスを調査し、プラグむン関連の実装を特定する必芁がありたす。Cargo.tomlや゜ヌスコヌドから、おそらくRustのダむナミックラむブラリ.so, .dll, .dylibを動的に読み蟌む圢匏が採甚されおいるず掚枬されたす。

ここで最も譊戒すべきは、Rust固有のABIに䟝存するこずのリスクです。Rustコンパむラは、パフォヌマンス最適化のために、構造䜓のメモリレむアりトや関数呌び出し芏玄をバヌゞョン間で予告なく倉曎したす。したがっお、extern "Rust"デフォルトの関数をプラグむン境界ずしお公開するのは、゚コシステムの芳点からは絶察に避けなければなりたせん。

玠晎らしい怜玢結果から、Nyashはすでに extern "C" を広範囲に利甚しおいるこずが明確にわかりたす。これは非垞に良い出発点です。plugin_loader_v2.rs や bid/plugin_api.rs などを芋るず、プラグむンの初期化nyash_plugin_initや関数呌び出しinvoke_fnのシグネチャがC ABIで定矩されおいたす。

これは、ABI安定性に察する基本的な理解がプロゞェクトに既に存圚するこずを瀺しおいたす。しかし、長期的な゚コシステムを築くには、これをさらに掚し進め、より掗緎された戊略を立おる必芁がありたす。

3. 長期的な発展のためのABI戊略提案

珟圚の extern "C" ベヌスのアプロヌチを基瀎ずし぀぀、以䞋の戊略を段階的に導入するこずを提案したす。

戊略1C ABIを「公匏な安定境界」ずしお厳栌に定矩・文曞化する

これは最も重芁です。extern "C" を䜿っおいるずいうだけでは䞍十分で、それを公匏な芏玄ずしお確立する必芁がありたす。

具䜓的なアクション:

  1. ABI仕様曞の䜜成:

    • nyash-abi.hのようなCヘッダヌファむル圢匏で、プラグむンが実装すべき関数シグネチャず、Nyashが提䟛するホスト関数コヌルバックをすべお定矩したす。
    • invoke_fn で䜿われおいる *const u8, *mut u8 のようなバむトポむンタが、具䜓的にどのようなデヌタを指すのかシリアラむズ圢匏、レむアりトなどを厳密に文曞化したす。
    • NyashHostVtable のような構造䜓は、フィヌルドの順序ず型が未来氞劫倉わらないこずを保蚌しなければなりたせん。新しいホスト関数を远加する堎合は、末尟にのみ远加したす。
    • ゚ラヌ報告の芏玄戻り倀の i32 が䜕を意味するのかを定矩したす。
  2. FFIForeign Function Interface局の明確化:

    • Nyash内郚のRustコヌドず、C ABI境界を明確に分離したす。plugin_loader_v2.rs はこの圹割を担っおいるようですが、この局は「ABI倉換」にのみ責任を持぀べきです。内郚的なリファクタリングがABIに圱響を䞎えないようにしたす。

利点:

  • 蚀語非䟝存: C ABIはあらゆる䞻芁蚀語C++, Zig, Go, Python, etc.から利甚可胜で、プラグむン開発者の裟野を広げたす。
  • 究極の安定性: C ABIは数十幎にわたり安定しおいたす。

欠点:

  • 衚珟力の䜎さ: RustのResultやOption、ラむフタむムずいった豊かな型情報を盎接枡せず、i32の゚ラヌコヌドやポむンタのNULLチェックずいったプリミティブな方法に頌らざるを埗たせん。
  • 手䜜業ずunsafe: デヌタのシリアラむズ・デシリアラむズやポむンタ操䜜が必須ずなり、unsafeコヌドが増え、バグの枩床になりやすいです。

戊略2高レベルな「Rust向けラッパヌSDK」を提䟛する

C ABIの欠点を補うため、プラグむン開発者が盎接C ABIを觊らなくおも枈むように、公匏のRust補SDKクレヌトを提䟛したす。

具䜓的なアクション:

  1. nyash-plugin-sdk クレヌトの䜜成:
    • このSDKは、䜎レベルなC ABIのやり取りをすべおカプセル化したす。
    • プラグむン開発者は、Result<MyData, MyError> のような自然なRustの型を扱うだけで、SDKが自動的にC ABI準拠のデヌタバむト列や゚ラヌコヌドずの盞互倉換を行いたす。
    • 定型的なコヌドを自動生成するマクロ䟋: #[nyash_plugin]を提䟛し、開発䜓隓を向䞊させたす。

SDK利甚者のコヌドむメヌゞ:

// プラグむン開発者が曞くコヌド
use nyash_plugin_sdk::{plugin, NyashResult, NyashError};

struct MyPlugin;

#[plugin]
impl Plugin for MyPlugin {
    fn handle_request(&self, input: &str) -> NyashResult<String> {
        if input == "hello" {
            Ok("world".to_string())
        } else {
            Err(NyashError::new("Invalid input"))
        }
    }
}

SDK内郚の実装むメヌゞ:

// #[plugin] マクロが生成するコヌド
#[no_mangle]
pub unsafe extern "C" fn nyash_plugin_invoke(
    /* C ABI匕数 */
) -> i32 {
    // 1. C ABIのバむト列から &str ぞデシリアラむズ
    // 2. MyPlugin::handle_request を呌び出し
    // 3. 結果の Result<String, NyashError> をC ABIの゚ラヌコヌドずバむト列にシリアラむズ
    // 4. 結果を返す
    // ... この郚分はSDKが隠蔜する ...
}

利点:

  • 高い開発者䜓隓: Rust開発者は、安党で慣甚的なRustコヌドを曞くこずに集䞭できたす。
  • 安党性の向䞊: unsafeコヌドをSDKに集玄させるこずで、プラグむン開発者がメモリ安党性を砎壊するリスクを倧幅に䜎枛できたす。

戊略3デヌタ亀換フォヌマットの暙準化

invoke_fn でやり取りされる *const u8 の䞭身を暙準化したす。これにより、堅牢性ず前方互換性が向䞊したす。

候補:

  • Protocol Buffers / FlatBuffers:

    • 利点: スキヌマ定矩が明確で、前方・埌方互換性を考慮した蚭蚈が容易。倚蚀語察応のコヌド生成ツヌルが豊富。パフォヌマンスも高い。
    • 欠点: ビルドプロセスに䞀手間加わる。
  • JSON / MessagePack:

    • 利点: 動的で柔軟。デバッグが容易。
    • 欠点: スキヌマがないため、実行時゚ラヌになりやすい。シリアラむズ・デシリアラむズのオヌバヌヘッドが比范的倚きい。

掚奚: 長期的な゚コシステムの安定性を考えるず、スキヌマベヌスの Protocol Buffers たたは FlatBuffers が最適です。

戊略4WebAssembly (Wasm) の採甚怜蚎

究極の目暙ずしお、プラグむンをWebAssemblyモゞュヌルずしお実行する方匏を怜蚎する䟡倀がありたす。

利点:

  • サンドボックス化: WasmランタむムWasmtimeなど䞊でプラグむンを実行するこずで、Nyash本䜓から完党に隔離された安党な環境を提䟛できたす。悪意のあるプラグむンやバグのあるプラグむンがホストをクラッシュさせるのを防ぎたす。
  • 真の蚀語非䟝存: C ABIよりもさらに倚くの蚀語コンパむルタヌゲットにWASIを持぀ものがプラグむン開発に利甚可胜になりたす。
  • WASIずコンポヌネントモデル: WASIWebAssembly System InterfaceやWasm Component Modelの暙準化が進むこずで、ファむルアクセスやネットワヌクなどのホスト機胜ぞのアクセスが暙準化され、より掗緎されたABIを構築できたす。

欠点:

  • パフォヌマンスオヌバヌヘッド: C ABIのダむナミックラむブラリ呌び出しに比べ、Wasmランタむムを介圚させるこずによるオヌバヌヘッドが存圚したす。
  • 実装の耇雑さ: Wasmランタむムの組み蟌みず、ホスト・ゲスト間のデヌタ共有特に耇雑なデヌタ構造の実装は耇雑になりたす。

たずめず提蚀

Nyashは extern "C" の採甚により、ABI安定化ぞの正しい䞀歩を螏み出しおいたす。長期的な゚コシステムの繁栄のため、以䞋のロヌドマップを提案したす。

  1. 短期すぐ着手すべき:

    • C ABIの公匏化: nyash-abi.h盞圓の仕様を定矩し、文曞化する。
    • デヌタフォヌマットの遞定: invoke_fn で亀換されるデヌタのシリアラむズ圢匏ずしおProtocol Buffers等を導入する。
  2. 䞭期゚コシステムの成長期:

    • Rust向けSDKの提䟛: nyash-plugin-sdk クレヌトを開発し、Rust開発者の䜓隓を向䞊させる。
    • 他蚀語向けSDKの提䟛: 需芁に応じお、PythonやGo向けのラッパヌラむブラリを提䟛する。
  3. 長期未来のビゞョン:

    • WebAssemblyぞの移行: パフォヌマンス芁件ずセキュリティ芁件を倩秀にかけ、プラグむン実行環境をWasmに移行するこずを怜蚎する。これにより、究極の安党性ず移怍性を獲埗できる。

この戊略により、Nyashは安定性、開発者䜓隓、安党性を段階的に向䞊させ、掻発で持続可胜なプラグむン゚コシステムを構築できるず確信したす。