Files
hakorune/docs/development/cleanup/DUPLICATION_INDEX.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

298 lines
9.0 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.

# コードベース重複・共通化調査 - インデックス
Hakorune Rustコードベースにおける重複コードの特定と、DRY原則に基づく改善計画のドキュメントハブです。
**調査日**: 2025-11-06
**実施**: Claude Code Agent
**調査種別**: 重複パターン分析・共通化機会の特定
---
## 📚 ドキュメント一覧
### 🎯 まず読むべきドキュメント
1. **[クイックリファレンス](./QUICK_REFERENCE.md)** ⭐ おすすめ
- 1ページで全体像を把握
- Before/After コード例
- 今すぐ始められる実装手順
2. **[実行サマリー](./CLEANUP_SUMMARY_2025-11-06.md)**
- エグゼクティブサマリー
- 数値で見る重複の実態
- Q&A
### 📖 詳細ドキュメント
3. **[詳細分析レポート](./DUPLICATION_ANALYSIS_REPORT.md)**
- 9章構成の包括的分析
- 全重複パターンの詳細
- リスク評価と期待効果
- 付録(ファイルサイズ一覧)
4. **[Phase 1実装ガイド](./PHASE1_IMPLEMENTATION_GUIDE.md)**
- Step-by-Step実装手順
- コピペで使えるコード例
- テスト戦略
- トラブルシューティング
---
## 🎯 調査結果サマリー
### 重複の規模
- **総重複箇所**: 260箇所以上
- **削減可能行数**: 500-800行15-20%削減)
- **優先対応**: Phase 1で270-380行削減可能
### 主要な重複パターンTop 5
| パターン | 箇所数 | 削減見込み | 優先度 |
|---------|--------|----------|--------|
| Destination書き込み | 49 | 150-200行 | ⭐⭐⭐ 最高 |
| 引数検証 | 55 | 100-150行 | ⭐⭐ 高 |
| エラー生成 | 95 | 200-300行 | ⭐⭐⭐ 最高 |
| Receiver変換 | 5 | 20-30行 | ⭐⭐ 高 |
| PHI挿入 | 13 | 50-100行 | ⭐ 中 |
---
## 🚀 アクションプラン
### Phase 1: 即効対応(推奨: 即時実施)
**目標**: 低リスク・高効果のヘルパー関数実装
- **期間**: 5-8時間
- **削減**: 270-380行
- **リスク**: 低
- **詳細**: [Phase 1実装ガイド](./PHASE1_IMPLEMENTATION_GUIDE.md)
**実装内容**:
1. Destination書き込みヘルパー`write_result`, `write_void` など)
2. 引数検証ヘルパー(`validate_args_exact`, `validate_args_range`
3. Receiver変換ヘルパー`convert_to_box`
### Phase 2: 基盤整備Phase 1完了後
**目標**: エラー処理とPHI挿入の統一
- **期間**: 5-7時間
- **削減**: 250-400行
- **リスク**: 低
### Phase 3: 抜本改革(将来課題)
**目標**: Box Handler群の統合
- **期間**: 1-2週間
- **削減**: 300-400行
- **リスク**: 中-高
---
## 📈 期待される効果
### 定量的効果
```
現状: 3,335行Handlers
↓ Phase 1
2,965行 (-11%, -370行)
↓ Phase 2
2,715行 (-19%, -620行)
↓ Phase 3
2,415行 (-28%, -920行)
```
### 定性的効果
- ✅ 保守性向上変更が1箇所で完結
- ✅ 可読性向上(意図が明確な関数名)
- ✅ バグ削減(共通ロジックの一元管理)
- ✅ 開発速度向上(ボイラープレート削減)
- ✅ テスト容易性(単体テストで広範囲カバー)
---
## 📂 対象ファイル
### MIR Interpreter Handlers重複集中エリア
```
src/backend/mir_interpreter/handlers/
├── arithmetic.rs (136行)
├── boxes.rs (307行) ← 重複多
├── boxes_array.rs (63行) ← 重複多
├── boxes_instance.rs (153行) ← 重複多
├── boxes_map.rs (134行) ← 重複多
├── boxes_object_fields.rs (399行) ← 重複多
├── boxes_plugin.rs (217行) ← 重複多
├── boxes_string.rs (208行) ← 重複多
├── boxes_void_guards.rs (21行)
├── call_resolution.rs (89行)
├── calls.rs (907行) ← 最大ファイル
├── extern_provider.rs (298行)
├── externals.rs (218行)
├── memory.rs (47行)
├── misc.rs (31行)
└── mod.rs (107行)
合計: 3,335行
```
### 新規作成ファイルPhase 1
```
src/backend/mir_interpreter/utils/
├── mod.rs
├── register_ops.rs # Destination書き込み
├── validation.rs # 引数検証
└── conversions.rs # 型変換
```
---
## 💡 実装のヒント
### Before/After 例
#### 例1: ArrayBox.push メソッド
```rust
// ❌ Before (6行)
"push" => {
if args.len() != 1 {
return Err(VMError::InvalidInstruction("push expects 1 arg".into()));
}
let val = this.reg_load(args[0])?.to_nyash_box();
let _ = ab.push(val);
if let Some(d) = dst {
this.regs.insert(d, VMValue::Void);
}
return Ok(true);
}
// ✅ After (4行, 33%削減)
"push" => {
this.validate_args_exact("push", args, 1)?;
let val = this.reg_load(args[0])?.to_nyash_box();
let _ = ab.push(val);
this.write_void(dst);
return Ok(true);
}
```
### 実装の流れ
1. ユーティリティ関数実装1-2時間
2. 最小ファイルで試す30分
3. 残りのファイルを順次更新3-5時間
4. 検証ドキュメント更新1時間
---
## 🔍 確認コマンド
```bash
# 重複パターン検索
cd /home/tomoaki/git/hakorune-selfhost
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/
# ファイルサイズ確認
wc -l src/backend/mir_interpreter/handlers/*.rs | sort -rn
# Phase 1実装後の検証
./tools/jit_smoke.sh
git diff --stat
```
---
## 📊 進捗管理
### Phase 1チェックリスト
#### インフラ構築
- [ ] `utils/` ディレクトリ作成
- [ ] `register_ops.rs` 実装
- [ ] `validation.rs` 実装
- [ ] `conversions.rs` 実装
- [ ] ユニットテスト追加
- [ ] コンパイル&テスト確認
#### Handler更新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行)
#### 最終検証
- [ ] 重複パターン残存確認
- [ ] スモークテスト実行
- [ ] ドキュメント更新
- [ ] Phase 2計画
---
## 🎓 学んだこと
### 重複パターンの発見方法
1. 同じようなコードブロックを探すgrep活用
2. 関数シグネチャの類似性をチェック
3. エラーメッセージパターンを調査
4. ファイルサイズ比較(大きいファイルは重複の宝庫)
### 効果的な共通化のポイント
1. **小さく始める**: 最も単純なパターンから
2. **段階的移行**: 一度に全部変えない
3. **テストファースト**: ヘルパー関数のテストを先に
4. **1ファイルずつ**: 都度テストして確実に
### リスク管理
1. **並行期間**: 新旧コードを共存させる
2. **回帰テスト**: 各変更後にスモークテスト
3. **小さなPR**: レビュー負荷を軽減
4. **ロールバック可能**: いつでも戻せる設計
---
## 📞 サポート
### 質問・相談
- **実装で困ったら**: [Phase 1実装ガイド](./PHASE1_IMPLEMENTATION_GUIDE.md) のトラブルシューティングを参照
- **全体像が知りたい**: [実行サマリー](./CLEANUP_SUMMARY_2025-11-06.md) を参照
- **詳細な分析結果**: [詳細分析レポート](./DUPLICATION_ANALYSIS_REPORT.md) を参照
### 次のステップ
1. [クイックリファレンス](./QUICK_REFERENCE.md) を読む5分
2. [Phase 1実装ガイド](./PHASE1_IMPLEMENTATION_GUIDE.md) に従って実装開始5-8時間
3. Phase 1完了後、Phase 2を計画
---
## 📅 履歴
- **2025-11-06**: 初版作成Claude Code Agent による調査完了)
- 重複パターン260箇所を特定
- Phase 1-3のアクションプラン策定
- 実装ガイド作成
---
## 📌 クイックリンク
### 今すぐ始める
1. 📖 [クイックリファレンス](./QUICK_REFERENCE.md) - 1ページで全体把握
2. 🔧 [Phase 1実装ガイド](./PHASE1_IMPLEMENTATION_GUIDE.md) - コピペで実装開始
3. ✅ チェックリスト上記の「Phase 1チェックリスト」
### 詳細を知る
4. 📊 [実行サマリー](./CLEANUP_SUMMARY_2025-11-06.md) - 数値と効果
5. 📚 [詳細分析レポート](./DUPLICATION_ANALYSIS_REPORT.md) - 包括的分析
### 関連リソース(別プロジェクト)
- [README.md](./README.md) - レガシーコード削除プロジェクト
- [Phase 2レポート](./PHASE2_REPORT_2025-11-04.md) - 既存の整理作業
---
**次のアクション**: [クイックリファレンス](./QUICK_REFERENCE.md) を読んで、Phase 1実装を開始しましょう🚀
**注意**: このドキュメントは「重複コード・共通化」に関する調査です。「レガシーコード削除」については [README.md](./README.md) を参照してください。