主要な変更: - 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>
126 lines
3.6 KiB
Markdown
126 lines
3.6 KiB
Markdown
# Phase 15 セルフホスティング準備まとめ
|
||
作成日: 2025-09-03
|
||
作成者: Claude (Gemini・Codex協議結果統合)
|
||
|
||
## 専門家の技術評価まとめ
|
||
|
||
### Gemini先生の分析
|
||
- **実現可能性**: MIR 13命令で十分実現可能、BoxCallの設計が鍵
|
||
- **推奨バックエンド**: Cranelift + lld(開発速度・安全性・成熟度)
|
||
- **コード削減**: 75%削減は現実的(Arc<Mutex>→GC、動的ディスパッチ)
|
||
- **段階的アプローチ**: まず動くものを作り、後から最適化
|
||
|
||
### Codex先生の具体設計
|
||
- **BoxCall実装**: 隠れクラス(Shape)+ vtable + セレクタインターン
|
||
- **JIT最適化**: IC/PIC、Shapeガード、devirtualization
|
||
- **ブートストラップ**: c0→c1→c1'の具体手順、決定論的ビルド
|
||
- **並列化**: GCでロック削減、フェーズ境界でバリア同期
|
||
|
||
## 今すぐ着手可能な準備作業
|
||
|
||
### 1. BoxCall設計の詳細化(最優先)
|
||
```nyash
|
||
// 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. セレクタインターン実装
|
||
```rust
|
||
// src/runtime/selector_intern.rs
|
||
pub struct SelectorInterner {
|
||
string_to_id: HashMap<String, Sel>,
|
||
id_to_string: Vec<String>,
|
||
}
|
||
```
|
||
|
||
### 4. TypeDesc/VTable構造定義
|
||
```rust
|
||
// 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メタデータ追加 |