# 🎯 Hakorune アーキテクチャ戦略 **作成日**: 2025-10-02 **関連**: [言語進化ロードマップ](./language-evolution.md) **核心の問い**: セルフホスティングが主流になるなら、Rust実装はどこまで作るべきか? --- ## 📖 エグゼクティブサマリー ### **結論: 戦略A(Rust最小化)を採用** > **「Rustは実行エンジン、セルフホストは言語進化」** > > MIR中間言語だからこそできる、理想的な責任分離。 **理由**: 1. **MIR中間言語の本質** - パーサーは交換可能コンポーネント 2. **セルフホストの圧倒的コンパクトさ** - Rust実装の10分の1 3. **開発効率最大化** - 重複実装の悲劇を回避 4. **言語進化の加速** - セルフホストで新機能を素早く試せる **タイムライン**: - Phase 17: Rustパーサー機能凍結宣言 - Phase 18: セルフホストがデフォルトパーサーに昇格 - Phase 19+: 新機能はすべてセルフホスト実装 --- ## 📊 現状分析 ### **実装規模比較** ``` Rustコンパイラ実装: - src/parser/ 6,699行 (パーサー) - src/runner/ 10,672行 (パイプライン・MIR生成) - src/mir/ 17,730行 (MIR定義・最適化) ---------------------------------------- 合計: 35,101行 セルフホストコンパイラ: - parser_box 921行 (パーサー) - pipeline_v2 1,580行 (パイプライン) - その他 1,270行 ---------------------------------------- 合計: 3,771行 圧縮率: 10.7% (約10分の1) ``` ### **MIR中間言語の威力** ``` ┌─────────────────┐ │ 任意のパーサー │ ← セルフホスト主流 (3,771行) │ (Rust/Selfhost)│ ← Rustフォールバック (6,699行) └────────┬────────┘ │ ▼ ┌─────────┐ │ MIR JSON │ ← 中間言語(交換可能インターフェース) └────┬────┘ │ ┌────┴────┐ ▼ ▼ ┌──────┐ ┌──────┐ │ VM │ │ LLVM │ ← 実行エンジン(Rust実装) └──────┘ └──────┘ ``` **重要な洞察**: - パーサーは**交換可能** - 実行エンジン(VM/LLVM)は**共通** - **MIRがあれば何とでもなる!** --- ## 🎯 3つの戦略案 ### **戦略A: Rust最小化** ✅ 推奨 **方針**: Rustは「実行エンジン」に特化、パーサー・コンパイラはセルフホスト主流 #### **役割分担** ``` Rust層の役割(凍結対象): ✅ VM実行エンジン (src/runner/vm/) ✅ LLVM実行エンジン (src/llvm_py/) ✅ プラグインシステム (crates/hakorune_kernel/) ✅ MIR定義 (src/mir/) ⚠️ リファレンスパーサー (src/parser/) - Phase 17で機能凍結 セルフホスト層の役割(成長対象): 🚀 メインパーサー (apps/selfhost-compiler/) 🚀 MIR生成・最適化 🚀 新機能実装 🚀 言語進化 ``` #### **タイムライン** ``` Phase 15-17: セルフホストパーサー完成 ↓ Phase 17: Rustパーサー機能凍結宣言 ↓ Phase 18: セルフホストがメインパーサーに昇格 ↓ Phase 19+: Rustパーサーは「フォールバック」のみ ↓ Phase 21+: 新機能はすべてセルフホスト実装 ``` #### **メリット** - ✅ 重複実装を避ける(開発効率最大化) - ✅ セルフホストに注力できる - ✅ Rust層は安定・高速実行に専念 - ✅ 言語進化がセルフホストで加速 #### **デメリット** - ⚠️ Rustパーサーが古くなる(意図的) - ⚠️ セルフホストパーサーバグ時のフォールバックが限定的 --- ### **戦略B: 完全二重実装** ❌ 非推奨 **方針**: RustとセルフホストでフルParity維持 ``` Rust層: ✅ 完全なパーサー実装(継続更新) ✅ 完全なMIR生成実装(継続更新) ✅ すべての言語機能をサポート セルフホスト層: ✅ 完全なパーサー実装(継続更新) ✅ 完全なMIR生成実装(継続更新) ✅ すべての言語機能をサポート ``` **メリット**: - ✅ どちらも完全に動作 - ✅ 相互検証できる **デメリット**: - ❌ **重複実装の悪夢**(2倍の開発負担) - ❌ 片方だけで十分なのに無駄 - ❌ 新機能を2回実装する必要 - ❌ **MIRの利点を殺している** **結論**: **非推奨**。開発効率が最悪。 --- ### **戦略C: Stable/Nightly分離** △ 中間案 **方針**: Rust=Stable Channel、セルフホスト=Nightly Channel ``` Rust層 (Stable): ✅ 実証済み機能のみ ✅ Phase 15完成機能で凍結 ✅ 安定性・互換性優先 ⏸️ 新機能は追加しない セルフホスト層 (Nightly): 🚀 実験的新機能 🚀 言語進化の最前線 🚀 破壊的変更OK ``` **メリット**: - ✅ 安定版が保証される - ✅ 実験を気軽にできる **デメリット**: - ⚠️ 2つのバージョン管理が必要 - ⚠️ ユーザーが混乱する可能性 - ⚠️ Rustに新機能を移植する手間 --- ## 💡 推奨戦略の詳細: 戦略A(Rust最小化) ### **採用理由(4つの柱)** #### **1. MIR中間言語の本質** - パーサーは交換可能コンポーネント - 実行エンジンが本体 - **フロントエンド/バックエンド完全分離**が設計思想 #### **2. セルフホストの圧倒的コンパクトさ** ``` Rust実装: 35,101行 (パーサー+MIR生成) セルフホスト: 3,771行 (同機能) 圧縮率: 10.7% (約10分の1) ``` **10分の1の実装量で同等機能**を実現できる! #### **3. 開発効率の最大化** - 1つの実装に集中できる - 重複コードの悲劇を回避 - バグフィックスも1箇所のみ #### **4. 言語進化の加速** - セルフホストで新機能を素早く試せる - 実験的機能の実装が容易 - Rustで安定実行を保証 --- ## 📅 具体的な移行計画 ### **Phase 17: Rustパーサー機能凍結宣言** **凍結内容**: ```rust src/parser/ の機能凍結(6,699行を固定): ✅ 基本構文 - box/flow/static - loop/if/match - return/break/continue ✅ 高度な機能 - プロパティシステム(stored/computed/once/birth_once) - 例外処理(try/catch/cleanup) - 非同期(nowait/await) - using/namespace基本 ✅ 演算子・式 - 算術/比較/論理演算子 - Lambda式 - ?演算子(Result伝播) 「これで十分」宣言 🎯 ``` **Phase 17でのドキュメント整備**: - `docs/reference/rust-parser-freeze.md` を作成 - 凍結機能一覧を明記 - 新機能はセルフホストで実装する旨を宣言 --- ### **Phase 18: セルフホストパーサー主流化** **デフォルト切替**: ```bash # デフォルト: セルフホストパーサー $ hakorune program.hkr → apps/selfhost-compiler/ 使用 # フォールバック: Rustパーサー $ hakorune --parser rust program.hkr → src/parser/ 使用 ``` **互換性保証**: - Phase 17凍結機能セットでは完全互換 - セルフホストパーサーバグ時はRustパーサーにフォールバック --- ### **Phase 19+: セルフホスト一本化** **新機能開発方針**: ``` 新機能開発: ✅ テストフレームワーク → セルフホストのみ実装 ✅ ジェネリクス → セルフホストのみ実装 ✅ チャネル → セルフホストのみ実装 ✅ 型システム強化 → セルフホストのみ実装 Rust実装: ✅ バグフィックスのみ ✅ セキュリティパッチのみ ⏸️ 新機能追加なし ``` **理由**: 重複実装を避け、セルフホストに注力 --- ## 🎯 Rust層の最終形態 ### **保持すべき部分(コア実行基盤)** ```rust // 1. 実行エンジン(VM) src/runner/vm/ // VM実装(約712行) src/runner/dispatch.rs // ディスパッチャー src/runner/vm_pipeline.rs // VMパイプライン // 2. LLVM実行エンジン src/llvm_py/ // Python llvmlite実装 src/runner/modes/llvm.rs // LLVMモード // 3. プラグインシステム crates/hakorune_kernel/ // Kernel実装(約10,000行) // 4. MIR定義 src/mir/mod.rs // MIR型定義 src/mir/types.rs // MIR基本型 // 5. CLI・エントリポイント src/main.rs // CLIエントリ src/cli.rs // CLI引数処理 推定合計: 約25,000行(Phase 30時点) ``` --- ### **凍結すべき部分(Phase 17)** ```rust // Phase 17で機能凍結・保守モードへ src/parser/ // パーサー実装(6,699行) src/runner/pipeline.rs // MIR生成パイプライン // 理由: セルフホストに譲る // 方針: バグフィックス・セキュリティパッチのみ ``` --- ### **削減・削除候補** ```rust // Phase 20+で削除検討 src/runner/modes/common_util/legacy/ // レガシーコード src/runner/entry_resolve.rs // 既に削除済み // 削減により: 48,344行 → 30,000行(Phase 20) // → 25,000行(Phase 30、安定) ``` --- ## 📊 コード行数の未来予測 ### **Phase 17時点(現在)** ``` Rust実装: 48,344行 - parser: 6,699行 - runner: 10,672行 - mir: 17,730行 - boxes: 13,243行 セルフホスト: 3,771行 - parser: 921行 - pipeline: 1,580行 - その他: 1,270行 ``` --- ### **Phase 20予測(凍結・削減後)** ``` Rust実装: 30,000行 (-18,344行) - VM/LLVM実行エンジン: 15,000行 - プラグイン: 10,000行 - CLI/ユーティリティ: 5,000行 セルフホスト: 10,000行 (+6,229行) - パーサー: 2,000行 - MIR生成: 3,000行 - 最適化: 2,000行 - テスト: 3,000行 ``` --- ### **Phase 30予測(Parity到達)** ``` Rust実装: 25,000行 (安定・最小化) - 実行エンジン: 15,000行 - プラグイン: 10,000行 セルフホスト: 25,000行 (Parity到達) - パーサー: 5,000行 - MIR生成: 8,000行 - 最適化: 5,000行 - テスト: 7,000行 合計: 50,000行(現在の48,344行から微増) ``` **重要**: セルフホストがParityに到達しても、**合計行数はほぼ変わらない**! → 重複実装を避けることで、無駄な肥大化を防止 --- ## 🎊 結論と次のアクション ### **戦略A(Rust最小化)採用を推奨** **理由の再確認**: 1. ✅ MIR中間言語の本質に忠実 2. ✅ 開発効率最大化(重複回避) 3. ✅ セルフホストの圧倒的コンパクトさ活用 4. ✅ 言語進化の加速 --- ### **具体的アクション** **Phase 15(現在)**: - [x] セルフホストパーサー実装中 - [x] Pipeline v2設計・実装 - [ ] テスト充実化 **Phase 17(次の大目標)**: - [ ] **Rustパーサー機能凍結宣言** - [ ] `docs/reference/rust-parser-freeze.md` 作成 - [ ] セルフホストパーサー完全Parity確認 - [ ] フォールバック機構実装 **Phase 18(主流化)**: - [ ] セルフホストがデフォルトパーサーに昇格 - [ ] `--parser rust` フォールバックオプション実装 - [ ] ドキュメント・チュートリアル更新 **Phase 19+(一本化)**: - [ ] 新機能はセルフホストのみ実装 - [ ] [言語進化ロードマップ](./language-evolution.md)に沿った開発 - [ ] Rust層は保守モード --- ### **名言化(再掲)** > **「Rustは実行エンジン、セルフホストは言語進化」** > > MIR中間言語だからこそできる、理想的な責任分離。 > > これがHakoruneアーキテクチャの真髄。 --- ## 📚 関連ドキュメント - [言語進化ロードマップ](./language-evolution.md) - Phase 16-30の言語機能進化計画 - [00_MASTER_ROADMAP.md](./phases/00_MASTER_ROADMAP.md) - 全体ロードマップ - [Phase 15](./phases/phase-15/) - セルフホスティング実装詳細 - [Pipeline v2設計](../../selfhosting/pipeline_v2.md) - セルフホストパイプライン設計 --- **作成者**: Claude Sonnet 4.5(深層思考モード) **作成日**: 2025-10-02 **ベース**: セルフホスティング進捗分析・アーキテクチャ戦略深層考察