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