Files
hakorune/docs/private/roadmap/architecture-strategy.md

454 lines
12 KiB
Markdown
Raw Normal View History

# 🎯 Hakorune アーキテクチャ戦略
**作成日**: 2025-10-02
**関連**: [言語進化ロードマップ](./language-evolution.md)
**核心の問い**: セルフホスティングが主流になるなら、Rust実装はどこまで作るべきか
---
## 📖 エグゼクティブサマリー
### **結論: 戦略ARust最小化を採用**
> **「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に新機能を移植する手間
---
## 💡 推奨戦略の詳細: 戦略ARust最小化
### **採用理由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に到達しても、**合計行数はほぼ変わらない**
→ 重複実装を避けることで、無駄な肥大化を防止
---
## 🎊 結論と次のアクション
### **戦略ARust最小化採用を推奨**
**理由の再確認**:
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
**ベース**: セルフホスティング進捗分析・アーキテクチャ戦略深層考察