# Phase 20.8: GC + Rust Deprecation **期間**: 6週間(2026-07-20 → 2026-08-30) **ステータス**: 未開始 **前提条件**: Phase 20.7(Collections in Hakorune)完了 --- ## 🎯 概要 Phase 20.8は「Pure Hakorune大作戦」の最終フェーズです。2つのサブフェーズで構成されます: - **Phase E: GC v0** (Week 1-4) - Mark & Sweep ガベージコレクション実装 - **Phase F: Rust VM Deprecation** (Week 5-6) - Rust VM非推奨化と完全セルフホスト達成 このフェーズの完了により、以下を実現します: ``` Rust=floor, Hakorune=house ✅ Rust層: ≤ 100行(HostBridge API のみ) Hakorune層: すべて(VM、コレクション、GC、コンパイラ) ``` --- ## 🏗️ Phase E: GC v0 (Week 1-4) ### 実装内容 #### 1. Stop-the-world Mark & Sweep 最小限のGC実装: - **Mark**: 到達可能オブジェクトをルートからトレース - **Sweep**: 到達不可能オブジェクトを解放 - **Simple**: Generational GC、Incremental GCは実装しない #### 2. GC Roots(ルート集合) 以下の3種類のルートから到達可能性を判定: ```hakorune // 1. Stack frames(スタックフレームのローカル変数) local obj = new MyBox() // GC root // 2. Global static boxes(グローバル静的Box) static box GlobalState { config: ConfigBox // GC root } // 3. HandleRegistry(C-ABI経由のハンドル) // Rust側で保持されているハンドル ``` #### 3. GC Metrics(メトリクス収集) GC動作の観測可能性を確保: - **Allocation count**: 割り当てオブジェクト数 - **Survivor count**: 生存オブジェクト数 - **Sweep time**: GC実行時間 - **Handle count**: HandleRegistry内のハンドル数 #### 4. Observability(観測機能) ```bash # 詳細GCログ出力 HAKO_GC_TRACE=1 ./hako program.hako # 出力例: # [GC] Mark phase: 1234 objects traced # [GC] Sweep phase: 567 objects freed (45ms) # [GC] Survivors: 667 objects (54% survival rate) # プログラム終了時のGC統計 # [GC Stats] Total allocations: 10000 # [GC Stats] Total collections: 15 # [GC Stats] Total freed: 8500 # [GC Stats] Peak handles: 42 ``` --- ## 🚀 Phase F: Rust VM Compat Mode (Week 5-6) ### 実装内容 #### 1. Deprecate Rust VM(Rust VM非推奨化) ```bash # デフォルト: Hakorune-VM ./hako program.hako # Hakorune-VM使用 # 明示的指定 ./hako --backend vm program.hako # Hakorune-VM使用 # Rust-VMはopt-in(警告あり) ./hako --backend vm-rust program.hako # Warning: Rust-VM is deprecated and will be removed in Phase 15.82. # Use Hakorune-VM (--backend vm) instead. ``` #### 2. Bit-Identical Verification(ビット完全一致検証) セルフコンパイルチェーン: ```bash # Hako₁: 既存のRust製コンパイラ ./hako_rust selfhost-compiler.hako -o hako_1 # Hako₂: Hako₁でビルドしたコンパイラ ./hako_1 selfhost-compiler.hako -o hako_2 # Hako₃: Hako₂でビルドしたコンパイラ ./hako_2 selfhost-compiler.hako -o hako_3 # 検証: Hako₁ == Hako₂ == Hako₃(バイト単位) diff hako_1 hako_2 # Expected: 完全一致 diff hako_2 hako_3 # Expected: 完全一致 ``` **CI統合**: ```yaml # .github/workflows/self_compilation.yml name: Self-Compilation Verification on: [push, pull_request] jobs: verify: runs-on: ubuntu-latest steps: - name: Build Hako₁ → Hako₂ → Hako₃ - name: Verify bit-identical run: | diff hako_1 hako_2 || exit 1 diff hako_2 hako_3 || exit 1 ``` 毎日CIで実行し、divergence(逸脱)を早期検出。 #### 3. Rust Layer Minimization(Rust層最小化) 最終的なRust層の役割: ```rust // src/host_bridge.rs (~100 lines) // HostBridge API (C-ABI) #[no_mangle] pub extern "C" fn Hako_RunScriptUtf8( script_ptr: *const u8, script_len: usize ) -> i32 { /* ... */ } #[no_mangle] pub extern "C" fn Hako_Retain(handle: usize) { /* ... */ } #[no_mangle] pub extern "C" fn Hako_Release(handle: usize) { /* ... */ } #[no_mangle] pub extern "C" fn Hako_ToUtf8( handle: usize, out_ptr: *mut *const u8, out_len: *mut usize ) { /* ... */ } #[no_mangle] pub extern "C" fn Hako_LastError( out_ptr: *mut *const u8, out_len: *mut usize ) { /* ... */ } ``` **それ以外のすべてはHakorune実装**: ``` Hakorune実装: - VM (MiniVmBox) - Parser (MirJsonBuilderBox) - Collections (MapBox, ArrayBox) - GC (GcBox) - Standard library (StringBox, IntegerBox, etc.) ``` --- ## ✅ 成功基準 ### Phase E (GC v0) - [ ] GC v0動作(メモリリークなし) - [ ] Mark & Sweep正常動作 - [ ] GC Roots正しく検出(stack, global, handles) - [ ] メトリクス収集機能動作 - [ ] `HAKO_GC_TRACE=1` で詳細ログ出力 ### Phase F (Rust VM Deprecation) - [ ] Hakorune-VMがデフォルトバックエンド - [ ] Rust-VM非推奨(警告表示) - [ ] Bit-identical self-compilation(Hako₁ == Hako₂ == Hako₃) - [ ] CI daily verification動作 - [ ] Rust層 ≤ 100行(HostBridge APIのみ) ### 総合 - [ ] **True Self-Hosting**: Hakorune IS Hakorune - [ ] すべてのスモークテストPASS(Hakorune-VM使用) - [ ] ドキュメント完備(GC設計、HostBridge API spec) --- ## 🎯 マイルストーン ### Week 1-2: GC Mark Phase - [ ] GC Roots実装(stack, global, handles) - [ ] Mark algorithm実装 - [ ] 基本トレース機能 ### Week 3-4: GC Sweep Phase & Metrics - [ ] Sweep algorithm実装 - [ ] メトリクス収集機構 - [ ] `HAKO_GC_TRACE=1` 実装 - [ ] GC統合テスト ### Week 5: Rust VM Deprecation - [ ] `--backend vm` デフォルト化 - [ ] `--backend vm-rust` 警告追加 - [ ] ドキュメント更新 ### Week 6: Bit-Identical Verification - [ ] Self-compilation chain実装 - [ ] CI verification追加 - [ ] Rust layer audit(≤ 100行確認) - [ ] 最終ドキュメント更新 --- ## 📊 実装戦略 ### GC実装原則 1. **Simplicity First**: 最小限の実装(Generational/Incremental不要) 2. **Correctness**: メモリリーク完全排除 3. **Observability**: `HAKO_GC_TRACE=1` で動作可視化 4. **Fail-Fast**: 不正なGC状態は即座にpanic ### Rust VM Deprecation原則 1. **Backward Compatibility**: `--backend vm-rust` で継続使用可能 2. **Clear Warning**: 非推奨警告を明示 3. **Golden Tests**: Rust-VM vs Hakorune-VM parity維持 4. **Documentation**: 移行ガイド提供 --- ## 🔗 関連ドキュメント - **Phase 20.7 (Collections)**: [phase-20.7/README.md](../phase-20.7/README.md) - **Phase 15.80 (VM Core)**: [phase-15.80/README.md](../phase-15.80/README.md) - **Pure Hakorune Roadmap**: [phase-20.5/PURE_HAKORUNE_ROADMAP.md](../phase-20.5/PURE_HAKORUNE_ROADMAP.md) - **HostBridge API**: [phase-20.5/HOSTBRIDGE_API_DESIGN.md](../phase-20.5/HOSTBRIDGE_API_DESIGN.md) --- ## 🎉 最終成果物 Phase 20.8完了後の状態: ``` Rust層(~100行): ├── host_bridge.rs # C-ABI functions └── (end) Hakorune層(すべて): ├── apps/selfhost-compiler/ # Compiler ├── src/runtime/ # VM (MiniVmBox) ├── plugins/ # Collections, GC, stdlib └── (everything else) ``` **これにより達成**: - **True Self-Hosting**: Hakorune IS Hakorune - **Rust=floor, Hakorune=house**: Rust層最小化完了 - **完全自律**: メモリ管理もHakorune実装 --- **ステータス**: 未開始 **開始予定**: 2026-07-20 **完了予定**: 2026-08-30 **依存関係**: Phase 20.7 完了必須