主要な変更: - MIR Core-13命令セット確定(Load/Store削除の革命的設計) - Const, BinOp, Compare(値・計算) - Jump, Branch, Return, Phi(制御) - Call, BoxCall, ExternCall(呼び出し) - TypeOp, Safepoint, Barrier(メタ) - Phase 12.7糖衣構文ドキュメント整理(超圧縮重視、可逆変換保証) - MIRビルダーのモジュール分割完了 - vtableテストスイート拡充 - AI協調開発ツール追加(並列リファクタリング支援) 詳細: - src/mir/instruction_introspection.rs: core13_instruction_names()追加 - MIRビルダー分割: decls.rs, exprs_*.rs, fields.rs - plugin_loader_v2: errors.rs, host_bridge.rs分離 - 論文用データ: mir13-final.md作成 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
3.6 KiB
3.6 KiB
Phase 15 セルフホスティング準備まとめ
作成日: 2025-09-03 作成者: Claude (Gemini・Codex協議結果統合)
専門家の技術評価まとめ
Gemini先生の分析
- 実現可能性: MIR 13命令で十分実現可能、BoxCallの設計が鍵
- 推奨バックエンド: Cranelift + lld(開発速度・安全性・成熟度)
- コード削減: 75%削減は現実的(Arc→GC、動的ディスパッチ)
- 段階的アプローチ: まず動くものを作り、後から最適化
Codex先生の具体設計
- BoxCall実装: 隠れクラス(Shape)+ vtable + セレクタインターン
- JIT最適化: IC/PIC、Shapeガード、devirtualization
- ブートストラップ: c0→c1→c1'の具体手順、決定論的ビルド
- 並列化: GCでロック削減、フェーズ境界でバリア同期
今すぐ着手可能な準備作業
1. BoxCall設計の詳細化(最優先)
// BoxCall命令のメタデータ設計
BoxCall {
dst: ValueId,
receiver: ValueId,
selector: Sel(u32), // インターン化されたメソッド名
args: Vec<ValueId>,
flags: {
op_kind: OpKind, // Get/Set/Invoke/Convert
target_type: Option<TypeId>,
site_id: u32, // IC/PIC管理用
}
}
2. 最小言語サブセット定義
必須機能:
- 基本型(Integer, String, Bool, Array, Map)
- Box定義(box, birth, field, method)
- 制御構造(if, loop, return)
- 関数定義(static/instance method)
- エラー処理(Result型)
初期は省略:
- ジェネリクス
- trait/interface
- マクロ
- 非同期(async/await)
3. セレクタインターン実装
// src/runtime/selector_intern.rs
pub struct SelectorInterner {
string_to_id: HashMap<String, Sel>,
id_to_string: Vec<String>,
}
4. TypeDesc/VTable構造定義
// crates/nyrt/src/types.rs
pub struct TypeDesc {
id: TypeId,
vtable: *const VTable,
shape_epoch: u32,
}
pub struct VTable {
get: fn(recv: *mut BoxHdr, sel: Sel) -> Value,
set: fn(recv: *mut BoxHdr, sel: Sel, val: Value),
invoke: fn(recv: *mut BoxHdr, sel: Sel, args: &[Value]) -> Value,
// ... 他のメソッド
}
5. MIR最適化パス準備
- BoxCallのdevirtualization検出
- Shapeガード生成
- IC/PICサイト管理
実装ロードマップ
Phase 1: 基盤整備(1-2ヶ月)
- BoxCall命令の完全定義
- セレクタインターンシステム
- TypeDesc/VTable基盤
- 最小サブセット言語仕様
Phase 2: プロトタイプ(2-3ヶ月)
- 素朴なBoxCall実装(文字列ディスパッチ)
- Cranelift統合
- 最小コンパイラ(c0.5)実装
Phase 3: 最適化(2-3ヶ月)
- Shape/vtableハイブリッド
- IC/PIC実装
- devirtualization
Phase 4: セルフホスティング(2-3ヶ月)
- c1実装(Nyashで20,000行)
- ブートストラップ検証
- 性能チューニング
技術的リスクと対策
リスク
- BoxCallの性能オーバーヘッド
- ブートストラップの決定論性
- デバッグの困難さ
対策
- 早期にIC/PIC実装で緩和
- SOURCE_DATE_EPOCH等で環境統一
- MIRダンプ比較ツール整備
成功の指標
- c1がc1'を正しくコンパイル(バイナリ一致)
- 80,000行→20,000行達成
- VM比2倍以上の性能(Cranelift JIT)
次のアクション
- BoxCall詳細設計ドキュメント作成
- セレクタインターン実装開始
- 最小サブセット言語仕様確定
- MIRへのBoxCallメタデータ追加