12 KiB
12 KiB
🎯 Hakorune アーキテクチャ戦略
作成日: 2025-10-02 関連: 言語進化ロードマップ
核心の問い: セルフホスティングが主流になるなら、Rust実装はどこまで作るべきか?
📖 エグゼクティブサマリー
結論: 戦略A(Rust最小化)を採用
「Rustは実行エンジン、セルフホストは言語進化」
MIR中間言語だからこそできる、理想的な責任分離。
理由:
- MIR中間言語の本質 - パーサーは交換可能コンポーネント
- セルフホストの圧倒的コンパクトさ - Rust実装の10分の1
- 開発効率最大化 - 重複実装の悲劇を回避
- 言語進化の加速 - セルフホストで新機能を素早く試せる
タイムライン:
- 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パーサー機能凍結宣言
凍結内容:
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: セルフホストパーサー主流化
デフォルト切替:
# デフォルト: セルフホストパーサー
$ hakorune program.hkr
→ apps/selfhost-compiler/ 使用
# フォールバック: Rustパーサー
$ hakorune --parser rust program.hkr
→ src/parser/ 使用
互換性保証:
- Phase 17凍結機能セットでは完全互換
- セルフホストパーサーバグ時はRustパーサーにフォールバック
Phase 19+: セルフホスト一本化
新機能開発方針:
新機能開発:
✅ テストフレームワーク → セルフホストのみ実装
✅ ジェネリクス → セルフホストのみ実装
✅ チャネル → セルフホストのみ実装
✅ 型システム強化 → セルフホストのみ実装
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)
// Phase 17で機能凍結・保守モードへ
src/parser/ // パーサー実装(6,699行)
src/runner/pipeline.rs // MIR生成パイプライン
// 理由: セルフホストに譲る
// 方針: バグフィックス・セキュリティパッチのみ
削減・削除候補
// 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最小化)採用を推奨
理由の再確認:
- ✅ MIR中間言語の本質に忠実
- ✅ 開発効率最大化(重複回避)
- ✅ セルフホストの圧倒的コンパクトさ活用
- ✅ 言語進化の加速
具体的アクション
Phase 15(現在):
- セルフホストパーサー実装中
- Pipeline v2設計・実装
- テスト充実化
Phase 17(次の大目標):
- Rustパーサー機能凍結宣言
docs/reference/rust-parser-freeze.md作成- セルフホストパーサー完全Parity確認
- フォールバック機構実装
Phase 18(主流化):
- セルフホストがデフォルトパーサーに昇格
--parser rustフォールバックオプション実装- ドキュメント・チュートリアル更新
Phase 19+(一本化):
- 新機能はセルフホストのみ実装
- 言語進化ロードマップに沿った開発
- Rust層は保守モード
名言化(再掲)
「Rustは実行エンジン、セルフホストは言語進化」
MIR中間言語だからこそできる、理想的な責任分離。
これがHakoruneアーキテクチャの真髄。
📚 関連ドキュメント
- 言語進化ロードマップ - Phase 16-30の言語機能進化計画
- 00_MASTER_ROADMAP.md - 全体ロードマップ
- Phase 15 - セルフホスティング実装詳細
- Pipeline v2設計 - セルフホストパイプライン設計
作成者: Claude Sonnet 4.5(深層思考モード) 作成日: 2025-10-02 ベース: セルフホスティング進捗分析・アーキテクチャ戦略深層考察