Files
hakorune/docs/private/roadmap/phases/phase-15.75/ROADMAP.md

41 KiB
Raw Blame History

Phase 15.75: 完全脱Rust大作戦 - 統合ロードマップ

📚 ← ../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化戦略
  4. 段階的実装計画
  5. Phase別詳細タスクリスト
  6. 優先順位付けと推奨アクション
  7. 技術的課題とリスク評価
  8. 完全脱Rust後の構成
  9. 成功要因と教訓
  10. Go/No-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 と pluginonly

目的

  • 脱Rustの前段として「境界の明確化」と「混乱の低減」を優先。Rust ラインは温存しつつ、pluginonly を常時検証できる体制にする。

方針(結論)

  • 先に「分離箱化ガード」を済ませてから、薄い単位で脱Rustを進めるBoxFirst/FailFast
  • ただし純関数領域や leaf な経路は、分離と同時に置き換えてもよい(安全な並走)。

ビルドライン公式2本

  • Legacy既定: cargo build --releaselegacy-boxes 有効)
  • Pluginonly検証: cargo build --release --no-default-features -F cli,plugins,host-anchors

CI最小ガード

  • Job A: Legacy build + quick スモーク
  • Job B: Pluginonly 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: 責務/入出力/ガード/撤退計画を明記

現状の制約pluginonly

  • env.future/VMValue::Future は legacy 限定pluginonly は明示エラー)
  • ルーターの builtin 腕FileBox/CallableBox/ArrayBox/MapBoxは legacy 限定。pluginonly は plugin 経路のみ。

推奨ワークフロー

  1. 参照ガード → pluginonly ビルドで赤を潰す
  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. その他Runtime2週間

    • 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 1MirCall設計開始
   - Callee型設計ドキュメント作成
   - MirCall実装計画レビューClaude + ChatGPT

Week 2: Phase 1着手準備完了

📋 TODO:
1. Parser/Tokenizer 小片移行完了
   - スモーク: JSON/文字列/mini-parserquick
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実装基礎

📋 TODODay 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実装拡張

📋 TODODay 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完了 + トレース強化

📋 TODODay 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: セルフホストコンパイラ完成

📋 TODODay 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パーサー置き換え完了

📋 TODODay 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個

📋 TODOWeek 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
- テスト移植
- ドキュメント作成
- スモークテスト確認

📋 TODOWeek 9: Day 43-49:
- 7個のプラグイン統合テスト
- パフォーマンス測定
- src/boxes/の対応ファイル削除準備

完了条件:

  • 7個のプラグイン完成
  • スモークテスト: 509/509 PASS維持
  • パフォーマンス劣化なし

Week 10-11: IO/ネットワーク系プラグイン化

📋 TODOWeek 10: Day 50-56:
1. FileBox → plugins/file/
2. BufferBox → plugins/buffer/
3. HTTPBox → plugins/http/
4. SocketBox → plugins/socket/
5. ProcessBox → plugins/process/

📋 TODOWeek 11: Day 57-63:
- IO系統合テスト
- ネットワーク系統合テスト
- セキュリティ検証

完了条件:

  • IO/ネットワーク系5個完成
  • セキュリティテストPASS

Week 12-13: 残りBox移行 + src/boxes/削除

📋 TODOWeek 12: Day 64-70:
1. ArrayBox → plugins/array/
2. MapBox → plugins/map/
3. その他残り全Box → plugins/

📋 TODOWeek 13: Day 71-77:
- 全プラグイン統合テスト509個
- src/boxes/ 完全削除
- ドキュメント更新
- Phase 3完了宣言

完了条件:

  • 全Box12,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: 型システム置き換え

📋 TODOWeek 14: Day 78-84:
1. TypeBox → プラグイン化
2. 型解決 → Hakorune実装
3. SSOT (Single Source of Truth) 実現

📋 TODOWeek 15: Day 85-91:
- 型システム統合テスト
- パフォーマンス測定
- ドキュメント更新

完了条件:

  • 型システム完全置き換え
  • SSOT実現

Week 16-17: モジュールシステム置き換え

📋 TODOWeek 16: Day 92-98:
1. ModuleRegistry → Hakorune実装
2. Using解決 → セルフホストコンパイラに統合

📋 TODOWeek 17: Day 99-105:
- モジュールシステム統合テスト
- 循環依存検出テスト

完了条件:

  • モジュールシステム完全置き換え

Week 18-19: GC最小化

📋 TODOWeek 18: Day 106-112:
1. GCアルゴリズム → Hakorune実装
2. Rust側 → 最小限のC ABIのみ提供335行 → 200行

📋 TODOWeek 19: Day 113-119:
- GC統合テスト
- メモリリークテストValgrind
- パフォーマンス測定

完了条件:

  • GC (335行 → 200行) 最小化
  • メモリリークなし

Week 20-21: その他Runtime置き換え

📋 TODOWeek 20: Day 120-126:
1. Scheduler → Hakorune実装
2. MessageBus → Hakorune実装

📋 TODOWeek 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変換

📋 TODOWeek 22: Day 134-140:
1. Hakorune VM全体をLLVMでコンパイル
2. AOT化ツールチェーンの構築

📋 TODOWeek 23: Day 141-147:
- 最適化パスの適用
- デバッグ情報の保持

📋 TODOWeek 24: Day 148-154:
- AOT化されたバイナリのテスト
- パフォーマンス測定

完了条件:

  • AOT化ツールチェーン完成
  • パフォーマンス: Rust VMの80%以上

Week 25-26: パフォーマンス最適化

📋 TODOWeek 25: Day 155-161:
1. ベンチマークスイート実行
2. ホットパスの最適化
3. ボトルネック解消

📋 TODOWeek 26: Day 162-168:
- 最終パフォーマンス測定
- 目標: Rust VMと同等以上100-120%

完了条件:

  • パフォーマンス: Rust VMの100%以上
  • ベンチマーク全pass

Week 27: 配布パッケージング + Phase 5完了

📋 TODODay 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でチェック済み
□ ドキュメント: 今週の実装をドキュメント化済み?
□ 次週準備: 来週のタスクが明確?

Stage3Boxes剥がし— 完了条件サマリー20251016

  • 参照ゼロ(外縁): crate::boxes::*src/boxes/**#[cfg(feature="legacy-boxes")] 配下以外に存在しないことhelper: tools/dev/list_boxes_refs.sh --by-dir
  • ビルド緑:
    • Legacy既定ON: cargo build --release
    • Pluginonly検証線: cargo build --release --no-default-features -F cli,plugins,host-anchors
    • スモーク: quick と pluginsbuildonly PASS
  • 実行経路の分離が成立: Router を builtin.rs/plugin.rs に二分、extern_adapter を extern_core.rs/extern_future_legacy.rs に分割済み
  • ドキュメント/CI: CURRENT_TASK と guides を更新、pluginonly buildbuildonlyの最小ジョブ雛形を guides に掲載済み

現状: 外縁の直参照は cfg 封じ込めを確認済み。plugins プロファイルの buildonly スモークはタイムアウトヘッダ付きで安定 PASS。残りは bydir の再確認と tests の先頭 cfg 統一を進める。


🔄 TODO.md 更新フロー(実践的手順)

毎週月曜 9:00 の作業

# 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 の作業

# 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 (実績分析)

📚 関連ドキュメント


結論

実現可能性:

  • 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直接利用で究極の脱Rust96.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)