640 lines
20 KiB
Markdown
640 lines
20 KiB
Markdown
# Phase 20.5 - Hakorune VM Validation & Adoption
|
||
|
||
**期間**: 2025-12-21 - 2026-01-31 (6週間)
|
||
**状態**: Planning ⚠️ **CRITICAL UPDATE** - VM already exists!
|
||
**前提**: Phase 15.77完了 (凍結EXE確定)
|
||
**重大発見**: Hakorune VM is **100% COMPLETE** (2025-10-14)
|
||
|
||
---
|
||
|
||
## 🎉 Critical Discovery (2025-10-14)
|
||
|
||
**Original Assumption**: Hakorune VM does not exist, needs 36 weeks to build.
|
||
|
||
**Actual Reality**: **Hakorune VM is COMPLETE** in `selfhost/hakorune-vm/`!
|
||
- ✅ 3,413 lines of Hakorune code
|
||
- ✅ 44 files including 22 instruction handlers
|
||
- ✅ 26+ comprehensive tests
|
||
- ✅ All 16 MIR instructions + 6 advanced handlers
|
||
- ✅ @match-based dispatch architecture
|
||
- ✅ Result-based error handling
|
||
- ✅ Implementation period: October 5-13, 2025 (8 days!)
|
||
|
||
**Impact**: Phase 20.5 changes from "implementation" to **"validation & adoption"**.
|
||
|
||
📖 **Full Discovery Report**: [HAKORUNE_VM_DISCOVERY.md](HAKORUNE_VM_DISCOVERY.md)
|
||
|
||
---
|
||
|
||
## 🎯 このフェーズで実現すること(更新版)
|
||
|
||
**"Hakorune VM → 検証 → CLI統合 → デフォルト化"**
|
||
|
||
1. **Hakorune VM検証**: 既存22ハンドラーの動作確認
|
||
2. **Golden Testing**: Rust-VM vs Hako-VM 完全一致保証
|
||
3. **CLI統合**: `--backend vm-hako` 実装
|
||
4. **ドキュメント整備**: アーキテクチャ・移行ガイド
|
||
5. **オプション: HostBridge API**: C-ABI境界(他の理由で必要な場合のみ)
|
||
|
||
**変更点**:
|
||
- ❌ **VM実装** → ✅ **VM検証**(既に完成)
|
||
- ❌ **36週間** → ✅ **6週間**
|
||
- ❌ **段階的実装** → ✅ **全機能検証**
|
||
|
||
---
|
||
|
||
## 💡 このフェーズの位置づけ(更新版)
|
||
|
||
```
|
||
Phase 15.77(凍結EXE確定)✅
|
||
├── hako-frozen-v1.exe (724KB MSVC)
|
||
├── NyRT関数呼び出し可能
|
||
└── MIR JSON → .o → EXE 導線確立
|
||
|
||
Hakorune VM実装完了(2025-10-05 → 10-13)✅
|
||
├── 3,413 lines / 44 files
|
||
├── 22 instruction handlers
|
||
├── 26+ comprehensive tests
|
||
└── selfhost/hakorune-vm/
|
||
|
||
Phase 20.5(VM検証・統合)← 今ここ
|
||
├── Week 1-2: VM検証・テスト拡充
|
||
├── Week 3-4: Golden Testing(Rust-VM vs Hako-VM)
|
||
├── Week 5: CLI統合(--backend vm-hako)
|
||
└── Week 6: ドキュメント・Phase 20.6計画
|
||
|
||
Phase 20.6(オプション: HostBridge + Rust最小化)
|
||
├── HostBridge API実装(必要な場合)
|
||
├── Rust VM非推奨化
|
||
└── Hakorune VM デフォルト化
|
||
```
|
||
|
||
**重要**: Phase 20.6以降は「必要に応じて」実施。Hakorune VM単体で動作可能。
|
||
|
||
---
|
||
|
||
## 🔄 Progress Snapshot(2025-10-23)
|
||
|
||
- **Constructor parity**: VM/LLVM 双方で `Callee::Constructor` の birth 引数(0〜3)と未知 Box Fail‑Fast を確認する parity スモークを追加。
|
||
- quick: `tools/smokes/v2/profiles/quick/llvm/parity_constructor_birth_arity_vm_llvm.sh`, `parity_constructor_errors_vm_llvm.sh`
|
||
- integration: `tools/smokes/v2/profiles/integration/parity/parity_constructor_birth_arity_vm_llvm.sh`, `parity_constructor_errors_vm_llvm.sh`
|
||
- **ModuleFunction 静的 me 合成**: `src/tests/mir_module_function_static.rs` で Builder が singleton `me` を自動注入し、Rust VM が 42 を返すことを固定(`static_singleton_me` ヒントの整合性を検証)。
|
||
- **Selfhost pipeline Stage‑1 ガード**: `NYASH_PIPELINE_V2=1` で Stage‑1 の default/vararg/named 混在を Fail‑Fast 化し、`selfhost_pipeline_v2_stage1_invalid_args_fail_vm.sh`(`SMOKES_SELFHOST_ENABLE=1` opt-in)で回帰テストを追加。
|
||
- **Profiles**: quick 299/299 PASS・integration 35/35 PASS を継続監視(macro child 停止 & noise filter 追加済み)。
|
||
|
||
---
|
||
|
||
## 🏆 成功基準(DoD)
|
||
|
||
### 1️⃣ Hakorune VM検証完了
|
||
|
||
```bash
|
||
# 既存テストスイート実行
|
||
cd selfhost/hakorune-vm
|
||
for test in tests/*.hako; do
|
||
NYASH_DISABLE_PLUGINS=1 ../../target/release/hako "$test"
|
||
done
|
||
|
||
# 期待: 26+ tests ALL PASS
|
||
```
|
||
|
||
**チェックリスト**:
|
||
- [ ] 26個の既存テスト すべて PASS
|
||
- [ ] 22個のハンドラー動作確認
|
||
- [ ] エラーハンドリング(Result)動作確認
|
||
- [ ] @match dispatch 動作確認
|
||
|
||
### 2️⃣ Golden Testing完了
|
||
|
||
```bash
|
||
# Golden Test実行(Rust-VM vs Hako-VM)
|
||
bash tools/golden_test_hakorune_vm.sh
|
||
|
||
# 期待: 100% parity
|
||
```
|
||
|
||
**テストケース**:
|
||
- [ ] 算術演算(10ケース)
|
||
- [ ] 制御フロー(10ケース)
|
||
- [ ] コレクション操作(10ケース)
|
||
- [ ] 再帰(5ケース)
|
||
- [ ] クロージャ(5ケース)
|
||
- [ ] 合計40ケース すべて一致
|
||
|
||
### 3️⃣ CLI統合完了
|
||
|
||
```bash
|
||
# Hakorune VM経由で実行可能
|
||
./target/release/hako --backend vm-hako program.hako
|
||
|
||
# 環境変数でもOK
|
||
HAKO_USE_HAKORUNE_VM=1 ./target/release/hako program.hako
|
||
```
|
||
|
||
**チェックリスト**:
|
||
- [ ] `--backend vm-hako` フラグ実装
|
||
- [ ] `HAKO_USE_HAKORUNE_VM=1` 環境変数対応
|
||
- [ ] エラーメッセージ整備
|
||
- [ ] パフォーマンス測定
|
||
|
||
### 4️⃣ ドキュメント整備完了
|
||
|
||
**必須ドキュメント**:
|
||
- [ ] `selfhost/hakorune-vm/README.md` - アーキテクチャ概要
|
||
- [ ] `selfhost/hakorune-vm/DESIGN.md` - 設計パターン
|
||
- [ ] `selfhost/hakorune-vm/TESTING.md` - テスト戦略
|
||
- [ ] `docs/guides/hakorune-vm-migration.md` - 移行ガイド
|
||
- [ ] Phase 20.6計画書(オプション: HostBridge)
|
||
|
||
---
|
||
|
||
## 📊 週次計画(Week 1-6)
|
||
|
||
### Week 1(2025-12-21 - 12-27)VM検証・テスト実行
|
||
|
||
**目標**: 既存実装の動作確認
|
||
|
||
#### タスク
|
||
```bash
|
||
# 1. 既存テスト全実行
|
||
cd selfhost/hakorune-vm
|
||
for test in tests/*.hako; do
|
||
echo "Testing: $test"
|
||
NYASH_DISABLE_PLUGINS=1 ../../target/release/hako "$test" || echo "FAIL"
|
||
done
|
||
|
||
# 2. ハンドラーカバレッジ確認
|
||
ls *_handler.hako | wc -l # 期待: 22
|
||
|
||
# 3. エラーケーステスト
|
||
# - 不正なMIR JSON
|
||
# - 未定義命令
|
||
# - 型エラー
|
||
```
|
||
|
||
**成果物**:
|
||
- [ ] テスト実行レポート(26+ tests)
|
||
- [ ] カバレッジレポート(22 handlers)
|
||
- [ ] バグ修正リスト(あれば)
|
||
|
||
### Week 2(2025-12-28 - 2026-01-03)テスト拡充
|
||
|
||
**目標**: テストカバレッジ拡大
|
||
|
||
#### タスク
|
||
```bash
|
||
# 新規テストケース追加
|
||
selfhost/hakorune-vm/tests/
|
||
├── test_edge_cases/
|
||
│ ├── test_large_numbers.hako
|
||
│ ├── test_deep_recursion.hako
|
||
│ ├── test_long_strings.hako
|
||
│ └── test_complex_control_flow.hako
|
||
└── test_stress/
|
||
├── test_1000_instructions.hako
|
||
└── test_nested_calls_100_deep.hako
|
||
```
|
||
|
||
**成果物**:
|
||
- [ ] 10個の新規テストケース
|
||
- [ ] エッジケース網羅
|
||
- [ ] ストレステスト実施
|
||
|
||
### Week 3-4(2026-01-04 - 01-17)Golden Testing
|
||
|
||
**目標**: Rust-VM vs Hako-VM 完全一致保証
|
||
|
||
#### Golden Testスイート作成
|
||
```bash
|
||
tests/golden/hakorune-vm/
|
||
├── arithmetic/
|
||
│ ├── test_add.hako
|
||
│ ├── test_mul.hako
|
||
│ └── test_div.hako (10 tests)
|
||
├── control_flow/
|
||
│ ├── test_if_else.hako
|
||
│ ├── test_loop.hako
|
||
│ └── test_branch.hako (10 tests)
|
||
├── collections/
|
||
│ ├── test_array_ops.hako
|
||
│ ├── test_map_ops.hako
|
||
│ └── test_string_ops.hako (10 tests)
|
||
├── recursion/
|
||
│ ├── test_factorial.hako
|
||
│ └── test_fibonacci.hako (5 tests)
|
||
└── closures/
|
||
├── test_capture.hako
|
||
└── test_nested.hako (5 tests)
|
||
```
|
||
|
||
#### Golden Test実行スクリプト
|
||
```bash
|
||
# tools/golden_test_hakorune_vm.sh
|
||
#!/bin/bash
|
||
set -e
|
||
|
||
PASS=0
|
||
FAIL=0
|
||
|
||
for test in tests/golden/hakorune-vm/**/*.hako; do
|
||
echo "Testing: $test"
|
||
|
||
# Rust VM実行
|
||
./target/release/hako --backend vm "$test" > /tmp/rust_out.txt 2>&1
|
||
rust_exit=$?
|
||
|
||
# Hakorune VM実行
|
||
./target/release/hako --backend vm-hako "$test" > /tmp/hako_out.txt 2>&1
|
||
hako_exit=$?
|
||
|
||
# 出力比較
|
||
if diff /tmp/rust_out.txt /tmp/hako_out.txt && [ $rust_exit -eq $hako_exit ]; then
|
||
echo " ✅ PASS"
|
||
((PASS++))
|
||
else
|
||
echo " ❌ FAIL"
|
||
echo " Rust output:"
|
||
cat /tmp/rust_out.txt
|
||
echo " Hako output:"
|
||
cat /tmp/hako_out.txt
|
||
((FAIL++))
|
||
fi
|
||
done
|
||
|
||
echo ""
|
||
echo "Golden Test Results:"
|
||
echo " PASS: $PASS"
|
||
echo " FAIL: $FAIL"
|
||
echo " Total: $((PASS + FAIL))"
|
||
|
||
if [ $FAIL -eq 0 ]; then
|
||
echo "✅ All Golden Tests PASSED!"
|
||
exit 0
|
||
else
|
||
echo "❌ Some Golden Tests FAILED"
|
||
exit 1
|
||
fi
|
||
```
|
||
|
||
**成果物**:
|
||
- [ ] 40個のGolden Testケース
|
||
- [ ] Golden Test実行スクリプト
|
||
- [ ] CI統合(GitHub Actions)
|
||
- [ ] パフォーマンス比較レポート
|
||
|
||
### Week 5(2026-01-18 - 01-24)CLI統合
|
||
|
||
**目標**: `--backend vm-hako` 実装
|
||
|
||
#### 実装ファイル
|
||
```rust
|
||
// src/backend/hakorune_vm_runner.rs (NEW)
|
||
use std::path::PathBuf;
|
||
use crate::error::Result;
|
||
|
||
pub fn run_hakorune_vm(mir_json: String) -> Result<i64> {
|
||
// 1. selfhost/hakorune-vm/hakorune_vm_core.hako をロード
|
||
let vm_core_path = PathBuf::from("selfhost/hakorune-vm/hakorune_vm_core.hako");
|
||
|
||
// 2. Rust VMでHakoruneVmCoreBoxを実行
|
||
let vm_instance = load_and_run_box(&vm_core_path)?;
|
||
|
||
// 3. HakoruneVmCoreBox.run(mir_json) を呼び出し
|
||
let result = vm_instance.call_method("run", vec![Box::new(mir_json)])?;
|
||
|
||
// 4. 結果を返す
|
||
Ok(result.as_int()?)
|
||
}
|
||
|
||
// src/cli.rs (MODIFY)
|
||
match backend {
|
||
Backend::Vm => run_rust_vm(mir),
|
||
Backend::VmHako => run_hakorune_vm(mir), // NEW!
|
||
Backend::Llvm => run_llvm(mir),
|
||
Backend::Wasm => run_wasm(mir),
|
||
}
|
||
```
|
||
|
||
**テスト**:
|
||
```bash
|
||
# 基本実行
|
||
./target/release/hako --backend vm-hako apps/tests/hello.hako
|
||
# 期待: Hello World出力
|
||
|
||
# 環境変数版
|
||
HAKO_USE_HAKORUNE_VM=1 ./target/release/hako apps/tests/hello.hako
|
||
|
||
# デバッグモード
|
||
HAKO_VM_TRACE=1 ./target/release/hako --backend vm-hako test.hako
|
||
```
|
||
|
||
**成果物**:
|
||
- [ ] `src/backend/hakorune_vm_runner.rs` 実装
|
||
- [ ] CLI統合完了
|
||
- [ ] 環境変数対応
|
||
- [ ] エラーメッセージ整備
|
||
|
||
### Week 6(2026-01-25 - 01-31)ドキュメント・Phase 20.6計画
|
||
|
||
**目標**: ドキュメント整備、次フェーズ計画
|
||
|
||
#### ドキュメント作成
|
||
```
|
||
selfhost/hakorune-vm/
|
||
├── README.md # アーキテクチャ概要
|
||
├── DESIGN.md # 設計パターン詳解
|
||
├── TESTING.md # テスト戦略
|
||
└── CHANGELOG.md # 実装履歴(Oct 5-13)
|
||
|
||
docs/guides/
|
||
└── hakorune-vm-migration.md # ユーザー移行ガイド
|
||
|
||
docs/private/roadmap/phases/phase-20.5/
|
||
├── HAKORUNE_VM_DISCOVERY.md # 発見レポート
|
||
├── README.md # このファイル(更新済み)
|
||
├── VALIDATION_REPORT.md # 検証レポート
|
||
└── COMPLETION_REPORT.md # 完了報告
|
||
|
||
docs/private/roadmap/phases/phase-20.6/ (オプション)
|
||
└── README.md # HostBridge計画(必要な場合)
|
||
```
|
||
|
||
**成果物**:
|
||
- [ ] 5個のドキュメント完成
|
||
- [ ] Phase 20.5完了報告書
|
||
- [ ] Phase 20.6計画書(オプション)
|
||
- [ ] tomoakiさんへの報告
|
||
|
||
---
|
||
|
||
## 🎯 Hakorune VM アーキテクチャ(既存実装)
|
||
|
||
### ファイル構成
|
||
|
||
```
|
||
selfhost/hakorune-vm/ (3,413 lines, 44 files)
|
||
├── hakorune_vm_core.hako (225 lines) # Entry point
|
||
├── instruction_dispatcher.hako (72 lines) # @match dispatch
|
||
├── blocks_locator.hako # Control flow
|
||
├── error_builder.hako # Error messages
|
||
├── args_guard.hako # Argument validation
|
||
├── json_normalize_box.hako # JSON processing
|
||
│
|
||
├── [22 handler files] # Instruction handlers:
|
||
│ ├── barrier_handler.hako # GC barrier
|
||
│ ├── binop_handler.hako # Binary operations
|
||
│ ├── boxcall_handler.hako # Box method calls
|
||
│ ├── closure_call_handler.hako # Closure invocation
|
||
│ ├── compare_handler.hako # Comparisons
|
||
│ ├── const_handler.hako # Constants
|
||
│ ├── constructor_call_handler.hako # Constructor calls
|
||
│ ├── copy_handler.hako # Copy operation
|
||
│ ├── extern_call_handler.hako # External calls
|
||
│ ├── global_call_handler.hako # Global functions
|
||
│ ├── load_handler.hako # Memory load
|
||
│ ├── method_call_handler.hako # Method calls
|
||
│ ├── mircall_handler.hako # Unified MIR call
|
||
│ ├── module_function_call_handler.hako # Module functions
|
||
│ ├── newbox_handler.hako # Box creation
|
||
│ ├── nop_handler.hako # No-op
|
||
│ ├── phi_handler.hako # PHI nodes
|
||
│ ├── safepoint_handler.hako # GC safepoint
|
||
│ ├── store_handler.hako # Memory store
|
||
│ ├── terminator_handler.hako # Control flow (jump/branch/ret)
|
||
│ ├── typeop_handler.hako # Type operations
|
||
│ └── unaryop_handler.hako # Unary operations
|
||
│
|
||
└── tests/ (26+ files) # Comprehensive tests
|
||
├── test_phase1_minimal.hako
|
||
├── test_phase2_day4.hako
|
||
├── test_boxcall.hako
|
||
├── test_mircall_*.hako (5 files)
|
||
├── test_mapbox_*.hako (3 files)
|
||
└── ... (16 more)
|
||
```
|
||
|
||
### 設計パターン
|
||
|
||
#### 1. @match-Based Dispatch
|
||
```hakorune
|
||
// instruction_dispatcher.hako
|
||
dispatch(inst_json, regs, mem) {
|
||
local op = extract_op(inst_json)
|
||
|
||
return match op {
|
||
"const" => ConstHandlerBox.handle(inst_json, regs)
|
||
"binop" => BinOpHandlerBox.handle(inst_json, regs)
|
||
"compare" => CompareHandlerBox.handle(inst_json, regs)
|
||
"load" => LoadHandlerBox.handle(inst_json, regs, mem)
|
||
"store" => StoreHandlerBox.handle(inst_json, regs, mem)
|
||
"mir_call" => MirCallHandlerBox.handle(inst_json, regs, mem)
|
||
"boxcall" => BoxCallHandlerBox.handle(inst_json, regs)
|
||
"newbox" => NewBoxHandlerBox.handle(inst_json, regs)
|
||
"phi" => PhiHandlerBox.handle(inst_json, regs)
|
||
"copy" => CopyHandlerBox.handle(inst_json, regs)
|
||
"typeop" => TypeOpHandlerBox.handle(inst_json, regs, mem)
|
||
"nop" => NopHandlerBox.handle(inst_json, regs, mem)
|
||
"safepoint" => SafepointHandlerBox.handle(inst_json, regs, mem)
|
||
"barrier" => BarrierHandlerBox.handle(inst_json, regs, mem)
|
||
"jump" | "branch" | "ret" => TerminatorHandlerBox.handle(inst_json, regs)
|
||
_ => Result.Err("Unsupported instruction: " + op)
|
||
}
|
||
}
|
||
```
|
||
|
||
**特徴**:
|
||
- ✅ すべての命令を1箇所で管理
|
||
- ✅ 新規命令の追加が容易
|
||
- ✅ Fail-Fast(未知命令→即エラー)
|
||
|
||
#### 2. Result-Based Error Handling
|
||
```hakorune
|
||
// Every handler returns Result<Value>
|
||
static box BinOpHandlerBox {
|
||
handle(inst_json, regs) {
|
||
// Validation
|
||
local lhs_result = get_register(regs, lhs_id)
|
||
if lhs_result.is_Err() {
|
||
return Result.Err("BinOp: lhs register not found")
|
||
}
|
||
|
||
// Compute
|
||
local result = compute_binop(kind, lhs, rhs)
|
||
if result.is_Err() {
|
||
return result // Propagate error
|
||
}
|
||
|
||
// Store result
|
||
set_register(regs, dst, result.as_Ok())
|
||
return Result.Ok(result.as_Ok())
|
||
}
|
||
}
|
||
```
|
||
|
||
**特徴**:
|
||
- ✅ 型安全なエラー処理
|
||
- ✅ エラー伝播が明示的
|
||
- ✅ Rustと同じパターン
|
||
|
||
#### 3. Block-Based Execution
|
||
```hakorune
|
||
// hakorune_vm_core.hako
|
||
_execute_blocks(mir_json, regs, mem) {
|
||
local current_block = "entry"
|
||
|
||
loop(current_block != null) {
|
||
// Get block instructions
|
||
local block = BlocksLocatorBox.locate(mir_json, current_block)
|
||
if block.is_Err() { return block }
|
||
|
||
// Execute instructions
|
||
local result = me._execute_block(block.as_Ok(), regs, mem)
|
||
if result.is_Err() { return result }
|
||
|
||
// Update current block (from terminator)
|
||
current_block = result.as_Ok()
|
||
}
|
||
|
||
return Result.Ok(get_register(regs, "return_value"))
|
||
}
|
||
```
|
||
|
||
**特徴**:
|
||
- ✅ MIR Block構造に忠実
|
||
- ✅ Control flowが明示的
|
||
- ✅ TerminatorでBlock遷移
|
||
|
||
---
|
||
|
||
## 🔄 Phase 20.6以降(オプション)
|
||
|
||
### Option A: Pure Hakorune Path(推奨)
|
||
|
||
**前提**: Hakorune VM単体で完結
|
||
|
||
**Phase 20.6以降は不要**:
|
||
- ✅ VM実装完了
|
||
- ✅ すべての命令サポート済み
|
||
- ✅ テストカバレッジ十分
|
||
- ✅ CLI統合可能
|
||
|
||
**次のステップ**:
|
||
1. Hakorune VMをデフォルトに
|
||
2. Rust VMを `--backend vm-rust` (互換モード)
|
||
3. パフォーマンス最適化
|
||
|
||
### Option B: HostBridge Path(必要な場合のみ)
|
||
|
||
**条件**: C-ABI境界が他の理由で必要
|
||
|
||
**Phase 20.6(8週間)**:
|
||
- Week 1-4: HostBridge API実装
|
||
- Week 5-6: Rust最小化(~100行)
|
||
- Week 7-8: ドキュメント・検証
|
||
|
||
---
|
||
|
||
## ⚠️ リスク & 対策(更新版)
|
||
|
||
### リスク1: Hakorune VM のバグ
|
||
|
||
**問題**: 既存実装に未発見のバグがある可能性
|
||
|
||
**影響**: MEDIUM(Golden Testで検出可能)
|
||
|
||
**対策**:
|
||
- Golden Testで Rust-VM との一致を検証
|
||
- エッジケーステスト拡充
|
||
- ストレステスト実施
|
||
- バグ発見時は即座に修正
|
||
|
||
### リスク2: パフォーマンス
|
||
|
||
**問題**: Hakorune VM が Rust VM より遅い可能性
|
||
|
||
**影響**: LOW(機能的には問題なし)
|
||
|
||
**対策**:
|
||
- ベンチマーク測定
|
||
- ボトルネック特定
|
||
- 最適化は Phase 20.7以降
|
||
- 「動作正しさ」が最優先
|
||
|
||
### リスク3: CLI統合の複雑性
|
||
|
||
**問題**: Rust VM経由で Hakorune VM を呼び出す必要
|
||
|
||
**影響**: LOW(標準的なパターン)
|
||
|
||
**対策**:
|
||
- Rust VM の既存実行パスを再利用
|
||
- Box loading機構を活用
|
||
- エラーハンドリング整備
|
||
|
||
---
|
||
|
||
## 📚 関連リソース
|
||
|
||
### Phase 20.5ドキュメント
|
||
- **[HAKORUNE_VM_DISCOVERY.md](HAKORUNE_VM_DISCOVERY.md)** ⭐ 重大発見レポート
|
||
- **[STRATEGY_RECONCILIATION.md](STRATEGY_RECONCILIATION.md)** - 戦略変更の理由
|
||
- **[PURE_HAKORUNE_ROADMAP.md](PURE_HAKORUNE_ROADMAP.md)** - 全体計画(更新予定)
|
||
- [C_CODE_GENERATOR_DESIGN.md](C_CODE_GENERATOR_DESIGN.md) - ❌ 中止(参考用)
|
||
|
||
### Hakorune VM実装
|
||
- **Location**: `selfhost/hakorune-vm/` (3,413 lines)
|
||
- **Entry Point**: `hakorune_vm_core.hako`
|
||
- **Dispatcher**: `instruction_dispatcher.hako`
|
||
- **Tests**: `tests/*.hako` (26+ files)
|
||
|
||
### 前フェーズ
|
||
- [Phase 15.77 - 凍結EXE確定](../phase-15.77/)
|
||
- [Phase 15.76 - extern_c & Frozen Toolchain](../phase-15.76/)
|
||
|
||
---
|
||
|
||
## 💬 開発体制
|
||
|
||
### 実装担当
|
||
- **tomoaki**: Hakorune VM実装完了 ✅(Oct 5-13, 2025)
|
||
- **ChatGPT**: Golden Test設計・CLI統合支援
|
||
- **Claude**: ドキュメント整備・検証スクリプト作成
|
||
|
||
### レビュー方針
|
||
- Week 2, 4, 6終了時にレビュー
|
||
- Golden Test すべて PASS が必須
|
||
- バグ発見時は即座に修正
|
||
|
||
---
|
||
|
||
## 🎉 成功後の世界
|
||
|
||
### Phase 20.5完了後(6週間):
|
||
|
||
1. **Hakorune VM検証完了**: 22ハンドラーすべて動作確認
|
||
2. **Golden Testing完了**: Rust-VM vs Hako-VM 100%一致
|
||
3. **CLI統合完了**: `--backend vm-hako` で実行可能
|
||
4. **ドキュメント完備**: アーキテクチャ・移行ガイド
|
||
5. **次フェーズ判断**: HostBridge必要性の決定
|
||
|
||
### Option A: Pure Hakorune Path(推奨)
|
||
|
||
6. **Hakorune VMデフォルト化**: `--backend vm` で Hakorune VM 使用
|
||
7. **Rust VM互換モード化**: `--backend vm-rust` でRust VM(旧来)
|
||
8. **完全自己ホスト達成**: Hakorune IS Hakorune ✅
|
||
|
||
### Option B: HostBridge Path(必要な場合)
|
||
|
||
6. **HostBridge API実装**: C-ABI境界確立
|
||
7. **Rust最小化**: ~100行(C-ABI橋のみ)
|
||
8. **Phase 20.7以降**: パフォーマンス最適化、GC改良
|
||
|
||
---
|
||
|
||
**作成日**: 2025-10-14
|
||
**重大更新**: 2025-10-14(Hakorune VM発見による全面改訂)
|
||
**Phase開始予定**: 2025-12-21(Phase 15.77完了後)
|
||
**想定期間**: 6週間(36週間 → 6週間に短縮!)
|
||
**戦略**: 検証・統合(実装ではなく)
|
||
**成果**: Pure Hakorune VM 実現 ✅
|