1285 lines
41 KiB
Markdown
1285 lines
41 KiB
Markdown
# Phase 15.75: 完全脱Rust大作戦 - 統合ロードマップ
|
||
|
||
**📚 [← ../INDEX.md に戻る](../INDEX.md)** | **🗺️ 全体戦略&タスクリスト完全版**
|
||
|
||
**Status**: Proposal
|
||
**Created**: 2025-10-13
|
||
**Updated**: 2025-10-16
|
||
**Author**: Claude (comprehensive analysis & task planning)
|
||
**Purpose**: Hakoruneプロジェクトの「完全脱Rust」に向けた実行可能な統合ロードマップ
|
||
|
||
---
|
||
|
||
## 📑 目次
|
||
|
||
1. [エグゼクティブサマリー](#-エグゼクティブサマリー)
|
||
2. [現状分析](#-現状分析)
|
||
3. [脱Rust化戦略](#-脱rust化戦略)
|
||
4. [段階的実装計画](#-段階的実装計画)
|
||
5. [Phase別詳細タスクリスト](#-phase別詳細タスクリスト)
|
||
6. [優先順位付けと推奨アクション](#-優先順位付けと推奨アクション)
|
||
7. [技術的課題とリスク評価](#-技術的課題とリスク評価)
|
||
8. [完全脱Rust後の構成](#-完全脱rust後の構成)
|
||
9. [成功要因と教訓](#-成功要因と教訓)
|
||
10. [Go/No-Go判断基準](#-gono-go判断基準)
|
||
11. [タイムライン](#-タイムライン全体)
|
||
12. [進捗トラッキング](#-進捗トラッキング全体)
|
||
|
||
---
|
||
|
||
## 🎯 エグゼクティブサマリー
|
||
|
||
### 現状
|
||
- **Rust依存**: 99,406行、714ファイル
|
||
- **Hakorune VM**: 4,998行、**15/16命令実装(93%完成)**
|
||
- **セルフホストコンパイラ**: **M2/M3達成済み**(63日で完成、2025-10-11)
|
||
- **テスト成功率**: **509/509 PASS (100%)**
|
||
|
||
### 重要な発見
|
||
1. **Hakorune VMは既にほぼ完成している**(MirCall実装のみで16命令完全実装)
|
||
2. セルフホストコンパイラが既に動作している(Rust VMから独立可能)
|
||
3. Phase 15.6で「Everything is Plugin」計画が進行中(Box実装のプラグイン化)
|
||
|
||
### 結論
|
||
**「完全脱Rust」は実現可能だが、段階的なアプローチが最も現実的。**
|
||
|
||
**推奨戦略**: **Option A → Option C → Option A++** (段階的実装)
|
||
- **短期目標 (Option A)**: Rust依存を89.5%削減(99,406行 → 10,400行)
|
||
- **長期目標 (Option A++)**: Rust依存を96.5%削減(99,406行 → 3,500行) 🚀
|
||
- OS API直接利用(malloc/free, pthread, clock_gettime)
|
||
- プラグインシステム以外は完全Hakorune化
|
||
|
||
### 実績ベース見積もり(Git履歴: 21.6コミット/日、115行削減/日)
|
||
|
||
```
|
||
【1ヶ月計画】(Phase 1-2: 核心部分完了)
|
||
Week 0-1 (今) → P1スコープ(基盤整備)
|
||
Week 2-3 (Phase 1) → Hakorune VM完成(MirCall実装)
|
||
Week 4 (Phase 2) → Parser Selfhost化完了
|
||
|
||
= Rust VMからの完全独立
|
||
= 12,760行削減(12.8%)
|
||
= ユーザー見積もり「1ヶ月」✅
|
||
|
||
【拡張計画】(Phase 3以降: 1ヶ月後~)
|
||
Week 5-8 (Phase 3) → Boxes プラグイン化(4週間)
|
||
Week 9-16 (Phase 4) → Runtime置き換え(8週間)
|
||
Week 17-22(Phase 5) → AOT化(6週間)
|
||
|
||
= 総期間: 約6ヶ月
|
||
= Hakoruneは業界標準の29倍速(実証済み)
|
||
```
|
||
|
||
---
|
||
|
||
## 📊 1. 現状分析
|
||
|
||
### 1.1 Rust依存の完全な棚卸し
|
||
|
||
#### 主要コンポーネント別内訳
|
||
| コンポーネント | 行数 | ファイル数 | 役割 | 脱Rust化可能性 |
|
||
|---------------|------|-----------|------|--------------|
|
||
| **Rust VM** | 5,123 | 20+ | MIR実行エンジン | **高** (93%完成のHakorune VMで代替) |
|
||
| **Parser/Tokenizer** | 7,637 | 12+ | ソースコードパース | **高** (セルフホストコンパイラ完成) |
|
||
| **Boxes実装** | 12,752 | 100+ | 基本Boxの実装 | **高** (Phase 15.6でプラグイン化) |
|
||
| **Runtime** | 9,311 | 50+ | GC・型・モジュール | **中** (GC 335行は残す) |
|
||
| **Backend全体** | 15,722 | 30+ | VM/LLVM/WASM/AOT | **中** (LLVM wrapper 363行、WASM残す) |
|
||
| **CLI** | 619 | 4 | CLI引数処理 | **高** (優先度低) |
|
||
| **Plugin Loader** | 3,098 | 19 | プラグイン動的ロード | **低** (C ABI必須) |
|
||
| **C ABI** | ~500 | 4 | FFI境界 | **不可能** (必須) |
|
||
| **総計** | **99,406** | **714** | - | - |
|
||
|
||
#### 外部クレート依存(24個)
|
||
```
|
||
主要: anyhow, chrono, clap, serde/serde_json, regex, libloading
|
||
WASM: wasm-bindgen, js-sys, web-sys
|
||
コア: lazy_static, once_cell, log, env_logger
|
||
開発: criterion (ベンチマーク)
|
||
```
|
||
|
||
### 1.2 Hakorune VM vs Rust VM 比較
|
||
|
||
#### 実装状況
|
||
| 項目 | Rust VM | Hakorune VM | ギャップ |
|
||
|------|---------|-------------|----------|
|
||
| **行数** | 5,123行 | 4,998行 | -2.4% (ほぼ同等) |
|
||
| **実装言語** | Rust | Hakorune (.hako) | - |
|
||
| **実装済み命令** | 16/16 (100%) | **15/16 (93%)** | **MirCallのみ** |
|
||
| **トレース機能** | 完備 | 基本のみ | 拡張必要 |
|
||
| **パフォーマンス** | 高速 | 未測定 | 要ベンチマーク |
|
||
| **AOT化** | 不要 (ネイティブ) | 可能 (LLVM) | Phase 2で実装 |
|
||
|
||
#### MIR命令セット(凍結セット16命令)
|
||
- **基本演算**(5): Const, UnaryOp, BinOp, Compare, TypeOp ✅
|
||
- **メモリ**(2): Load, Store ✅
|
||
- **制御**(4): Branch, Jump, Return, Phi ✅
|
||
- **呼び出し**(1): **MirCall** ⏳ ← **未実装(最重要!)**
|
||
- **GC**(2): Barrier, Safepoint ✅
|
||
- **構造**(2): Copy, Nop ✅
|
||
|
||
**結論**: **Hakorune VMは既に93%完成。MirCall実装で100%完成する。**
|
||
|
||
---
|
||
|
||
## 🚀 2. 脱Rust化戦略
|
||
|
||
### 2.1 最終目標の定義
|
||
|
||
#### Option A: Rust VM → Hakorune VM完全移行(C ABIは残す)
|
||
**推奨度**: ⭐⭐⭐⭐⭐ (最も現実的)
|
||
|
||
**内容**:
|
||
- Rust VM (5,123行) → Hakorune VM (4,998行) に完全移行
|
||
- C ABI層(~500行)は維持(プラグインシステムに必須)
|
||
- Parser/Tokenizer → セルフホストコンパイラに移行
|
||
- Boxes実装 → プラグイン化(Phase 15.6)
|
||
- Runtime → 最小限のC ABI + Hakorune実装
|
||
|
||
**削減見込み**:
|
||
- **削減**: 99,406行 → **約10,400行** (89.5%削減)
|
||
- **残存**: C ABI (~500行) + GC/Runtime (~5,000行) + LLVM Rust wrapper (~363行) + WASM (~3,000行) + Plugin Loader (~3,000行)
|
||
- **注**: Python llvmlite実装(211,887行)は既に脱Rust済み、対象外
|
||
|
||
#### Option B: Rust依存ゼロ(C/C++のみ)
|
||
**推奨度**: ⭐⭐ (理想的だが現実的でない)
|
||
|
||
**問題点**:
|
||
- C/C++で5万行以上の再実装が必要
|
||
- メモリ安全性の喪失
|
||
- LLVM/WASMバックエンドの再実装が困難
|
||
- 開発期間: **6-12ヶ月**以上
|
||
|
||
#### Option C: Hakorune VM AOT化(Phase 2-3で実装)
|
||
**推奨度**: ⭐⭐⭐⭐ (Option Aの延長)
|
||
|
||
**内容**:
|
||
- Hakorune VM自体をLLVMでAOT化
|
||
- パフォーマンス問題を完全に解決
|
||
- Rust VMと同等以上の速度を実現
|
||
|
||
**推奨戦略**: **Option A → Option C** (段階的実装)
|
||
|
||
#### ⭐ Option A++: OS API直接利用(究極の脱Rust)
|
||
**推奨度**: ⭐⭐⭐⭐⭐⭐ (Option A完了後の長期目標)
|
||
|
||
**前提**: Option A完了後(Phase 1-3完了、Hakorune VM + セルフホストコンパイラ完成)
|
||
|
||
**内容**:
|
||
- **メモリ管理** → `malloc/free` (libc)
|
||
- Rust GC (200行) を完全削除
|
||
- OS標準アロケータ利用(glibc/jemalloc最適化済み)
|
||
- 参照カウント or アリーナアロケータ追加
|
||
|
||
- **LLVM Rust wrapper** → Python llvmlite直接呼び出し
|
||
- Rust wrapper (363行) を削除
|
||
- Hakorune Script から Python llvmlite を直接起動
|
||
|
||
- **Runtime** → OS API直接利用
|
||
- Scheduler → `pthread` (スレッド管理)
|
||
- MessageBus → `pipe/socket` (プロセス間通信)
|
||
- Timer → `clock_gettime` (時刻取得)
|
||
- その他Runtime (3,337行) を OS API に置き換え
|
||
|
||
- **残存Rust依存**
|
||
- C ABI層 (~500行) - プラグインFFI境界(必須)
|
||
- Plugin Loader (~3,000行) - `dlopen/dlsym` wrapper(必須)
|
||
|
||
**削減見込み**:
|
||
- **削減**: 99,406行 → **約3,500行** (**96.5%削減!** 🚀)
|
||
- **残存**: C ABI (~500行) + Plugin Loader (~3,000行)
|
||
- **完全削除**: GC (~200行) + LLVM wrapper (~363行) + Runtime (~3,337行) = **約6,900行**
|
||
|
||
**実装期間**: 6-8週間(Option A完了後)
|
||
|
||
**推奨戦略**: **Option A → Option C → Option A++** (段階的実装)
|
||
|
||
---
|
||
|
||
## 📅 3. 段階的実装計画
|
||
|
||
### 🧭 Phase 15.75 補遺 — 二本立て運用(legacy と plugin‑only)
|
||
|
||
#### 目的
|
||
- 脱Rustの前段として「境界の明確化」と「混乱の低減」を優先。Rust ラインは温存しつつ、plugin‑only を常時検証できる体制にする。
|
||
|
||
#### 方針(結論)
|
||
- 先に「分離(箱化+ガード)」を済ませてから、薄い単位で脱Rustを進める(Box‑First/Fail‑Fast)。
|
||
- ただし純関数領域や leaf な経路は、分離と同時に置き換えてもよい(安全な並走)。
|
||
|
||
#### ビルドライン(公式2本)
|
||
- Legacy(既定): `cargo build --release`(`legacy-boxes` 有効)
|
||
- Plugin‑only(検証): `cargo build --release --no-default-features -F cli,plugins,host-anchors`
|
||
|
||
#### CI(最小ガード)
|
||
- Job A: Legacy build + quick スモーク
|
||
- Job B: Plugin‑only build(ビルドのみ)
|
||
|
||
#### コード分割の要点(次の小ステップ)
|
||
1) ルーター分割: `runtime/method_router_box/{builtin.rs, plugin.rs}`
|
||
2) extern 分割: `extern_adapter/{extern_core.rs, extern_future_legacy.rs}`
|
||
3) フラットナ: `array_flatten_helper/{flatten_builtin.rs, flatten_plugin.rs}`
|
||
4) 各箱直下 README: 責務/入出力/ガード/撤退計画を明記
|
||
|
||
#### 現状の制約(plugin‑only)
|
||
- `env.future`/`VMValue::Future` は legacy 限定(plugin‑only は明示エラー)
|
||
- ルーターの builtin 腕(FileBox/CallableBox/ArrayBox/MapBox)は legacy 限定。plugin‑only は plugin 経路のみ。
|
||
|
||
#### 推奨ワークフロー
|
||
1. 参照ガード → plugin‑only ビルドで赤を潰す
|
||
2. スモーク(quick/plugins)で観測を広げる
|
||
3. leaf 領域から .hako 置き換え(分離済みの箱を1つずつ)
|
||
4. 緑が揃った箱から legacy を撤退(`features` → 物理削除)
|
||
|
||
---
|
||
|
||
### Phase 1: Hakorune VM完成(最優先)⭐
|
||
**期間**: **2-3週間**
|
||
**難易度**: Medium
|
||
**優先度**: P0 (最高優先)
|
||
|
||
#### 実装内容
|
||
1. **MirCall実装**(1週間)← **最重要!**
|
||
- Callee型の完全実装
|
||
- Global(String)
|
||
- Extern(String)
|
||
- ModuleFunction(String)
|
||
- Method { box_name, method, receiver, certainty }
|
||
- Constructor { box_type }
|
||
- Closure { params, captures, me_capture }
|
||
- Value(ValueId)
|
||
- Call/BoxCall/ExternCall/NewBoxの統合
|
||
- レガシー命令のマッピング
|
||
|
||
2. **トレース機能拡張**(3日)
|
||
- Rust VMと同等のトレース機能
|
||
- HAKO_VM_TRACE相当の実装
|
||
- デバッグ容易性の確保
|
||
|
||
3. **パフォーマンス測定**(2日)
|
||
- ベンチマークスイート実行
|
||
- Rust VM vs Hakorune VM比較
|
||
- ボトルネック特定
|
||
|
||
4. **統合テスト**(3日)
|
||
- 509テストすべてPASS維持
|
||
- パリティテスト(VM/LLVM一致)
|
||
- エッジケース検証
|
||
|
||
#### 期待される効果
|
||
- ✅ Rust VMからの完全独立
|
||
- ✅ 16命令完全実装(100%)
|
||
- ✅ セルフホスティングの完全実現
|
||
|
||
#### リスク
|
||
- **Medium**: パフォーマンス劣化の可能性 → Phase 2 (AOT化) で解決
|
||
- **Low**: MirCall実装の複雑性 → 既存のCall/BoxCall実装を参考にできる
|
||
|
||
---
|
||
|
||
### Phase 2: Parser/Tokenizerのセルフホスト化
|
||
**期間**: **1-2週間**
|
||
**難易度**: Easy (既に85%完成)
|
||
**優先度**: P1 (高)
|
||
|
||
#### 実装内容
|
||
1. **セルフホストコンパイラの完成**(1週間)
|
||
- M2/M3達成済み → 残り15%の実装
|
||
- Pipeline V2の完成
|
||
- エラーハンドリング強化
|
||
|
||
2. **Rustパーサーの段階的置き換え**(1週間)
|
||
- デュアルパス方式(Rust + Hakorune並行実行)
|
||
- パリティテストで互換性確認
|
||
- フラグ切り替え(HAKO_USE_SELFHOST_PARSER=1)
|
||
|
||
#### 期待される効果
|
||
- ✅ Parser/Tokenizer (7,637行) の脱Rust化
|
||
- ✅ セルフホスティングの完全独立
|
||
|
||
#### リスク
|
||
- **Low**: パフォーマンス劣化 → AOT化で解決
|
||
- **Low**: エッジケースの互換性 → テストカバレッジ高い
|
||
|
||
---
|
||
|
||
### Phase 3: Boxes実装のプラグイン化
|
||
**期間**: **4-6週間**
|
||
**難易度**: Medium-Hard
|
||
**優先度**: P1 (高)
|
||
**Note**: **Phase 15.6で既に計画中**
|
||
|
||
#### 実装内容(Phase 15.6計画から)
|
||
**核心コンセプト**:
|
||
```
|
||
plugins/ ← すべてのBox実装(唯一の管理場所)
|
||
├── core系 ← 静的リンク候補(hako_kernel features)
|
||
└── 拡張系 ← 動的ロード
|
||
|
||
src/boxes/ ← 完全削除(段階的)
|
||
|
||
方針: 単一ソース + ビルド分岐(動的 or 静的)
|
||
```
|
||
|
||
**実装戦略**(30-40時間見積もり):
|
||
- **Week 1**: 基盤系プラグイン化(FutureBox, ResultBox, NullBox等 7個)
|
||
- **Week 2**: IO/ネットワーク系(BufferBox, HTTPBox, SocketBox等)
|
||
- **Week 3**: 統合テスト、src/boxes/ 削除
|
||
|
||
#### 期待される効果
|
||
- ✅ Boxes実装 (12,752行) の脱Rust化
|
||
- ✅ プラグインシステムの完全確立
|
||
- ✅ 単一ソース原則の実現
|
||
|
||
#### リスク
|
||
- **Medium**: 重複登録ガードの実装
|
||
- **Medium**: 既存コードとの互換性維持
|
||
- **Low**: パフォーマンス劣化 → 静的リンクで解決
|
||
|
||
---
|
||
|
||
### Phase 4: Runtime部分の段階的置き換え
|
||
**期間**: **6-8週間**
|
||
**難易度**: Hard
|
||
**優先度**: P2 (中)
|
||
|
||
#### 実装内容
|
||
1. **型システムの置き換え**(2週間)
|
||
- TypeBox → プラグイン化
|
||
- 型解決 → Hakorune実装
|
||
- SSOT (Single Source of Truth) 完全実現
|
||
|
||
2. **モジュールシステムの置き換え**(2週間)
|
||
- ModuleRegistry → Hakorune実装
|
||
- Using解決 → セルフホストコンパイラに統合
|
||
|
||
3. **GC最小化**(2週間)
|
||
- GCアルゴリズム → Hakorune実装
|
||
- Rust側 → 最小限のC ABIのみ提供
|
||
- パフォーマンス重視の部分は残す(335行 → 200行)
|
||
|
||
4. **その他Runtime**(2週間)
|
||
- Scheduler, MessageBus等 → Hakorune実装
|
||
- C ABI経由でRustと連携
|
||
|
||
#### 期待される効果
|
||
- ✅ Runtime (9,311行) の大部分を脱Rust化
|
||
- ✅ GC (335行 → 200行) の最小化
|
||
- ✅ 最小限のC ABI層の確立
|
||
|
||
#### リスク
|
||
- **High**: パフォーマンス劣化の可能性
|
||
- **High**: メモリ安全性の確保
|
||
- **Medium**: GC実装の複雑性
|
||
|
||
---
|
||
|
||
### Phase 5: Hakorune VM AOT化(パフォーマンス最適化)
|
||
**期間**: **4-6週間**
|
||
**難易度**: Medium
|
||
**優先度**: P2 (中)
|
||
|
||
#### 実装内容
|
||
1. **Hakorune VM → LLVM IR変換**(3週間)
|
||
- Hakorune VM全体をLLVMでコンパイル
|
||
- AOT化ツールチェーンの構築
|
||
- 最適化パスの適用
|
||
|
||
2. **パフォーマンス最適化**(2週間)
|
||
- ベンチマーク実行
|
||
- ホットパスの最適化
|
||
- Rust VMと同等以上の速度を実現
|
||
|
||
3. **配布パッケージング**(1週間)
|
||
- AOT化されたバイナリの配布
|
||
- インストーラー作成
|
||
- ドキュメント整備
|
||
|
||
#### 期待される効果
|
||
- ✅ パフォーマンス問題の完全解決
|
||
- ✅ Rust VMと同等以上の速度
|
||
- ✅ 配布の簡素化(単一バイナリ)
|
||
|
||
#### リスク
|
||
- **Medium**: AOT化の複雑性
|
||
- **Low**: LLVM最適化の調整
|
||
|
||
---
|
||
|
||
## 🗓️ 4. Phase別詳細タスクリスト
|
||
|
||
### 📌 Week 0-2: P1スコープ(現在のTODO)
|
||
|
||
**期間**: 2025-10-13(今) ~ 2025-10-27
|
||
**Phase**: 準備フェーズ
|
||
**目標**: 基盤整備 + 小規模移行実験
|
||
|
||
#### **Week 0(今週): 短期タスク完了**
|
||
```
|
||
✅ [DONE] Map.call P1実装&スモーク
|
||
✅ [DONE] Fallback アダプタの箱化
|
||
✅ [DONE] HostHandleRouter stub作成
|
||
|
||
📋 [TODO] 次アクション:
|
||
1. Map.call P1 最終確定(スモーク3本確認)
|
||
2. plugin-on スモーク拡充(keys/values Stage-2)
|
||
3. HostHandleRouter 段階移設(1関数のみ)
|
||
```
|
||
|
||
#### **Week 1(来週): P1完了 + Phase 1準備**
|
||
```
|
||
📋 TODO:
|
||
1. HostHandleRouter 段階移設継続(2-3関数追加)
|
||
2. Parser/Tokenizer 小片先行移行
|
||
- Token utils/小スキャナ(純関数領域)
|
||
- JSON抽出の indexOf を JsonCursor に統合
|
||
3. Phase 1(MirCall)設計開始
|
||
- Callee型設計ドキュメント作成
|
||
- MirCall実装計画レビュー(Claude + ChatGPT)
|
||
```
|
||
|
||
#### **Week 2: Phase 1着手準備完了**
|
||
```
|
||
📋 TODO:
|
||
1. Parser/Tokenizer 小片移行完了
|
||
- スモーク: JSON/文字列/mini-parser(quick)
|
||
2. MirCall実装準備
|
||
- 必要な extern_adapter.rs/vm_types.rs に最小ガード
|
||
- CalleeBox設計完了
|
||
3. Week 3以降のスプリント計画確定
|
||
```
|
||
|
||
**完了条件**:
|
||
- ✅ P1スコープすべて完了
|
||
- ✅ スモークテスト: 170/185 PASS維持
|
||
- ✅ Phase 1実装準備完了
|
||
|
||
---
|
||
|
||
### 🚀 Week 3-5: Phase 1 - Hakorune VM完成
|
||
|
||
**期間**: 2025-10-28 ~ 2025-11-17
|
||
**Phase**: Phase 1
|
||
**目標**: MirCall実装 → 16命令100%完成
|
||
|
||
#### **Week 3: MirCall実装(基礎)**
|
||
```
|
||
📋 TODO(Day 1-7):
|
||
Day 1-2: Callee型実装
|
||
- CalleeBox作成(Hakoruneで実装)
|
||
- 7種類のCallee variant実装
|
||
- Global(String)
|
||
- Extern(String)
|
||
- ModuleFunction(String)
|
||
- Method { box_name, method, receiver, certainty }
|
||
- Constructor { box_type }
|
||
- Closure { params, captures, me_capture }
|
||
- Value(ValueId)
|
||
- レガシー命令のマッピング
|
||
|
||
Day 3-4: MirCallHandlerBox実装
|
||
- MirCallHandlerBox作成
|
||
- 各Callee typeのディスパッチ
|
||
- InstructionDispatcherBoxへの統合
|
||
|
||
Day 5-7: 初期テスト
|
||
- Global/Externの基本テスト(50個)
|
||
- ModuleFunctionの基本テスト(30個)
|
||
- スモークテスト: 最低100/185 PASS
|
||
```
|
||
|
||
**完了条件**:
|
||
- ✅ Callee型完全実装
|
||
- ✅ Global/Extern/ModuleFunctionの3種類動作
|
||
- ✅ 基本テスト80個PASS
|
||
|
||
#### **Week 4: MirCall実装(拡張)**
|
||
```
|
||
📋 TODO(Day 8-14):
|
||
Day 8-10: 高度なCallee実装
|
||
- Method Callee完全実装
|
||
- Constructor Callee完全実装
|
||
- Closure Callee実装(基本のみ)
|
||
|
||
Day 11-12: 統合テスト
|
||
- Call/BoxCall/ExternCall/NewBoxの統合
|
||
- レガシー命令との互換性確認
|
||
- スモークテスト: 最低150/185 PASS
|
||
|
||
Day 13-14: パフォーマンス測定
|
||
- ベンチマークスイート実行
|
||
- Rust VM vs Hakorune VM比較
|
||
- ボトルネック特定
|
||
```
|
||
|
||
**完了条件**:
|
||
- ✅ 7種類のCallee全て実装
|
||
- ✅ スモークテスト: 150/185 PASS
|
||
- ✅ パフォーマンス測定完了
|
||
|
||
#### **Week 5: Phase 1完了 + トレース強化**
|
||
```
|
||
📋 TODO(Day 15-21):
|
||
Day 15-16: トレース機能拡張
|
||
- Rust VMと同等のトレース機能
|
||
- HAKO_VM_TRACE相当の実装
|
||
- ステッパ機能追加
|
||
|
||
Day 17-18: 統合テスト完了
|
||
- 509テストすべてPASS(目標)
|
||
- パリティテスト(VM/LLVM一致)
|
||
- エッジケース検証
|
||
|
||
Day 19-20: ドキュメント整備
|
||
- Phase 1実装ドキュメント完成
|
||
- MirCall設計ドキュメント
|
||
- Phase 2準備ドキュメント
|
||
|
||
Day 21: Phase 1完了宣言 + Phase 2計画レビュー
|
||
```
|
||
|
||
**完了条件**:
|
||
- ✅ 16命令100%実装
|
||
- ✅ スモークテスト: 509/509 PASS(理想)または 170/185 PASS維持
|
||
- ✅ トレース機能動作
|
||
- ✅ ドキュメント完備
|
||
|
||
---
|
||
|
||
### 📝 Week 6-7: Phase 2 - Parser/Tokenizer Selfhost化
|
||
|
||
**期間**: 2025-11-18 ~ 2025-12-01
|
||
**Phase**: Phase 2
|
||
**目標**: Rust Parser → Hakorune Parser完全移行
|
||
|
||
#### **Week 6: セルフホストコンパイラ完成**
|
||
```
|
||
📋 TODO(Day 22-28):
|
||
Day 22-24: セルフホストコンパイラ残り15%実装
|
||
- Pipeline V2の完成
|
||
- エラーハンドリング強化
|
||
- 構文エラーメッセージ改善
|
||
|
||
Day 25-26: デュアルパス方式実装
|
||
- Rust + Hakorune並行実行
|
||
- パリティテストで互換性確認
|
||
- フラグ切り替え(HAKO_USE_SELFHOST_PARSER=1)
|
||
|
||
Day 27-28: 初期テスト
|
||
- Parser単体テスト(200個)
|
||
- MIR出力比較(Rust vs Hakorune)
|
||
- エッジケース検証
|
||
```
|
||
|
||
**完了条件**:
|
||
- ✅ セルフホストコンパイラ100%完成
|
||
- ✅ デュアルパス方式動作
|
||
- ✅ Parser単体テスト200個PASS
|
||
|
||
#### **Week 7: Rustパーサー置き換え完了**
|
||
```
|
||
📋 TODO(Day 29-35):
|
||
Day 29-31: 段階的置き換え
|
||
- 既存テストで互換性確認(509個)
|
||
- パフォーマンス測定
|
||
- エラーメッセージ品質確認
|
||
|
||
Day 32-34: スモークテスト全pass
|
||
- quick/full スイート(509個)
|
||
- エッジケース追加テスト
|
||
- Rust Parser削除準備
|
||
|
||
Day 35: Phase 2完了 + Phase 3計画レビュー
|
||
- Parser/Tokenizer (7,637行) 削減確認
|
||
- ドキュメント更新
|
||
- Phase 3開始準備
|
||
```
|
||
|
||
**完了条件**:
|
||
- ✅ Rust Parser完全置き換え
|
||
- ✅ スモークテスト: 509/509 PASS
|
||
- ✅ Parser/Tokenizer 7,637行削減
|
||
|
||
---
|
||
|
||
### 🔧 Week 8-13: Phase 3 - Boxes プラグイン化
|
||
|
||
**期間**: 2025-12-02 ~ 2026-01-12
|
||
**Phase**: Phase 3
|
||
**目標**: src/boxes/ → plugins/ 完全移行
|
||
|
||
**Note**: Phase 15.6と統合(重複作業なし)
|
||
|
||
#### **Week 8-9: 基盤系プラグイン化(7個)**
|
||
```
|
||
📋 TODO(Week 8: Day 36-42):
|
||
1. FutureBox → plugins/future/
|
||
2. ResultBox → plugins/result/
|
||
3. NullBox → plugins/null/
|
||
4. BoolBox → plugins/bool/
|
||
5. IntegerBox → plugins/integer/
|
||
6. FloatBox → plugins/float/
|
||
7. StringBox → plugins/string/
|
||
|
||
各Box:
|
||
- プラグイン実装(Hakorune)
|
||
- テスト移植
|
||
- ドキュメント作成
|
||
- スモークテスト確認
|
||
|
||
📋 TODO(Week 9: Day 43-49):
|
||
- 7個のプラグイン統合テスト
|
||
- パフォーマンス測定
|
||
- src/boxes/の対応ファイル削除準備
|
||
```
|
||
|
||
**完了条件**:
|
||
- ✅ 7個のプラグイン完成
|
||
- ✅ スモークテスト: 509/509 PASS維持
|
||
- ✅ パフォーマンス劣化なし
|
||
|
||
#### **Week 10-11: IO/ネットワーク系プラグイン化**
|
||
```
|
||
📋 TODO(Week 10: Day 50-56):
|
||
1. FileBox → plugins/file/
|
||
2. BufferBox → plugins/buffer/
|
||
3. HTTPBox → plugins/http/
|
||
4. SocketBox → plugins/socket/
|
||
5. ProcessBox → plugins/process/
|
||
|
||
📋 TODO(Week 11: Day 57-63):
|
||
- IO系統合テスト
|
||
- ネットワーク系統合テスト
|
||
- セキュリティ検証
|
||
```
|
||
|
||
**完了条件**:
|
||
- ✅ IO/ネットワーク系5個完成
|
||
- ✅ セキュリティテストPASS
|
||
|
||
#### **Week 12-13: 残りBox移行 + src/boxes/削除**
|
||
```
|
||
📋 TODO(Week 12: Day 64-70):
|
||
1. ArrayBox → plugins/array/
|
||
2. MapBox → plugins/map/
|
||
3. その他残り全Box → plugins/
|
||
|
||
📋 TODO(Week 13: Day 71-77):
|
||
- 全プラグイン統合テスト(509個)
|
||
- src/boxes/ 完全削除
|
||
- ドキュメント更新
|
||
- Phase 3完了宣言
|
||
```
|
||
|
||
**完了条件**:
|
||
- ✅ 全Box(12,752行)プラグイン化
|
||
- ✅ src/boxes/ 完全削除
|
||
- ✅ スモークテスト: 509/509 PASS
|
||
|
||
---
|
||
|
||
### ⚙️ Week 14-21: Phase 4 - Runtime置き換え
|
||
|
||
**期間**: 2026-01-13 ~ 2026-03-02
|
||
**Phase**: Phase 4
|
||
**目標**: Runtime (9,311行) → Hakorune実装
|
||
|
||
#### **Week 14-15: 型システム置き換え**
|
||
```
|
||
📋 TODO(Week 14: Day 78-84):
|
||
1. TypeBox → プラグイン化
|
||
2. 型解決 → Hakorune実装
|
||
3. SSOT (Single Source of Truth) 実現
|
||
|
||
📋 TODO(Week 15: Day 85-91):
|
||
- 型システム統合テスト
|
||
- パフォーマンス測定
|
||
- ドキュメント更新
|
||
```
|
||
|
||
**完了条件**:
|
||
- ✅ 型システム完全置き換え
|
||
- ✅ SSOT実現
|
||
|
||
#### **Week 16-17: モジュールシステム置き換え**
|
||
```
|
||
📋 TODO(Week 16: Day 92-98):
|
||
1. ModuleRegistry → Hakorune実装
|
||
2. Using解決 → セルフホストコンパイラに統合
|
||
|
||
📋 TODO(Week 17: Day 99-105):
|
||
- モジュールシステム統合テスト
|
||
- 循環依存検出テスト
|
||
```
|
||
|
||
**完了条件**:
|
||
- ✅ モジュールシステム完全置き換え
|
||
|
||
#### **Week 18-19: GC最小化**
|
||
```
|
||
📋 TODO(Week 18: Day 106-112):
|
||
1. GCアルゴリズム → Hakorune実装
|
||
2. Rust側 → 最小限のC ABIのみ提供(335行 → 200行)
|
||
|
||
📋 TODO(Week 19: Day 113-119):
|
||
- GC統合テスト
|
||
- メモリリークテスト(Valgrind)
|
||
- パフォーマンス測定
|
||
```
|
||
|
||
**完了条件**:
|
||
- ✅ GC (335行 → 200行) 最小化
|
||
- ✅ メモリリークなし
|
||
|
||
#### **Week 20-21: その他Runtime置き換え**
|
||
```
|
||
📋 TODO(Week 20: Day 120-126):
|
||
1. Scheduler → Hakorune実装
|
||
2. MessageBus → Hakorune実装
|
||
|
||
📋 TODO(Week 21: Day 127-133):
|
||
- Runtime統合テスト(509個)
|
||
- Phase 4完了宣言
|
||
- Phase 5準備
|
||
```
|
||
|
||
**完了条件**:
|
||
- ✅ Runtime (9,311行) 大部分置き換え
|
||
- ✅ スモークテスト: 509/509 PASS
|
||
|
||
---
|
||
|
||
### 🚀 Week 22-27: Phase 5 - AOT化(パフォーマンス最適化)
|
||
|
||
**期間**: 2026-03-03 ~ 2026-04-13
|
||
**Phase**: Phase 5
|
||
**目標**: Hakorune VM AOT化 → Rust VMと同等以上の速度
|
||
|
||
#### **Week 22-24: Hakorune VM → LLVM IR変換**
|
||
```
|
||
📋 TODO(Week 22: Day 134-140):
|
||
1. Hakorune VM全体をLLVMでコンパイル
|
||
2. AOT化ツールチェーンの構築
|
||
|
||
📋 TODO(Week 23: Day 141-147):
|
||
- 最適化パスの適用
|
||
- デバッグ情報の保持
|
||
|
||
📋 TODO(Week 24: Day 148-154):
|
||
- AOT化されたバイナリのテスト
|
||
- パフォーマンス測定
|
||
```
|
||
|
||
**完了条件**:
|
||
- ✅ AOT化ツールチェーン完成
|
||
- ✅ パフォーマンス: Rust VMの80%以上
|
||
|
||
#### **Week 25-26: パフォーマンス最適化**
|
||
```
|
||
📋 TODO(Week 25: Day 155-161):
|
||
1. ベンチマークスイート実行
|
||
2. ホットパスの最適化
|
||
3. ボトルネック解消
|
||
|
||
📋 TODO(Week 26: Day 162-168):
|
||
- 最終パフォーマンス測定
|
||
- 目標: Rust VMと同等以上(100-120%)
|
||
```
|
||
|
||
**完了条件**:
|
||
- ✅ パフォーマンス: Rust VMの100%以上
|
||
- ✅ ベンチマーク全pass
|
||
|
||
#### **Week 27: 配布パッケージング + Phase 5完了**
|
||
```
|
||
📋 TODO(Day 169-175):
|
||
1. AOT化されたバイナリの配布
|
||
2. インストーラー作成
|
||
3. ドキュメント整備
|
||
4. Phase 5完了宣言
|
||
|
||
最終確認:
|
||
- ✅ Rust依存: 99,406行 → 10,400行(89.5%削減)
|
||
- ✅ スモークテスト: 509/509 PASS
|
||
- ✅ パフォーマンス: Rust VMの100-120%
|
||
```
|
||
|
||
**完了条件**:
|
||
- ✅ Phase 1-5すべて完了
|
||
- ✅ Option A達成(89.5%削減)
|
||
|
||
---
|
||
|
||
## 🎯 5. 優先順位付けと推奨アクション
|
||
|
||
### 最優先タスク(Phase 15.75として実行)
|
||
|
||
#### **Task 1: Hakorune VM MirCall実装** ⭐⭐⭐⭐⭐
|
||
**期間**: 1週間
|
||
**担当**: Claude + ChatGPT協調
|
||
|
||
**実装手順**:
|
||
1. **Day 1-2**: Callee型の設計と実装
|
||
- CalleeBox作成(Hakoruneで実装)
|
||
- 7種類のCallee variant実装
|
||
- レガシー命令のマッピング
|
||
|
||
2. **Day 3-4**: MirCallハンドラー実装
|
||
- MirCallHandlerBox作成
|
||
- 各Callee typeのディスパッチ
|
||
- InstructionDispatcherBoxへの統合
|
||
|
||
3. **Day 5**: テストと検証
|
||
- 既存テスト(509個)をすべてPASS維持
|
||
- 新規テスト追加(MirCall専用)
|
||
- パリティテスト(VM/LLVM)
|
||
|
||
4. **Day 6-7**: ドキュメント整備とコミット
|
||
- 実装ドキュメント作成
|
||
- コミットメッセージ作成
|
||
- Phase 15.75完了宣言
|
||
|
||
**受け入れ条件**:
|
||
- ✅ 16命令完全実装(100%)
|
||
- ✅ 509テストすべてPASS
|
||
- ✅ VM/LLVMパリティ維持
|
||
- ✅ トレース機能動作
|
||
|
||
---
|
||
|
||
## ⚠️ 6. 技術的課題とリスク評価
|
||
|
||
### 6.1 パフォーマンス維持
|
||
|
||
#### 課題
|
||
- Hakorune VMはインタープリタなので、Rust VMより遅い可能性
|
||
- GCオーバーヘッドの増加
|
||
- FFI境界のオーバーヘッド
|
||
|
||
#### 対策
|
||
1. **Phase 2: AOT化**(Hakorune VM全体をLLVMでコンパイル)
|
||
- 予想: Rust VMと同等以上の速度
|
||
- 実装期間: 4-6週間
|
||
|
||
2. **ホットパス最適化**
|
||
- ベンチマークで特定
|
||
- クリティカルパスのみRustで実装
|
||
|
||
3. **JIT検討**(Phase 10: Cranelift JIT)
|
||
- 長期計画として検討
|
||
- 現時点では不要
|
||
|
||
#### リスク評価
|
||
- **Phase 1完了時**: パフォーマンス劣化 **50-70%** の可能性
|
||
- **Phase 2完了時**: パフォーマンス改善 **100-120%** の予想
|
||
|
||
### 6.2 メモリ管理
|
||
|
||
#### 課題
|
||
- Rustのメモリ安全性を失う
|
||
- GC実装のバグリスク
|
||
- メモリリーク検出の難しさ
|
||
|
||
#### 対策
|
||
1. **GCは最小限のRust実装を維持**(335行 → 200行)
|
||
2. **Hakorune側はGC APIのみ呼び出す**
|
||
3. **メモリリークテスト強化**
|
||
4. **Valgrind/ASan対応**
|
||
|
||
#### リスク評価
|
||
- **Medium**: GC部分は残すので大きなリスクなし
|
||
|
||
### 6.3 FFI境界の設計
|
||
|
||
#### 課題
|
||
- C ABI経由のオーバーヘッド
|
||
- 型変換の複雑性
|
||
- エラーハンドリングの困難さ
|
||
|
||
#### 対策
|
||
1. **最小限のFFI境界** (7関数 → 20関数程度)
|
||
2. **Box型の統一ABI** (Phase 12で完成済み)
|
||
3. **エラーハンドリングの標準化**
|
||
|
||
#### リスク評価
|
||
- **Low**: Phase 12でTypeBox統合ABI完成済み
|
||
|
||
### 6.4 デバッグ容易性
|
||
|
||
#### 課題
|
||
- Rust VMのトレース機能の喪失
|
||
- スタックトレースの劣化
|
||
- エラーメッセージの質の低下
|
||
|
||
#### 対策
|
||
1. **トレース機能の完全実装**
|
||
- HAKO_VM_TRACE相当の機能
|
||
- ステッパ機能
|
||
- レジスタダンプ
|
||
|
||
2. **エラーメッセージの改善**
|
||
- Fail-Fast文化の維持
|
||
- 診断メッセージの一元化
|
||
|
||
#### リスク評価
|
||
- **Low**: Rust VMのトレース機能を参考に実装可能
|
||
|
||
---
|
||
|
||
## 📊 7. 完全脱Rust後の構成
|
||
|
||
### 最終的なRust依存(Option A)
|
||
```
|
||
Rust依存 (約10,400行)
|
||
├── C ABI層 (~500行) - プラグインシステムに必須
|
||
├── GC実装 (~200行) - パフォーマンス重視
|
||
├── LLVM Rust wrapper (~363行) - LLVM mode実行ラッパー
|
||
├── WASM Backend (~3,000行) - WASM生成
|
||
├── Plugin Loader (~3,000行) - 動的ロード
|
||
└── その他Runtime (~3,337行) - スケジューラ等
|
||
|
||
Python llvmlite実装 (211,887行) - 既に脱Rust済み、対象外
|
||
└── src/llvm_py/ - LLVM IR生成(外部ライブラリ主体)
|
||
|
||
完全削除 (約89,000行 = 89.5%)
|
||
├── Rust VM (5,123行) → Hakorune VM
|
||
├── Parser/Tokenizer (7,637行) → セルフホストコンパイラ
|
||
├── Boxes実装 (12,752行) → プラグイン化
|
||
└── その他 (63,000行) → Hakorune実装
|
||
```
|
||
|
||
### 新しいHakorune実装
|
||
```
|
||
Hakorune実装 (約30,000行)
|
||
├── Hakorune VM (5,000行) - 16命令完全実装
|
||
├── セルフホストコンパイラ (10,000行) - Parser/MIR Builder
|
||
├── プラグイン (10,000行) - すべてのBox実装
|
||
└── Runtime (5,000行) - 型/モジュール/GC API
|
||
```
|
||
|
||
### 最終的な構成比(Option A)
|
||
```
|
||
総行数: 約40,400行 (現在: 99,406行)
|
||
├── Rust: 10,400行 (26%)
|
||
└── Hakorune: 30,000行 (74%)
|
||
|
||
削減率: 59.4% (99,406行 → 40,400行)
|
||
|
||
注: Python llvmlite実装(211,887行)は除外
|
||
- 外部ライブラリ主体
|
||
- 既に脱Rust済み
|
||
- Phase 15.75の対象外
|
||
```
|
||
|
||
### ⭐ 最終的な構成比(Option A++ 究極版)
|
||
```
|
||
総行数: 約33,500行 (現在: 99,406行)
|
||
├── Rust: 3,500行 (10.4%) ← プラグインシステムのみ
|
||
└── Hakorune: 30,000行 (89.6%)
|
||
|
||
削減率: 66.3% (99,406行 → 33,500行)
|
||
Rust削減率: 96.5% (99,406行 → 3,500行) 🚀
|
||
|
||
Rust 3,500行の内訳:
|
||
├── C ABI層 (~500行) - プラグインFFI境界
|
||
└── Plugin Loader (~3,000行) - dlopen/dlsym wrapper
|
||
|
||
完全削除された Rust 依存(+6,900行):
|
||
├── GC実装 (~200行) → malloc/free (libc)
|
||
├── LLVM wrapper (~363行) → Python llvmlite直接呼び出し
|
||
└── Runtime (~3,337行) → pthread/pipe/clock_gettime (OS API)
|
||
|
||
OS依存のみ:
|
||
├── libc (malloc/free/memcpy)
|
||
├── pthread (スレッド管理)
|
||
├── time (clock_gettime)
|
||
└── dlopen/dlsym (動的ロード)
|
||
```
|
||
|
||
---
|
||
|
||
## 🎓 8. 成功要因と教訓
|
||
|
||
### 成功要因
|
||
1. **Hakorune VMが既に93%完成している**
|
||
- MirCall実装のみで100%完成
|
||
- 予想外の幸運
|
||
|
||
2. **セルフホストコンパイラがM2/M3達成済み**
|
||
- 63日で完成(業界標準の10-50倍速)
|
||
- Parser/Tokenizerの置き換えが容易
|
||
|
||
3. **Phase 15.6で「Everything is Plugin」計画が進行中**
|
||
- Box実装のプラグイン化が既に計画されている
|
||
- 重複作業なし
|
||
|
||
4. **Box-First設計の威力**
|
||
- 新機能追加が予想の9倍速
|
||
- 段階的実装が容易
|
||
|
||
### 教訓
|
||
1. **段階的アプローチが重要**
|
||
- 一度にすべて置き換えるのではなく、Phase 1から順次実装
|
||
- 各Phaseで509テストPASS維持
|
||
|
||
2. **パフォーマンスはPhase 2で解決**
|
||
- Phase 1: 機能完成優先
|
||
- Phase 2: AOT化でパフォーマンス最適化
|
||
|
||
3. **Fail-Fast文化の維持**
|
||
- エラーは隠さず即座に失敗
|
||
- フォールバックより明示的エラー
|
||
|
||
---
|
||
|
||
## 🚦 9. Go/No-Go判断基準
|
||
|
||
### Phase 1 (Hakorune VM完成) の受け入れ条件
|
||
✅ **Go条件** (すべて満たす必要あり):
|
||
1. ✅ MirCall実装完了(16命令100%実装)
|
||
2. ✅ 509テストすべてPASS
|
||
3. ✅ VM/LLVMパリティ維持
|
||
4. ✅ トレース機能動作
|
||
5. ✅ パフォーマンス劣化が50%以内
|
||
|
||
❌ **No-Go条件** (1つでも該当したら中止):
|
||
1. ❌ テスト失敗率が5%以上
|
||
2. ❌ パフォーマンス劣化が70%以上(Phase 2で解決不可能と判断)
|
||
3. ❌ メモリリークが発生
|
||
4. ❌ クリティカルなバグが3個以上
|
||
|
||
### Phase 2以降の判断
|
||
- Phase 1の結果を見て判断
|
||
- パフォーマンス劣化が大きい場合、Phase 2 (AOT化) を優先
|
||
|
||
### Phase切替時の Go/No-Go判断
|
||
|
||
```
|
||
Phase X完了時:
|
||
✅ Go条件(すべて満たす):
|
||
1. スモークテスト: 509/509 PASS(理想)または 170/185 PASS維持
|
||
2. パフォーマンス劣化が許容範囲内
|
||
3. ドキュメント完備
|
||
4. 次Phaseの準備完了
|
||
|
||
❌ No-Go条件(1つでも該当したら中止・再評価):
|
||
1. テスト失敗率が5%以上
|
||
2. パフォーマンス劣化が70%以上
|
||
3. メモリリークが発生
|
||
4. クリティカルなバグが3個以上
|
||
```
|
||
|
||
---
|
||
|
||
## 📅 10. タイムライン(全体)
|
||
|
||
### 全Phase合計見積もり
|
||
```
|
||
Phase 1: Hakorune VM完成 2-3週間 (P0: 最優先)
|
||
Phase 2: Parser/Tokenizer 1-2週間 (P1: 高)
|
||
Phase 3: Boxes プラグイン化 4-6週間 (P1: 高)
|
||
Phase 4: Runtime置き換え 6-8週間 (P2: 中)
|
||
Phase 5: AOT化 4-6週間 (P2: 中)
|
||
|
||
合計: 17-25週間 (4-6ヶ月)
|
||
```
|
||
|
||
### 推奨スケジュール(Phase 1-3優先)
|
||
```
|
||
Week 1-3: Phase 1 (Hakorune VM完成) ⭐最優先
|
||
Week 4-5: Phase 2 (Parser/Tokenizer)
|
||
Week 6-11: Phase 3 (Boxes プラグイン化)
|
||
Week 12-15: Phase 5 (AOT化) ← Phase 4より優先
|
||
Week 16-23: Phase 4 (Runtime置き換え)
|
||
|
||
合計: 約6ヶ月
|
||
```
|
||
|
||
### 週次進捗グラフ(予定)
|
||
|
||
```
|
||
Week 0 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 99,406行
|
||
Week 2 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 99,406行
|
||
Week 5 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 94,283行(-5,123)
|
||
Week 7 ━━━━━━━━━━━━━━━━━━━━━━━ 86,646行(-7,637)
|
||
Week 13 ━━━━━━━━━━━━━ 73,894行(-12,752)
|
||
Week 21 ━━━━━ 22,343行(-9,311)
|
||
Week 27 ━━━━━ 10,400行(最適化)← Option A達成!
|
||
```
|
||
|
||
---
|
||
|
||
## 📊 11. 進捗トラッキング(全体)
|
||
|
||
### Phase完了状況(更新: 2025-10-14)
|
||
|
||
| Phase | 期間 | 状態 | 完了率 | 削減行数 |
|
||
|-------|------|------|--------|---------|
|
||
| **Phase 0** | Week 0-2 | 🟡 進行中 | 50% | 0行 |
|
||
| **Phase 1** | Week 3-5 | ⚪ 未着手 | 0% | 5,123行(予定) |
|
||
| **Phase 2** | Week 6-7 | ⚪ 未着手 | 0% | 7,637行(予定) |
|
||
| **Phase 3** | Week 8-13 | ⚪ 未着手 | 0% | 12,752行(予定) |
|
||
| **Phase 4** | Week 14-21 | ⚪ 未着手 | 0% | 9,311行(予定) |
|
||
| **Phase 5** | Week 22-27 | ⚪ 未着手 | 0% | 0行(最適化) |
|
||
| **合計** | 27週間 | 🟡 2% | 2% | 89,006行(目標) |
|
||
|
||
### マイルストーン一覧
|
||
|
||
| マイルストーン | Week | 内容 | 完了条件 |
|
||
|--------------|------|------|---------|
|
||
| **M0: P1完了** | Week 2 | 基盤整備完了 | P1スコープ全完了 |
|
||
| **M1: VM完成** | Week 5 | 16命令100%実装 | 509テストPASS |
|
||
| **M2: Parser完成** | Week 7 | Selfhost化完了 | Rust Parser削除 |
|
||
| **M3: Plugin完成** | Week 13 | Boxes移行完了 | src/boxes/削除 |
|
||
| **M4: Runtime完成** | Week 21 | Runtime置き換え | 9,311行削減 |
|
||
| **M5: AOT完成** | Week 27 | パフォーマンス最適化 | 100-120%達成 |
|
||
| **🎊 Option A達成** | Week 27 | 89.5%削減 | 10,400行到達 |
|
||
|
||
### 🚨 リスク管理(週次チェックポイント)
|
||
|
||
#### 毎週金曜のリスクチェックリスト
|
||
|
||
```
|
||
□ スモークテスト: 170/185 PASS以上維持?
|
||
□ パフォーマンス: 前週比で劣化なし?
|
||
□ メモリリーク: Valgrindでチェック済み?
|
||
□ ドキュメント: 今週の実装をドキュメント化済み?
|
||
□ 次週準備: 来週のタスクが明確?
|
||
```
|
||
|
||
### Stage‑3(Boxes剥がし)— 完了条件サマリー(2025‑10‑16)
|
||
|
||
- 参照ゼロ(外縁): `crate::boxes::*` が `src/boxes/**` と `#[cfg(feature="legacy-boxes")]` 配下以外に存在しないこと(helper: `tools/dev/list_boxes_refs.sh --by-dir`)
|
||
- ビルド緑:
|
||
- Legacy(既定ON): `cargo build --release`
|
||
- Plugin‑only(検証線): `cargo build --release --no-default-features -F cli,plugins,host-anchors`
|
||
- スモーク: quick と plugins(build‑only) PASS
|
||
- 実行経路の分離が成立: Router を `builtin.rs/plugin.rs` に二分、extern_adapter を `extern_core.rs/extern_future_legacy.rs` に分割済み
|
||
- ドキュメント/CI: CURRENT_TASK と guides を更新、plugin‑only build(build‑only)の最小ジョブ雛形を guides に掲載済み
|
||
|
||
現状: 外縁の直参照は cfg 封じ込めを確認済み。plugins プロファイルの build‑only スモークはタイムアウトヘッダ付きで安定 PASS。残りは by‑dir の再確認と tests の先頭 cfg 統一を進める。
|
||
|
||
---
|
||
|
||
## 🔄 TODO.md 更新フロー(実践的手順)
|
||
|
||
### 毎週月曜 9:00 の作業
|
||
|
||
```bash
|
||
# Step 1: 今週の状況確認
|
||
cat "docs/private/roadmap/phases/phase-15.75/TODO.md"
|
||
|
||
# Step 2: 先週完了分を [DONE] マーク
|
||
vim "docs/private/roadmap/phases/phase-15.75/TODO.md"
|
||
# - 完了タスクに [DONE] 追加
|
||
# - 未完了タスクは来週に繰越
|
||
|
||
# Step 3: このファイル(ROADMAP.md)から次週のタスクをコピー
|
||
# 例: Week 3開始なら、Week 3-4のタスクを TODO.md に追加
|
||
|
||
# Step 4: スモークテスト実行
|
||
bash tools/smokes/v2/run.sh --profile quick-selfhost
|
||
|
||
# Step 5: Git commit
|
||
git add "docs/private/roadmap/phases/phase-15.75/TODO.md"
|
||
git commit -m "docs: update TODO.md for Week X-Y"
|
||
```
|
||
|
||
### 毎週金曜 17:00 の作業
|
||
|
||
```bash
|
||
# Step 1: 今週の完了状況を TODO.md に記録
|
||
vim "docs/private/roadmap/phases/phase-15.75/TODO.md"
|
||
# - Status Notes セクションを更新
|
||
# - 完了数/残存数を記録
|
||
|
||
# Step 2: スモークテスト最終確認
|
||
bash tools/smokes/v2/run.sh --profile quick-selfhost
|
||
|
||
# Step 3: 週報作成(オプション)
|
||
echo "Week X完了: タスク完了率 80%, スモーク 170/185 PASS" >> week_report.md
|
||
|
||
# Step 4: Git commit
|
||
git commit -m "docs: Week X completion summary"
|
||
```
|
||
|
||
---
|
||
|
||
## 🎯 12. 最優先アクション(今すぐ実行)
|
||
|
||
### Action 1: Phase 1開始 - Hakorune VM MirCall実装
|
||
**期間**: 1週間
|
||
**担当**: Claude + ChatGPT
|
||
|
||
**実装計画**:
|
||
- Day 1-2: Callee型の設計と実装
|
||
- Day 3-4: MirCallハンドラー実装
|
||
- Day 5: テストと検証
|
||
- Day 6-7: ドキュメントとコミット
|
||
|
||
**ドキュメント作成場所**:
|
||
```
|
||
docs/private/roadmap/phases/phase-15.75/
|
||
├── INDEX.md (Phase 15.75エントリーポイント)
|
||
├── ROADMAP.md (この文書)
|
||
├── TODO.md (短期タスクリスト)
|
||
├── QUICKSTART.md (3分で全部わかる)
|
||
└── VELOCITY_ANALYSIS.md (実績分析)
|
||
```
|
||
|
||
---
|
||
|
||
## 📚 関連ドキュメント
|
||
|
||
- **[INDEX.md](./INDEX.md)** - Phase 15.75エントリーポイント
|
||
- **[TODO.md](./TODO.md)** - 現在のTODO(1-2週間先)
|
||
- **[QUICKSTART.md](./QUICKSTART.md)** - 3分で全部わかる
|
||
- **[VELOCITY_ANALYSIS.md](./VELOCITY_ANALYSIS.md)** - 実績ベース見積もり
|
||
- **現在のタスク**: [CURRENT_TASK.md](../../../../../CURRENT_TASK.md)
|
||
- **Phase 15.6計画**: [Phase 15.6 README](../phase-15.6/README.md)
|
||
- **MIR命令セット**: [INSTRUCTION_SET.md](../../../../reference/mir/INSTRUCTION_SET.md)
|
||
- **開発マスタープラン**: [00_MASTER_ROADMAP.md](../00_MASTER_ROADMAP.md)
|
||
|
||
---
|
||
|
||
## ✅ 結論
|
||
|
||
### 実現可能性: **高**
|
||
- Hakorune VMが既に93%完成
|
||
- セルフホストコンパイラがM2/M3達成済み
|
||
- Phase 15.6で「Everything is Plugin」計画進行中
|
||
|
||
### 推奨戦略: **Option A → Option C → Option A++** (段階的実装)
|
||
- **Option A**: Rust VM → Hakorune VM完全移行(89.5%削減)
|
||
- **Option C**: Hakorune VM AOT化でパフォーマンス最適化
|
||
- **Option A++**: OS API直接利用で究極の脱Rust(96.5%削減) ⭐長期目標
|
||
|
||
### 最優先タスク: **Phase 1 - Hakorune VM MirCall実装**
|
||
- 期間: 1週間
|
||
- 難易度: Medium
|
||
- 効果: Rust VMからの完全独立
|
||
|
||
### タイムライン: **4-6ヶ月**
|
||
- Phase 1-3: 3ヶ月(コア機能)
|
||
- Phase 4-5: 3ヶ月(最適化・Runtime)
|
||
|
||
### 期待される効果
|
||
**Option A (短期目標)**:
|
||
- ✅ Rust依存を89.5%削減(99,406行 → 10,400行)
|
||
- ✅ セルフホスティングの完全実現
|
||
- ✅ プラグインシステムの完全確立
|
||
- ✅ Python llvmlite実装(211,887行)は既に脱Rust済み
|
||
|
||
**Option A++ (長期目標)**:
|
||
- ✅ Rust依存を**96.5%削減**(99,406行 → 3,500行) 🚀
|
||
- ✅ OS API直接利用による高速化(GCオーバーヘッドなし)
|
||
- ✅ メモリ使用量の削減(参照カウント効率化)
|
||
- ✅ プラグインシステム以外は完全Hakorune化
|
||
- ✅ パフォーマンス維持(LLVM AOT化で100-120%)
|
||
|
||
**今すぐPhase 1を開始することを強く推奨します。**
|
||
|
||
---
|
||
|
||
**最終更新**: 2025-10-14
|
||
**作成者**: Claude (comprehensive analysis & task planning based on 714 Rust files, 99,406 lines)
|