Files
hakorune/docs/private/roadmap/phases/phase-15.75/STRATEGY.md

29 KiB
Raw Blame History

Phase 15.75 Bootstrap戦略統合ドキュメント

📚 ← ../INDEX.md に戻る | 🔒 安全性保証・Rollback戦略 + 🔧 ツールチェーン要件

最終更新: 2025-10-14 ステータス: Phase 15.75計画段階 目的: MIRの疎結合を活用したゼロリスクBootstrap戦略とツールチェーン要件の完全定義


📋 目次

  1. Executive Summary
  2. MIR疎結合の技術的仕組み
  3. Stage 0/1/2 並行運用戦略
  4. Rollback手順の詳細
  5. パフォーマンス境界の詳細
  6. "Chicken and Egg"問題の解消
  7. Bootstrap戦略の実装手順
  8. リスク評価の修正
  9. ツールチェーン要件
  10. 将来の開発環境
  11. まとめ

📋 Executive Summary

Phase 15.75のRust脱却は不可逆的な書き換えではなく、実行バックエンドの追加です。

🎯 核心原則

MIR = 疎結合ポイント
→ Stage 0/1/2 は並行運用可能
→ いつでもRollback可能
→ パフォーマンス境界はMIRレベル

hakorune.exe が自分自身をビルド・テスト・デバッグできる環境
= 外部依存最小化 + 段階的自己実装

⚠️ 従来の誤解 vs 正しい理解

誤解(従来の"コンパイラ書き換え"モデル)

Stage 0 ──→ Stage 1 ──→ Stage 2 (一方通行)
(Rust)    (Hybrid)    (Hakorune)
           ↑
        戻れない危険地帯

正しい理解Hakorune MIRモデル

           MIR (疎結合)
              ↓
    ┌─────────┼─────────┐
    ↓         ↓         ↓
Stage 0   Stage 1   Stage 2
(Rust VM) (LLVM AOT)(Hako VM AOT)

← いつでも切替可能 →

重要: すべてのStageが同じMIRを実行するため、バックエンドはいつでも交換可能

🚀 優先度定義

  • P0 (Critical): なければ開発不可能1週間以内に必要
  • P1 (High): 生産性に大きく影響1ヶ月以内
  • P2 (Medium): あると便利(将来実装)
  • P3 (Low): Nice-to-have需要次第

🔧 1. MIR疎結合の技術的仕組み

1.1 MIRとは何か

MIR (Mid-level Intermediate Representation): Hakoruneの中間表現

{
  "functions": [{
    "name": "main",
    "blocks": [{
      "id": 0,
      "instructions": [
        {"op": "const", "dst": 1, "value": {"Int": 42}},
        {"op": "const", "dst": 2, "value": {"Int": 10}},
        {"op": "binop", "dst": 3, "kind": "Add", "lhs": 1, "rhs": 2}
      ],
      "terminator": {"op": "ret", "value": {"Register": 3}}
    }]
  }]
}

1.2 MIRが提供する疎結合

Source Code (.hako)
    ↓
[Parser]  ← Stage 0: Rust / Stage 1-2: Selfhost
    ↓
★ MIR (JSON) ★  ← 疎結合ポイント(安定インターフェース)
    ↓
[Execution Backend]
    ├─ Rust VM (Stage 0)
    ├─ LLVM AOT (Stage 1)
    └─ Hakorune VM AOT (Stage 2)

重要な特性:

  1. 安定性: MIRフォーマットは凍結済み16命令で完結
  2. 独立性: Parser と Execution は完全に分離
  3. 交換可能性: 同じMIRなら、どのバックエンドでも同じ結果

1.3 実行例同じMIRを3つのバックエンドで実行

# MIR生成どのStageでもOK
./hakorune-stage0.exe --emit-mir-json test.mir.json test.hako

# Stage 0: Rust VM実行
./hakorune-stage0.exe test.mir.json
→ 出力: 52

# Stage 1: LLVM AOT実行
./hakorune-stage1.exe test.mir.json
→ 出力: 52

# Stage 2: Hakorune VM AOT実行
./hakorune-stage2.exe test.mir.json
→ 出力: 52

結論: MIRが正しければ、すべてのバックエンドで同じ結果


🚀 2. Stage 0/1/2 並行運用戦略

2.1 3つのStageの役割分担

Stage 実装 用途 開発速度 最適化 デバッグ
Stage 0 Rust VM + Rust Parser デバッグ・最終Rollback ★★★★★
Stage 1 LLVM AOT + Selfhost Parser 本番推奨・開発 ★★★★★ ★★★★
Stage 2 Hakorune VM AOT + Selfhost Parser 実験的・将来 ★★★ ★★

2.2 並行運用の具体例

ケース1: 通常開発Stage 1メイン

# コード編集
vim selfhost/compiler/parser.hako

# ビルドテストStage 1
./hakorune-stage1.exe build --target selfhost/
./hakorune-stage1.exe test --profile quick

# 問題なければcommit
git commit -m "feat: improve parser error messages"

ケース2: デバッグ必要Stage 0にRollback

# Stage 1でバグ発見
./hakorune-stage1.exe buggy_code.hako
→ Segmentation fault原因不明

# Stage 0で詳細トレース
HAKO_VM_TRACE="op=*;regs=1" ./hakorune-stage0.exe buggy_code.hako
→ [vm] bb=3 inst=7 boxcall recv=v%5(null) ← NULL参照発見

# 修正後、Stage 1でテスト
./hakorune-stage1.exe buggy_code.hako
→ 正常動作

ケース3: パフォーマンス検証Stage 2実験

# Stage 1で基準測定
time ./hakorune-stage1.exe benchmark.hako
→ 1.2秒

# Stage 2で比較
time ./hakorune-stage2.exe benchmark.hako
→ 2.5秒(遅い)

# 結論: Stage 1を継続使用問題なし

2.3 hakorune.exe の維持戦略

方針: 3つの hakorune 実行ラインを並行維持

hakorune-selfhost/
├── bin/
│   ├── hakorune           ← `target/release/nyash` ラッパー(現行実体)
│   ├── hakorune-stage0    ← Rust VM現行は `nyash` に委譲)
│   └── hakorune-stage1    ← LLVM ライン(現行は `nyash --backend llvm`
├── src/                   ← Stage 0用 Rust コード(ブランチ保存)
├── selfhost/              ← Stage 1-2用 Hakoruneコード
└── hako.toml

ビルド手順

Stage 0: Rust Bootstrap初回のみ

# 初回ビルド
cargo build --release
cp target/release/hako bin/hakorune-stage0

# 以降は保存のみ(更新不要)
git checkout -b stage0-preserved
git commit -m "chore: preserve Stage 0 for debugging"

備考: 現時点の実体は nyashbin/ のラッパー経由で名称を hakorune に統一しつつ、徐々に本体も置換していく(段階移行)。

Stage 1: LLVM ライン(メイン開発)

# Selfhost Parserでビルド
./bin/hakorune-stage0 build --target selfhost/ --backend llvm
→ bin/hakorune-stage1 生成

# 以降は Stage 1で自己ビルド可能
./bin/hakorune-stage1 build --target selfhost/ --backend llvm
→ bin/hakorune-stage1 更新

Stage 2: Hakorune VM AOT将来

# Hakorune VM実装後
./bin/hakorune-stage1 build --target selfhost/ --backend hakorune-vm
→ bin/hakorune-stage2 生成

# Stage 2で自己ビルド可能
./bin/hakorune-stage2 build --target selfhost/ --backend hakorune-vm
→ bin/hakorune-stage2 更新

🔄 3. Rollback手順の詳細

3.1 Rollback Level 1: バックエンド切替(即座)

状況: Stage 1実行時に問題発生

# 問題発生
./hakorune-stage1.exe problem.hako
→ エラー(原因不明)

# 即座にStage 0へ切替
./hakorune-stage0.exe problem.hako
→ 正常動作 or 詳細エラーメッセージ

所要時間: 0秒バイナリ切替のみ

3.2 Rollback Level 2: Parser RollbackMIR経由

状況: Selfhost ParserにバグStage 1-2共通

# Selfhost Parserでパースエラー
./hakorune-stage1.exe new_syntax.hako
→ Parse errorSelfhost Parserのバグ

# Stage 0Rust Parserで回避
./hakorune-stage0.exe new_syntax.hako
→ 正常動作

# Selfhost Parserのバグ修正
vim selfhost/compiler/parser.hako

# Stage 0でテストRust VM
./hakorune-stage0.exe test tests/test_parser.hako
→ PASS

# Stage 1で再ビルド
./hakorune-stage0.exe build --target selfhost/ --backend llvm
→ hakorune-stage1.exe 更新

# 修正確認
./hakorune-stage1.exe new_syntax.hako
→ 正常動作

所要時間: 5-10分修正 + テスト)

3.3 Rollback Level 3: Full RollbackGit branch切替

状況: Phase 15.75全体を巻き戻し

# 現在: Phase 15.75完了後Stage 1運用中
git branch
* phase-15.75-complete
  stage0-preserved
  main

# 問題発生(致命的)
./hakorune-stage1.exe critical_app.hako
→ Runtime panic修正不可能

# Stage 0ブランチへ完全Rollback
git checkout stage0-preserved

# Rustビルド
cargo build --release

# Stage 0で動作確認
./target/release/hako critical_app.hako
→ 正常動作

# 問題修正後、再度Phase 15.75へ
git checkout phase-15.75-complete

所要時間: 10-30分ブランチ切替 + ビルド)


📊 4. パフォーマンス境界の詳細

4.1 パフォーマンス劣化の境界

ユーザーの指摘「パフォーマンス劣化のラインはそこMIRレベルでキレます」

┌─────────────────────────┐
│ Source Code (.hako)     │
│                         │ ← 正しさの領域
│ ↓ Parser                │   (パフォーマンス影響なし)
├─────────────────────────┤
│ ★ MIR (JSON) ★          │ ← ★パフォーマンス境界★
├─────────────────────────┤
│ ↓ Execution Backend     │
│   - Rust VM (遅)        │ ← 最適化の領域
│   - LLVM AOT (高速)     │   (バックエンド選択で変動)
│   - Hakorune VM (中速)  │
└─────────────────────────┘

4.2 MIR品質 = パフォーマンス上限

重要な意味:

  1. Selfhost Parserが生成するMIR = Rust Parserと同等 → パフォーマンス上限は保証される

  2. 実行バックエンドの違い = 最適化レベルの差 → Stage 0Rust VM: 最適化なし → Stage 1LLVM AOT: 最適化あり(推奨) → Stage 2Hakorune VM: 将来的に最適化予定

  3. MIRを改善すれば、すべてのStageで性能向上

    # MIR最適化パス追加
    ./hakorune-stage1.exe --mir-opt-level 2 program.hako
    → すべてのバックエンドで高速化
    

4.3 実測パフォーマンス比較(予測)

バックエンド ビルド時間 実行速度 デバッグ性 推奨用途
Stage 0 (Rust VM) 2秒 1.0x(基準) ★★★★★ デバッグ・検証
Stage 1 (LLVM AOT) 5秒 10-50x ★★★★ 本番・開発
Stage 2 (Hako VM) 3秒 2-5x予測 ★★ 実験的

結論: Stage 1LLVM AOTが最速 → メイン開発推奨


🎯 5. "Chicken and Egg"問題の解消

5.1 従来の誤解

誤解: 「Stage 2に移行したら、Stage 1でビルドできなくなる循環依存

❌ 誤ったモデル:
hakorune-stage1.exeLLVM AOT
    ↓ 削除
hakorune-stage2.exeHakorune VMのみ
    ↓
Stage 2で問題発生 → Stage 1がない詰み

5.2 正しい理解

正しいモデル: 「Stage 1-2は並行維持、削除しない」

✅ 正しいモデル:
hakorune-stage1.exeLLVM AOT ← 削除しない!
    ↓ 並行
hakorune-stage2.exeHakorune VM ← 実験的に追加
    ↓
Stage 2で問題発生 → Stage 1に戻る問題なし

5.3 実際のビルドフロー

Phase 5完了時Stage 1確立

# Stage 0でStage 1ビルド初回のみ
./hakorune-stage0.exe build --backend llvm
→ hakorune-stage1.exe 生成

# Stage 1で自己ビルド可能
./hakorune-stage1.exe build --backend llvm
→ hakorune-stage1.exe 更新(自己再生産)

Phase 8完了時Stage 2追加

# Stage 1でStage 2ビルド
./hakorune-stage1.exe build --backend hakorune-vm
→ hakorune-stage2.exe 生成

# Stage 2で自己ビルド可能
./hakorune-stage2.exe build --backend hakorune-vm
→ hakorune-stage2.exe 更新

# Stage 1も維持
./hakorune-stage1.exe build --backend llvm
→ hakorune-stage1.exe 更新(並行維持)

重要: Stage 0/1/2すべてが自己再生産可能 → 循環依存なし


📋 6. Bootstrap戦略の実装手順

6.1 Phase 1-2: Stage 1確立

目標: hakorune-stage1.exeLLVM AOTを自己ビルド可能に

Week 1-2: Selfhost Parser実装
  ├─ Stage 0でテストRust VM
  ├─ MIR出力確認Rust Parser と一致)
  └─ Stage 0でStage 1ビルド

Week 2終了時:
  ✅ hakorune-stage0.exe保存
  ✅ hakorune-stage1.exe自己再生産可能

Rollback可能性: いつでもStage 0に戻れる

6.2 Phase 3-5: Rust削減

目標: Rust 99,406行 → 10,400行

Week 3-4: Box移行 + Rust VM削除 + Runtime薄層化
  ├─ Stage 1で開発メイン
  ├─ Stage 0で検証並行テスト
  └─ スモークテスト全pass確認

Week 4終了時:
  ✅ hakorune-stage0.exeブランチ保存
  ✅ hakorune-stage1.exe10,400行 Rust kernel

Rollback可能性: いつでもStage 0ブランチに戻れる

6.3 Phase 6-8: Stage 2実装オプション

目標: hakorune-stage2.exeHakorune VM AOTを実験的に追加

Week 5-8: Hakorune VM実装オプション
  ├─ Stage 1で開発メイン継続
  ├─ Hakorune VM実装新規
  └─ Stage 2ビルド実験的

Week 8終了時:
  ✅ hakorune-stage0.exeブランチ保存
  ✅ hakorune-stage1.exeメイン開発
  ✅ hakorune-stage2.exe実験的

Rollback可能性: Stage 1-2両方維持、いつでも切替可能


🚨 7. リスク評価の修正

7.1 従来のリスク評価(誤解ベース)

リスク レベル 理由
Rollback不可 HIGH Stage 2移行後は戻れない
循環依存 HIGH Chicken and Egg問題
デバッグ劣化 MEDIUM Rust VMがなくなる

7.2 修正後のリスク評価MIR疎結合ベース

リスク レベル 理由 対策
Rollback不可 NONE MIR疎結合により常にRollback可能 Stage 0保存
循環依存 NONE Stage 1-2並行維持 削除しない
デバッグ劣化 NONE Stage 0永久保存 ブランチ保存
MIR品質劣化 LOW Selfhost Parserのバグ Stage 0で検証
パフォーマンス劣化 LOW Stage 2が遅い可能性 Stage 1継続使用

結論: MIR疎結合により、すべての致命的リスクが解消


🔧 8. ツールチェーン要件

Phase 15.75でRustを削減99,406行 → 10,400行 or 3,500行する際、開発継続性を保証するために必要なツールチェーンを定義します。

用語と実体(現時点の対応)

  • 実行バイナリ実体: target/release/nyash
  • 呼称/ラッパー: bin/hakorune, bin/hakorune-stage0, bin/hakorune-stage1
  • Cargo alias開発導線: build-rust/run-rustlegacy, build-hako/run-hakoplugin-only
    • .cargo/config.toml に定義済みPhase 15.75 名称分離)。
    • 将来は実体名も hakorune に移行(ラッパー→本体置換の段階移行)。

8.1 ビルドシステムP0 - Critical

HakoBuildBox - Build Orchestrator

目的: cargo build の代替として、Hakoruneプロジェクトをビルド

必要機能:

static box HakoBuildBox {
  // プロジェクト構造解析
  parse_project(root_path) -> ProjectBox

  // 依存関係解決
  resolve_dependencies(project) -> DependencyGraphBox

  // ビルド実行
  build(project, config) -> BuildResultBox

  // インクリメンタルビルド
  incremental_build(project, changed_files) -> BuildResultBox

  // クリーン
  clean(project) -> Result
}

実装戦略:

Phase 5.1: 最小実装1週間

# 目標: hakorune.exe 自己ビルド可能に
hako build.hako --target selfhost/compiler/pipeline_v2/

# 機能:
- ファイル列挙(*.hako
- using依存解決トポロジカルソート
- MIR生成hakorune.exe呼び出し
- LLVM AOT実行python llvm_builder.py

実装サイズ見積もり: 500-800行Hakorune

依存ライブラリ:

  • FileBox (plugin) - ファイルIO
  • ArrayBox, MapBox (builtin) - データ構造
  • StringBox (builtin) - パス操作

代替案:

# 暫定: Makefileで代用Phase 1-4期間
make -f hakorune.mk build

hako.toml パーサーP0

目的: プロジェクト設定読み込み

必要機能:

static box HakoTomlBox {
  parse(content) -> ConfigBox

  get_dependencies(config) -> ArrayBox
  get_build_settings(config) -> MapBox
  get_module_paths(config) -> ArrayBox
}

実装戦略:

# Phase 5.1: 最小TOMLサブセット
[package]
name = "hakorune-selfhost"
version = "0.1.0"

[dependencies]
selfhost = { path = "./selfhost" }

[build]
target = "llvm"

実装サイズ見積もり: 300-500行

代替案:

  • JSON設定ファイルhako.json - TOMLより簡単
  • Hakorune内埋め込み設定

8.2 コードエディタサポートP1 - High

HakoLspBox - Language Server Protocol

目的: VSCode/Vim等でコード補完・エラー表示

必要機能:

static box HakoLspBox {
  // 初期化
  initialize(root_uri) -> Result

  // 補完
  textDocument_completion(params) -> CompletionListBox

  // 定義ジャンプ
  textDocument_definition(params) -> LocationBox

  // エラー診断
  textDocument_publishDiagnostics(uri) -> DiagnosticsBox

  // ホバー情報
  textDocument_hover(params) -> HoverBox
}

実装戦略:

Phase 6.1: 最小LSP2週間

機能:
✅ 構文エラー表示(赤波線)
✅ using 解決(定義ジャンプ)
✅ 基本補完static box メソッド名)

実装方法:
- JSON-RPC over stdio
- Parser再利用--check-syntax mode
- シンボルテーブル構築using追跡

実装サイズ見積もり: 1,200-2,000行

優先度判断:

  • P1 - エディタなしは生産性激減
  • ただし Phase 1-5 は既存エディタで可能
  • Phase 6 で実装開始でOK

代替案:

# 暫定: 構文チェックスクリプト
hako --check-syntax file.hako

HakoFmtBox - Code FormatterP2

目的: コード整形統一

実装サイズ見積もり: 400-800行

優先度判断:

  • P2 - 現状手動整形で対応可能
  • 複数人開発開始後に必要

8.3 テストフレームワークP0 - Critical

HakoTestBox - Unit Test Framework

目的: cargo test の代替

必要機能:

static box HakoTestBox {
  // テスト実行
  run_tests(test_dir) -> TestResultBox

  // アサーション
  assert_eq(actual, expected) -> Result
  assert_ne(actual, expected) -> Result
  assert(condition, message) -> Result

  // テストレポート
  report(results) -> StringBox
}

実装戦略:

Phase 5.2: 最小実装3日

// テストファイル: tests/test_parser.hako
using "hakorune/test" as Test

static box TestParser {
  test_basic_expression() {
    local result = Parser.parse("1 + 2")
    Test.assert_eq(result.is_Ok(), 1)
  }

  test_invalid_syntax() {
    local result = Parser.parse("1 +")
    Test.assert(result.is_Err())
  }
}
# 実行
hako test tests/

# 出力
Running test_basic_expression... PASS
Running test_invalid_syntax... PASS

Test Results: 2 passed, 0 failed

実装サイズ見積もり: 200-400行

代替案:

# 暫定: スモークテストスクリプト流用
bash tools/smokes/v2/run.sh --profile quick

8.4 デバッグツールP0 - Critical

MIRダンプツールP0 - 実装済み

現状: --dump-mir で実装済み

# 既存機能
hako --dump-mir program.hako
hako --emit-mir-json debug.json program.hako

追加で必要な機能:

# MIR最適化レベル確認
hako --dump-mir --mir-opt-level 2 program.hako

# MIR diff最適化前後
hako --dump-mir-diff program.hako

実装サイズ見積もり: 100-200行追加分のみ

VM Trace DebuggerP0 - 実装済み

現状: 既に実装済み

# Rust VM トレース
HAKO_VM_TRACE="op=compare,binop;regs=1" hako program.hako

# Rust VM ステッパ
HAKO_VM_STEP=1 hako program.hako

# Selfhost Mini-VM トレース
# MiniVmEntryBox.run_trace() 使用)

追加で必要な機能:

# ブレークポイント
HAKO_VM_BREAK="block=5,inst=3" hako program.hako

# レジスタウォッチ
HAKO_VM_WATCH="v%3,v%5" hako program.hako

実装サイズ見積もり: 200-300行追加分のみ

Performance ProfilerP2

目的: ボトルネック特定

実装サイズ見積もり: 800-1,200行

優先度判断:

  • P2 - 最適化フェーズで必要Phase 8以降
  • 暫定: time コマンドで代用

8.5 パッケージマネージャーP2 - Medium

HakoPkgBox - Package Manager

目的: 外部ライブラリ管理(cargo install 代替)

実装サイズ見積もり: 1,000-1,500行

優先度判断:

  • P2 - Phase 1-6 は using で十分
  • 外部ライブラリエコシステム成長後に必要

代替案:

# Git submodule
git submodule add https://github.com/user/hako-json-parser libs/json_parser

8.6 コード解析ツールP3 - Low

HakoLintBox - Static AnalyzerP3

実装サイズ見積もり: 600-1,000行

優先度判断:

  • P3 - Nice-to-have
  • 現状: コードレビューで対応

HakoDocBox - Documentation GeneratorP3

実装サイズ見積もり: 800-1,200行

優先度判断:

  • P3 - 手動ドキュメント管理で十分(当面)

🚀 9. 将来の開発環境

9.1 ツールチェーン実装優先度マトリックス

ツール 優先度 実装時期 実装サイズ 依存 代替案
HakoBuildBox P0 Phase 5.1 (Week 3) 500-800行 FileBox Makefile
HakoTomlBox P0 Phase 5.1 (Week 3) 300-500行 - JSON設定
HakoTestBox P0 Phase 5.2 (Week 3) 200-400行 - Bashスクリプト
MIRダンプ P0 実装済み +100-200行 - -
VM Trace P0 実装済み +200-300行 - -
HakoLspBox P1 Phase 6.1 (Week 5-6) 1,200-2,000行 - --check-syntax
統合テスト P1 Phase 7 (Week 7-8) 600-1,000行 - 既存Bash
HakoFmtBox P2 Phase 7 (Week 8) 400-800行 - 手動整形
HakoPkgBox P2 Phase 7-8 (Week 9+) 1,000-1,500行 - Git submodule
Profiler P2 Phase 8+ 800-1,200行 - time コマンド
HakoLintBox P3 将来 600-1,000行 - レビュー
HakoDocBox P3 将来 800-1,200行 - 手動

9.2 実装工数見積もり

P0ツール必須 - 1ヶ月以内

HakoBuildBox:  5日Week 3
HakoTomlBox:   3日Week 3
HakoTestBox:   3日Week 3
MIRダンプ強化: 2日Week 4
VM Trace強化:  2日Week 4

合計: 15日 ≈ 3週間Week 3-4

P1ツール重要 - 2ヶ月以内

HakoLspBox:    10日Week 5-6
統合テスト:    5日Week 7

合計: 15日 ≈ 3週間Week 5-7

P2ツール便利 - 3ヶ月以内

HakoFmtBox:    5日Week 8
HakoPkgBox:    10日Week 9-10
Profiler:      8日Week 11

合計: 23日 ≈ 5週間Week 8-12

9.3 最小実装セットPhase 15.75完了に必要)

✅ P0ツールWeek 3-4
  - HakoBuildBox500行
  - HakoTomlBox300行
  - HakoTestBox200行
  - MIRダンプ+100行
  - VM Trace+200行

合計: 約1,300行 + 既存デバッグツール
期間: 2週間Phase 5期間中に並行実装

結論: Phase 15.751ヶ月計画完了に必要なツールチェーンはすべて実現可能

9.4 段階的実装アプローチ

Week 1-2: Phase 1-2 (Selfhost Parser)
  → 既存 hakorune.exe 使用(ツール不要)

Week 3: Phase 5.1 (P0ツール実装)
  → HakoBuildBox5日
  → HakoTomlBox3日
  → HakoTestBox3日
  ※並行作業: Parser開発 + ツール開発

Week 4: Phase 3-4 (Box移行 + Rust VM削除)
  → 既存ツール使用
  → MIRダンプ強化2日

Week 5-6: Phase 6 (P1ツール実装)
  → HakoLspBox10日
  ※オプション: Phase 5完了後でもOK

Week 7+: P2ツール将来実装
  → 需要に応じて追加

9.5 ツール間依存関係

┌─────────────────┐
│ hakorune.exe    │ ← 最優先(常に動作保証)
└────────┬────────┘
         │
    ┌────┴────┐
    │ MIR     │ ← 疎結合ポイント
    └────┬────┘
         │
┌────────┴────────┐
│ HakoBuildBox    │ ← ビルド統括
│  ├─ HakoTomlBox │   設定読込
│  ├─ FileBox     │   ファイルIO
│  └─ hakorune.exe│   MIR生成呼出
└─────────────────┘
         │
    ┌────┴────┐
    │ HakoTestBox │ ← テスト実行
    │  └─ hakorune.exe
    └─────────┘
         │
    ┌────┴────┐
    │ HakoLspBox  │ ← エディタ支援
    │  └─ Parser  │   構文解析再利用
    └─────────┘

重要: すべてのツールが hakorune.exeMIR に依存 → MIRの安定性がツールチェーン全体の安定性を保証

9.6 ツールチェーン品質保証戦略

// tests/test_hako_build.hako
using "hakorune/test" as Test
using "hakorune/build" as Build

static box TestHakoBuild {
  test_simple_project() {
    local project = Build.parse_project("./test_fixtures/simple")
    Test.assert_eq(project.name(), "simple")

    local result = Build.build(project, null)
    Test.assert(result.is_Ok())
  }

  test_dependency_resolution() {
    local project = Build.parse_project("./test_fixtures/with_deps")
    local deps = Build.resolve_dependencies(project)
    Test.assert_eq(deps.size(), 3)
  }
}

🎯 10. まとめゼロリスクBootstrap戦略

10.1 核心原則(再確認)

1. MIR = 疎結合ポイント
   → Parser と Execution Backend は完全分離

2. Stage 0/1/2 = 並行運用
   → いつでも切替可能、削除しない

3. hakorune.exe = 常に動作保証
   → 開発継続性100%維持

4. パフォーマンス境界 = MIRレベル
   → MIRが正しければパフォーマンス保証

5. Rollback = 即座に可能
   → バイナリ切替0秒〜 ブランチ切替30分

6. ツールチェーン = 段階的自己実装
   → P01ヶ月→ P12ヶ月→ P23ヶ月

10.2 Phase 15.75の成功条件

✅ hakorune-stage1.exe が自己ビルド可能
✅ Rust 99,406行 → 10,400行削減
✅ スモークテスト全pass
✅ Stage 0/1並行維持
✅ いつでもRollback可能
✅ P0ツールチェーン完備Build/Test/Debug

10.3 最終確認

Q: Phase 15.75完了後、問題が起きたらどうする?

# A: 即座にStage 0へRollback0秒
./hakorune-stage0.exe problem.hako

Q: Selfhost Parserにバグがあったらどうする

# A: Stage 0Rust Parserで開発継続問題なし
./hakorune-stage0.exe build --target selfhost/

Q: Stage 2Hakorune VMが遅かったらどうする

# A: Stage 1LLVM AOTを継続使用問題なし
./hakorune-stage1.exe program.hako

Q: ツールチェーンが間に合わなかったらどうする?

# A: 代替案で継続Makefile/Bash/既存ツール)
make -f hakorune.mk build
bash tools/smokes/v2/run.sh --profile quick

結論: すべてのケースでRollback可能 + ツールチェーン段階実装 → ゼロリスクBootstrap戦略


🔗 関連ドキュメント


📝 変更履歴

  • 2025-10-14: BOOTSTRAP_STRATEGY_MIR_ROLLBACK.md と TOOLCHAIN_REQUIREMENTS.md を統合
    • MIR疎結合によるRollback能力の詳細説明
    • Stage 0/1/2並行運用戦略の定義
    • "Chicken and Egg"問題の解消
    • パフォーマンス境界の明確化
    • ツールチェーン要件の完全定義
    • 段階的実装アプローチの統合
  • 2025-10-13: 元の2ファイル作成Claude Code + ユーザー指摘反映)