Files
hakorune/docs/development/cleanup/QUICK_REFERENCE.md
nyash-codex 0455307418 refactor(phase-a): remove Cranelift/JIT backend legacy code (~373 lines)
Phase A cleanup - Safe deletions with zero risk:

## Deleted Files (6 files, 373 lines total)
1. Cranelift/JIT Backend (321 lines):
   - src/runner/modes/cranelift.rs (45 lines)
   - src/runner/modes/aot.rs (55 lines)
   - src/runner/jit_direct.rs (152 lines)
   - src/tests/core13_smoke_jit.rs (42 lines)
   - src/tests/core13_smoke_jit_map.rs (27 lines)

2. Legacy MIR Builder (52 lines):
   - src/mir/builder/exprs_legacy.rs
   - Functionality inlined into exprs.rs (control flow constructs)

## Module Reference Cleanup
- src/backend/mod.rs: Removed cranelift feature gate exports
- src/runner/mod.rs: Removed jit_direct module reference
- src/runner/modes/mod.rs: Removed aot module reference
- src/mir/builder.rs: Removed exprs_legacy module

## Impact Analysis
- Build: Success (cargo build --release)
- Tests: All passing
- Risk Level: None (feature already archived, code unused)
- Related: Phase 15 JIT archival (archive/jit-cranelift/)

## BID Copilot Status
- Already removed in previous cleanup
- Not part of this commit

Total Reduction: 373 lines (~0.4% of codebase)
Next: Phase B - Dead code investigation

Related: #phase-21.0-cleanup
Part of: Legacy Code Cleanup Initiative
2025-11-06 22:34:18 +09:00

193 lines
4.6 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.

# 重複コード削減 - クイックリファレンスカード
## 📊 一目で分かる状況
```
現状: 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行削減
今すぐ始めましょう! 🚀