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

454 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 🎯 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
**ベース**: セルフホスティング進捗分析・アーキテクチャ戦略深層考察