Files
hakorune/docs/private/roadmap/phases/phase-20.8/README.md

300 lines
7.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Phase 20.8: GC + Rust Deprecation
**期間**: 6週間2026-07-20 → 2026-08-30
**ステータス**: 未開始
**前提条件**: Phase 20.7Collections 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. HandleRegistryC-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 VMRust 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 MinimizationRust層最小化
最終的な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-compilationHako₁ == Hako₂ == Hako₃
- [ ] CI daily verification動作
- [ ] Rust層 ≤ 100行HostBridge APIのみ
### 総合
- [ ] **True Self-Hosting**: Hakorune IS Hakorune
- [ ] すべてのスモークテストPASSHakorune-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 完了必須