Files
hakorune/docs/private/roadmap/phases/phase-20.24

Phase 20.24 — Parser削除Instant Value Delivery

期間: 1-2ヶ月 ステータス: 計画更新Rust Floor方針に整合 前提条件: Phase 20.23Arc/RefCell完了


🎯 Executive Summary

Purpose: Rust Parser/AST を削除し、Hakorune Parser に完全移行。

Key Benefit: 即座の価値提供 - 最も安全で最も早く結果が出るフェーズ

Why Parser First?

観点 Parser削除 Box System削除
リスク 超低(完全重複) ⚠️ 中(複雑な依存)
ブロッカー なし Arc/RefCell必須
削減行数 -10,500行 -2,393行
検証容易性 高(既存テスト) ⚠️ 中(新規テスト必要)
ロールバック 1 commit revert ⚠️ 複雑

結論: Parser を先に削除することで、早期に大幅な削減を達成し、プロジェクトの勢いを維持。


📊 削減内容

Target Files-10,500行

src/parser/              -6,000 lines  ← 完全重複lang/src/compiler/parser/
src/ast/                 -4,500 lines  ← 完全重複lang/src/compiler/ast/
────────────────────────────────────────
Total:                  -10,500 lines  ← 全体の 9.0% 削減

Duplication Verification

Rust Parser: src/parser/ (6,000 lines)

// src/parser/statement.rs
pub fn parse_statement(&mut self) -> Result<Statement> { /* ... */ }

// src/parser/expression.rs
pub fn parse_expression(&mut self) -> Result<Expression> { /* ... */ }

Hakorune Parser: lang/src/compiler/parser/ (完全実装済み)

// lang/src/compiler/parser/statement_parser.hako
static box StatementParser {
  parse_statement() { /* ... */ }
}

// lang/src/compiler/parser/expression_parser.hako
static box ExpressionParser {
  parse_expression() { /* ... */ }
}

検証結果: 完全重複、機能的パリティ達成済み


🏗️ Implementation PlanRust Floor 整合)

Month 1: Gate Implementation & Validation

Week 1: Gate Infrastructureゲート機構構築

実装内容CLI先行・ENVは補助:

// src/cli/mod.rs

#[derive(Debug)]
pub enum ParserBackend {
    Rust,      // Legacy (default for now)
    Hakorune,  // New (opt-in)
}

// CLI: --parser=rust|hakoENVは HAKO_PARSER_BACKEND=rust|hako をエイリアス)
pub fn get_parser_backend() -> ParserBackend {
    if let Some(v) = cli_opts.parser_backend() { return v; }
    match env::var("HAKO_PARSER_BACKEND").ok().as_deref() {
        Some("hako") => ParserBackend::Hakorune,
        _ => ParserBackend::Rust,
    }
}

// src/main.rs
fn run_compiler(args: &Args) -> Result<()> {
    match get_parser_backend() {
        ParserBackend::Rust => {
            // Existing path
            let ast = parser::parse(&source)?;
            // ...
        }
        ParserBackend::Hakorune => {
            // NEW path — Stage1 JSON → FlowEntryBox → MIR(JSON)
            // Avoid AST deserialize in Rust; use existing selfhost pipeline entry
            let stage1 = call_hakorune_stage1_json(&source)?;
            let mir = call_flow_entry_emit(&stage1, prefer_cfg = 0)?;
            // downstream keeps operating on MIR(JSON)
        }
    }
}

Tasks:

  • HAKO_USE_RUST_PARSER 環境変数追加
  • Parser backend selection logic
  • Hakorune parser plugin call infrastructure
  • AST JSON serialization/deserialization
  • Floor crates scaffoldcrates/floor-parser, crates/floor-ast)追加(責務/ガード/READMEのみ、未配線
  • Default flip: CLI未指定時は既定で hakoFailFast; TTL HAKO_PARSER_AUTO_FALLBACK=1 でレガシー降格可)

Acceptance:

  • --parser=hako(または HAKO_PARSER_BACKEND=hako)で Hakorune 経路
  • 既定は Rust互換。反転は quick/integration が緑で1リリース観測後
  • 比較対象は AST ではなく Stage1 JSON と MIR(JSON) の形状(パリティ)

Week 2-3: Full Smoke Test Validation

Testing Strategy:

# Phase 1: Core smoke testsquick profile
HAKO_USE_RUST_PARSER=0 tools/smokes/v2/run.sh --profile quick

# Phase 2: Integration testsintegration profile
HAKO_USE_RUST_PARSER=0 tools/smokes/v2/run.sh --profile integration

# Phase 3: Full test suiteall profiles
HAKO_USE_RUST_PARSER=0 tools/smokes/v2/run.sh --profile all

Expected Results:

  • quick: 100% PASS~100 tests, 1-2分
  • integration: 100% PASS~200 tests, 5-10分
  • all: 100% PASS296 tests, 15-30分

Failure Handling:

  • Zero tolerance: 1つでも失敗 → Week 3 で原因調査・修正
  • Parity verification: AST diff で Rust vs Hakorune 完全一致確認

Week 4: CI Integration & Documentation

CI Setup:

# .github/workflows/parser_parity.yml
name: Parser Parity Check
on: [push, pull_request]
jobs:
  verify:
    runs-on: ubuntu-latest
    steps:
      - name: Test Rust Parser
        run: tools/smokes/v2/run.sh --profile quick

      - name: Test Hakorune Parser
        env:
          HAKO_USE_RUST_PARSER: 0
        run: tools/smokes/v2/run.sh --profile quick

      - name: Compare AST outputs
        run: |
          diff rust_ast.json hakorune_ast.json || exit 1

Documentation:

  • Migration guide: Rust Parser → Hakorune Parser
  • Troubleshooting: よくある問題と対処法
  • Performance comparison: 速度・メモリ使用量
  • Rollback plan: 問題発生時の切り戻し手順

Month 2: Deletion & Cleanup

Week 1: Default Flipデフォルト切り替え

Change default backend:

// src/cli/mod.rs
pub fn get_parser_backend() -> ParserBackend {
    match env::var("HAKO_USE_RUST_PARSER") {
        Ok(val) if val == "1" => ParserBackend::Rust,  // Opt-in (legacy)
        _ => ParserBackend::Hakorune,  // NEW DEFAULT ✅
    }
}

Deprecation Warning:

fn run_compiler(args: &Args) -> Result<()> {
    if matches!(get_parser_backend(), ParserBackend::Rust) {
        eprintln!("Warning: Rust parser is deprecated and will be removed in Phase 20.25.");
        eprintln!("         Use Hakorune parser (default) or set HAKO_USE_RUST_PARSER=0.");
    }
    // ...
}

Tasks:

  • Flip default: Hakorune parser が標準
  • Deprecation warning 追加
  • Documentation 更新default 変更通知)

Week 2: Archive → Deletion段階削除

Deletion targets:

# Backup first (safety)
git tag phase-20.24-pre-deletion
git branch backup/rust-parser

# Delete parser
mv src/parser/ archive/legacy/parser/
mv src/ast/    archive/legacy/ast/
# 参照ゼロをCIで確認し、1リリース後に完全削除

# Update imports
# Remove all `use crate::parser::*` references
# Remove all `use crate::ast::*` references

Affected files (~50 files need import cleanup):

  • src/main.rs
  • src/cli/*.rs
  • src/mir/builder.rs
  • Tests: tests/**/*.rs

Tasks:

  • Git tag/branch for safety
  • Delete src/parser/ and src/ast/
  • Remove imports50ファイル
  • Cargo.toml dependency cleanup
  • Full rebuild & test

Week 3: Integration Testing

Validation:

# Clean build
cargo clean
cargo build --release

# Full smoke test suite
tools/smokes/v2/run.sh --profile all

# Regression tests
cargo test --all

# Performance benchmark
tools/bench_unified.sh --backend all --warmup 10 --repeat 50

Expected:

  • Build success: No compilation errors
  • Tests: 100% PASS296/296
  • Performance: No regression±5% 許容)
  • Binary size: -500KB reduction目安

Week 4: Documentation & Rollback Plan

Documentation Updates:

  • CHANGELOG.md: Parser deletion 記録
  • README.md: "Hakorune Parser only" 明記
  • Architecture docs: Parser flow diagram 更新
  • Migration guide: 完全版

Rollback Plan:

# If critical issue found
git revert <deletion_commit>
git cherry-pick backup/rust-parser

# Or restore from tag
git checkout phase-20.24-pre-deletion
git checkout -b phase-20.24-rollback

Final Checks:

  • All CI passing
  • Documentation complete
  • Rollback testeddry run
  • Phase 20.24 completion announcement

受け入れ基準Acceptance Criteria

Functional Requirements

  • Rust Parser 完全削除: src/parser/, src/ast/ 不存在
  • Hakorune Parser デフォルト: HAKO_USE_RUST_PARSER 不要
  • 全テスト PASS: 296/296 smoke tests
  • Parity 検証: Rust vs Hakorune AST 完全一致Month 1 で確認済み)

Performance Requirements

  • Parse speed: ±10% 以内regression なし)
  • Memory usage: ±10% 以内
  • Binary size: -500KB 削減(目安)

Safety Requirements

  • Rollback tested: Git tag からの復元成功
  • Backup branch: backup/rust-parser 存在
  • CI verification: Parser parity check 毎日実行

Documentation Requirements

  • Migration guide: Rust → Hakorune 完全版
  • Architecture update: Parser flow 最新化
  • CHANGELOG: 削除内容明記
  • Rollback plan: 手順書完備

🚨 リスク分析と軽減策

Risk Matrix

リスク 確率 影響 軽減策
Hakorune parser バグ Month 1 で徹底検証296 tests
Import 削除ミス Cargo build check + CI
Performance 劣化 Benchmark driven + rollback
Rollback 失敗 極低 Git tag + backup branch
依存関係見落とし Cargo check --all-targets

Mitigation Strategies

  1. Extensive Testing: Month 1 で 100% テスト通過確認
  2. Git Safety Net: Tag + branch で即座に復元可能
  3. Incremental Approach: Week 1 gate → Week 2 flip → Week 3 delete
  4. CI Automation: 毎日 parser parity check
  5. Documentation First: 問題発生前に rollback plan 完備

📈 Timeline Visualization

Month 1: Gate & Validation
├─ Week 1: Gate infrastructure     [████░░░░] HAKO_USE_RUST_PARSER=0
├─ Week 2-3: Full smoke testing    [████████] 296/296 PASS
└─ Week 4: CI + Documentation      [████░░░░] Parity check automation

Month 2: Deletion & Cleanup
├─ Week 1: Default flip            [████░░░░] Hakorune default
├─ Week 2: File deletion           [████████] -10,500 lines ⚡
├─ Week 3: Integration testing     [████████] 100% PASS
└─ Week 4: Docs & Rollback plan    [████░░░░] Completion ✅

Total Duration: 8 weeks = 2 months


💡 Strategic Value戦略的価値

Immediate Benefits

  1. Codebase Size: -10,500 lines-9.0%
  2. Maintenance Burden: Parser を1つに統一
  3. Confidence Boost: 大幅削減を早期達成
  4. Risk Reduction: 最も安全なフェーズから開始

Long-term Impact

  • Phase 20.25 準備: Parser 削除成功 → MIR Builder 削除への道筋
  • Community Trust: 計画通り進行でステークホルダー信頼獲得
  • Momentum: 早期成功でチーム士気向上

Comparison with Alternative Orders

Option A: Arc/RefCell First, Parser SecondThis Plan

Phase 20.23: Arc/RefCell (2-3 weeks)   ← Low risk, foundation
Phase 20.24: Parser削除 (1-2 months)    ← Instant value ⚡
Total: ~3 months

Option B: Parser First, Arc/RefCell Second

Phase 20.23: Parser削除 (1-2 months)    ← Instant value ⚡
Phase 20.24: Arc/RefCell (2-3 weeks)   ← Low risk, foundation
Total: ~3 months

Option C: Parallel Tracks

Track A: Arc/RefCell + Box System (3-5 months)
Track B: Parser + MIR Builder (4-8 months)
Total: 4-8 months (higher coordination overhead)

Recommendation: Option AThis Plan

  • Arc/RefCell は Box System の基盤Phase 20.25 で必須)
  • Parser 削除は独立しており Arc/RefCell 不要
  • 順序: Foundation → Value の自然な流れ

🔗 関連ドキュメント


🎉 Expected Outcome期待される成果

Before Phase 20.24

src/                    99,406 lines (85.1%)
├── parser/              6,000 lines ❌
├── ast/                 4,500 lines ❌
├── mir/                13,635 lines
└── other/              75,271 lines

After Phase 20.24

src/                    88,906 lines (76.1%) ✅
├── parser/              (DELETED)     -6,000 lines ⚡
├── ast/                 (DELETED)     -4,500 lines ⚡
├── mir/                13,635 lines
└── other/              75,271 lines

Total reduction: -10,500 lines (-9.0%)

Key Achievement: 10% codebase reduction in 2 months


ステータス: 未開始 開始可能条件: Phase 20.23Arc/RefCell完了 期間: 1-2ヶ月8週間 次フェーズ: Phase 20.25Box System + MIR Builder削除