Files
hakorune/docs/archive/bid_ffi_integration_discussion_2025-08-17.md
Moe Charm 75d09a89a8 feat(phase-9.75g-0): Start BID-FFI type-first implementation strategy
- 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!
2025-08-17 17:31:46 +09:00

3.1 KiB
Raw Permalink Blame History

BID-FFI統合議論アーカイブ (2025-08-17)

概要

Phase 9.75g BIDBox 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先生の技術的指摘

  1. ポインタサイズ: 32ビット固定は危険 → usize推奨
  2. アライメント: 4バイト不十分 → 8バイト推奨
  3. 型追加: Option/Result型を最初から
  4. API設計: 単一invoke関数で拡張性確保
  5. 所有権: 明文化が必須

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設計はNyaMeshP2Pライブラリでやろうとしていたことに似ている
  • Phase 4でP2P追加は価値ありとAIも評価

結論

  • FFI ABI v0準拠で始めるシンプル・実績あり
  • ChatGPTの技術的指摘を反映ポインタ幅、アライメント、所有権
  • 段階的に拡張C ABI → ネットワーク → P2P
  • 「最初は簡単に動かして、拡張できる方式」の実現

次のステップ

  1. AIレビューのフィードバックを適用
  2. 実装計画をissueとして作成
  3. Linux x86-64限定で1週間スプリント開始