Files
hakorune/docs/development/roadmap/phases/phase-15/preparation-summary.md
Moe Charm fb2d8e37d5 🎉 Phase 11.8/12.7: MIR Core-13 完全実装 + 糖衣構文ドキュメント更新
主要な変更:
- 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>
2025-09-04 11:34:15 +09:00

3.6 KiB
Raw Blame History

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ヶ月

  1. BoxCall命令の完全定義
  2. セレクタインターンシステム
  3. TypeDesc/VTable基盤
  4. 最小サブセット言語仕様

Phase 2: プロトタイプ2-3ヶ月

  1. 素朴なBoxCall実装文字列ディスパッチ
  2. Cranelift統合
  3. 最小コンパイラc0.5)実装

Phase 3: 最適化2-3ヶ月

  1. Shape/vtableハイブリッド
  2. IC/PIC実装
  3. devirtualization

Phase 4: セルフホスティング2-3ヶ月

  1. c1実装Nyashで20,000行
  2. ブートストラップ検証
  3. 性能チューニング

技術的リスクと対策

リスク

  1. BoxCallの性能オーバーヘッド
  2. ブートストラップの決定論性
  3. デバッグの困難さ

対策

  1. 早期にIC/PIC実装で緩和
  2. SOURCE_DATE_EPOCH等で環境統一
  3. MIRダンプ比較ツール整備

成功の指標

  • c1がc1'を正しくコンパイル(バイナリ一致)
  • 80,000行→20,000行達成
  • VM比2倍以上の性能Cranelift JIT

次のアクション

  1. BoxCall詳細設計ドキュメント作成
  2. セレクタインターン実装開始
  3. 最小サブセット言語仕様確定
  4. MIRへのBoxCallメタデータ追加