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

450 lines
14 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.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)
```rust
// 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/` (完全実装済み)
```hakorune
// 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は補助**:
```rust
// 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
- [x] Floor crates scaffold`crates/floor-parser`, `crates/floor-ast`)追加(責務/ガード/READMEのみ、未配線
- [x] Default flip: CLI未指定時は既定で `hako`FailFast; 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**:
```bash
# 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**:
```yaml
# .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**:
```rust
// 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**:
```rust
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**:
```bash
# 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**:
```bash
# 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**:
```bash
# 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 A**This Plan
- Arc/RefCell は Box System の基盤Phase 20.25 で必須)
- Parser 削除は独立しており Arc/RefCell 不要
- 順序: Foundation → Value の自然な流れ
---
## 🔗 関連ドキュメント
- **Phase 20.23**: [Arc/RefCell in Hakorune](../phase-20.23/README.md) - 前提フェーズ
- **Phase 20.25**: [Box System + MIR Builder削除](../phase-20.25/README.md) - 次のフェーズ
- **Rust Removal Roadmap**: [rust-removal-comprehensive-roadmap.md](../../../development/analysis/rust-removal-comprehensive-roadmap.md)
- **Parser Design**: `lang/src/compiler/parser/README.md` - Hakorune Parser 仕様
---
## 🎉 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削除