92 lines
3.1 KiB
Markdown
92 lines
3.1 KiB
Markdown
|
|
# 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先生の技術的指摘
|
|||
|
|
1. **ポインタサイズ**: 32ビット固定は危険 → `usize`推奨
|
|||
|
|
2. **アライメント**: 4バイト不十分 → 8バイト推奨
|
|||
|
|
3. **型追加**: Option/Result型を最初から
|
|||
|
|
4. **API設計**: 単一invoke関数で拡張性確保
|
|||
|
|
5. **所有権**: 明文化が必須
|
|||
|
|
|
|||
|
|
### 6. 重要な技術修正
|
|||
|
|
|
|||
|
|
```rust
|
|||
|
|
// ❌ 当初の案
|
|||
|
|
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)
|
|||
|
|
- 「最初は簡単に動かして、拡張できる方式」の実現
|
|||
|
|
|
|||
|
|
## 次のステップ
|
|||
|
|
1. AIレビューのフィードバックを適用
|
|||
|
|
2. 実装計画をissueとして作成
|
|||
|
|
3. Linux x86-64限定で1週間スプリント開始
|