Files
hakorune/docs/archive/cleanup/QUICK_REFERENCE.md
nyash-codex 2dfe363365 refactor(joinir): Phase 242-EX-A - Delete legacy Pattern3 lowerer
Remove hardcoded Pattern3 PoC implementation (loop_with_if_phi_minimal.rs)
and enhance if-sum mode to handle complex conditions like `i % 2 == 1`.

Key changes:
- condition_pattern.rs: Accept BinaryOp in comparison operands (+58 lines)
- loop_with_if_phi_if_sum.rs: Dynamic complex condition lowering (+147 lines)
- pattern3_with_if_phi.rs: Remove lower_pattern3_legacy() (-130 lines)
- loop_with_if_phi_minimal.rs: Delete entire file (-437 lines)
- loop_patterns/with_if_phi.rs: Update stub (-45 lines)
- mod.rs: Remove module reference (-4 lines)

Net reduction: -664 lines of hardcoded PoC code

Test results: 909/909 PASS (legacy mode completely removed)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-11 01:27:08 +09:00

195 lines
4.7 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.

Status: Historical
# 重複コード削減 - クイックリファレンスカード
## 📊 一目で分かる状況
```
現状: 3,335行Handlers
Phase 1実装後: 2,965行 (-11%)
Phase 2実装後: 2,715行 (-19%)
Phase 3実装後: 2,415行 (-28%)
```
---
## 🎯 Phase 1: 今すぐできる改善5-8時間
### 3つのヘルパー関数
#### 1. Destination書き込み (49箇所 → 1行化)
```rust
// ❌ Before (3-4行)
if let Some(d) = dst {
this.regs.insert(d, VMValue::from_nyash_box(ret));
}
// ✅ After (1行)
this.write_box_result(dst, ret);
```
#### 2. 引数検証 (55箇所 → 1行化)
```rust
// ❌ Before (3行)
if args.len() != 1 {
return Err(VMError::InvalidInstruction("push expects 1 arg".into()));
}
// ✅ After (1行)
this.validate_args_exact("push", args, 1)?;
```
#### 3. Receiver変換 (5箇所 → 1行化)
```rust
// ❌ Before (4行)
let recv_box = match recv.clone() {
VMValue::BoxRef(b) => b.share_box(),
other => other.to_nyash_box(),
};
// ✅ After (1行)
let recv_box = this.convert_to_box(&recv);
```
---
## 📂 実装する新ファイル
```
src/backend/mir_interpreter/utils/
├── mod.rs # モジュール定義
├── register_ops.rs # write_result, write_void, etc.
├── validation.rs # validate_args_exact, validate_args_range
└── conversions.rs # convert_to_box
```
---
## ✅ 実装チェックリスト
### ステップ1: インフラ (1-2時間)
- [ ] `utils/` ディレクトリ作成
- [ ] 3つのファイル実装register_ops, validation, conversions
- [ ] ユニットテスト追加
- [ ] コンパイル&テスト確認
### ステップ2: Handler更新 (3-5時間)
小→大の順で1ファイルずつ
- [ ] `boxes_array.rs` (63行 → 50行)
- [ ] `boxes_map.rs` (134行 → 110行)
- [ ] `boxes_string.rs` (208行 → 170行)
- [ ] `boxes_plugin.rs` (217行 → 180行)
- [ ] `boxes_instance.rs` (153行 → 125行)
- [ ] `boxes_object_fields.rs` (399行 → 330行)
- [ ] `boxes.rs` (307行 → 250行)
- [ ] `calls.rs` (907行 → 750行)
各更新後: コンパイル → テスト → コミット
### ステップ3: 検証 (1時間)
- [ ] 古いパターン残存確認
- [ ] スモークテスト実行
- [ ] ドキュメント更新
---
## 🔍 確認コマンド
```bash
# 重複パターン検索
grep -rn "if let Some(d) = dst { this.regs.insert" src/backend/mir_interpreter/handlers/
grep -rn "args.len() !=" src/backend/mir_interpreter/handlers/
grep -rn "match recv.clone()" src/backend/mir_interpreter/handlers/
# Phase 1実装後残存チェック
grep -rn "if let Some(d) = dst { this.regs.insert" src/backend/mir_interpreter/handlers/ | wc -l
# → 0になるはず
# テスト実行
./tools/jit_smoke.sh
# 変更行数確認
git diff --stat
```
---
## 📈 期待される効果
| 指標 | Before | After | 改善 |
|-----|--------|-------|------|
| 行数 | 3,335 | 2,965 | -11% |
| 重複箇所 | 260 | 109 | -58% |
| 保守対象 | 散在 | 3ヶ所 | 集約 |
---
## 💡 実装のコツ
1. **最小ファイルから**: `boxes_array.rs` (63行) がおすすめ
2. **1ファイルずつ**: 都度テストして確実に
3. **コピペOK**: 実装ガイドのコードをそのまま使える
4. **小さなPR**: レビュー負荷を軽減
---
## 🚨 トラブルシューティング
### コンパイルエラー「method not found」
```rust
// src/backend/mir_interpreter/mod.rs に追加
mod utils;
```
### テストエラー「MirInterpreter::new_for_test not found」
```rust
// テスト用ビルダー関数を追加
#[cfg(test)]
impl MirInterpreter {
fn new_for_test() -> Self { /* ... */ }
}
```
---
## 📚 詳細ドキュメント
- **実装手順**: [`PHASE1_IMPLEMENTATION_GUIDE.md`](./PHASE1_IMPLEMENTATION_GUIDE.md)
- **詳細分析**: [`DUPLICATION_ANALYSIS_REPORT.md`](./DUPLICATION_ANALYSIS_REPORT.md)
- **全体サマリー**: [`CLEANUP_SUMMARY_2025-11-06.md`](./CLEANUP_SUMMARY_2025-11-06.md)
---
## 🎯 今日から始める
```bash
# 1. ドキュメント確認5分
cat docs/development/cleanup/PHASE1_IMPLEMENTATION_GUIDE.md
# 2. ディレクトリ作成1分
mkdir -p src/backend/mir_interpreter/utils
# 3. ファイル作成実装1-2時間
touch src/backend/mir_interpreter/utils/{mod,register_ops,validation,conversions}.rs
# → 実装ガイドからコピペ
# 4. 最小ファイルで試す30分
# → boxes_array.rs を更新
# 5. テスト実行5分
./tools/jit_smoke.sh
# 6. 残りのファイルも順次更新2-4時間
```
---
**所要時間**: 5-8時間
**リスク**: 低
**効果**: 高270-380行削減
今すぐ始めましょう! 🚀