- Create comprehensive type definitions for all future features - Adopt FFI ABI v0 compliance with platform-aware pointers (usize) - Implement 8-byte alignment for cross-platform compatibility - Design single entry point: nyash_plugin_invoke - Target Linux x86-64 for initial implementation - Use unimplemented!() for gradual feature addition Key decisions from AI review: - Pointer width: platform-dependent (not fixed 32-bit) - Early addition of Option/Result types - Clear ownership rules for strings/arrays - Extensible BoxHeader with magic number Phase 9.75g-0: Build it simple, make it work, then extend!
3.1 KiB
3.1 KiB
BID-FFI統合議論アーカイブ (2025-08-17)
概要
Phase 9.75g BID(Box Interface Definition)とFFI ABI v0の統合について、設計の簡素化と段階的実装を検討した記録。
議論の流れ
1. 問題提起
- FFI ABI v0仕様(
ffi-abi-specification.md)を確認 - Phase 9.75g BIDが野心的すぎて複雑との懸念
- 両者の統合による簡素化を提案
2. 主要な発見
FFI ABI v0の良い点
- シンプルで実績がある
- 型システムが完備(i32, i64, f32, f64, bool, string, array)
- メモリモデルが明確(32ビットポインタ、4バイトアライメント)
- Effect systemが4種類で明確(pure/mut/io/control)
BIDの問題点
- 型が不完全(i32, f32欠落)
- Transport層が野心的すぎる(grpc/rest/python_bridge等)
- 実装の複雑さが高い
3. C ABIの説明
ユーザーからの質問「C ABIって何?」に対して:
- C言語のバイナリレベルでの約束事
- どの言語からでも同じ方法で関数を呼べる仕組み
- 高速(直接マシンコード呼び出し)
- 安定(何十年も使われている標準)
4. 統合計画の作成
phase_9_75g_bid_ffi_abi_alignment.mdとして以下を提案:
- Phase 9.75g-0: FFI ABI v0準拠(1週間)
- 型システムの統一
- メモリモデルの明確化
- 段階的実装(C ABI → gRPC/REST → 言語ブリッジ)
5. AI大会議での最終レビュー
Gemini先生の評価
- 全体的に優れた計画
- Simple Firstの原則を支持
- 段階的実装は現実的
ChatGPT先生の技術的指摘
- ポインタサイズ: 32ビット固定は危険 →
usize推奨 - アライメント: 4バイト不十分 → 8バイト推奨
- 型追加: Option/Result型を最初から
- API設計: 単一invoke関数で拡張性確保
- 所有権: 明文化が必須
6. 重要な技術修正
// ❌ 当初の案
ptr: i32 // 32ビット固定
alignment: 4 // 4バイト
// ✅ 修正案
ptr: usize // プラットフォーム依存
alignment: 8 // 8バイト保証
// Boxヘッダー改善案(ChatGPT)
#[repr(C)]
pub struct BoxHeader {
magic: u32, // "NYBX"
abi_major: u16, // バージョン管理
abi_minor: u16,
type_id: u32,
flags: u32, // 将来のatomic等
ref_count: u32,
field_count: u16,
reserved: u16, // 8バイトアライメント
}
7. NyaMeshとの関連
- 当初の野心的なTransport設計はNyaMesh(P2Pライブラリ)でやろうとしていたことに似ている
- Phase 4でP2P追加は価値ありとAIも評価
結論
- FFI ABI v0準拠で始める(シンプル・実績あり)
- ChatGPTの技術的指摘を反映(ポインタ幅、アライメント、所有権)
- 段階的に拡張(C ABI → ネットワーク → P2P)
- 「最初は簡単に動かして、拡張できる方式」の実現
次のステップ
- AIレビューのフィードバックを適用
- 実装計画をissueとして作成
- Linux x86-64限定で1週間スプリント開始