Files
hakorune/docs/archive/cleanup/LEGACY_CODE_INVESTIGATION_REPORT.md

494 lines
15 KiB
Markdown
Raw Permalink Normal View History

Status: Historical
# Hakorune Legacy Code Investigation Report
**調査日**: 2025-11-06
**Phase**: 20.46 (Phase 21.0完成後)
**調査対象**: 削除可能なレガシーコード、デッドコード、不要な機能
---
## 📊 Executive Summary
- **総Rustファイル数**: 618ファイル
- **#[allow(dead_code)]**: 76箇所
- **レガシーコード推定**: 約10,000行 (全体の約10%)
- **削除推奨**: 約5,000〜7,000行 (段階的削除)
---
## 🎯 カテゴリ別分析
### 1. ⚠️ Cranelift/JITバックエンド (高優先度・Safe削除)
**状態**: Phase 15でアーカイブ済み (`archive/jit-cranelift/`)
**問題**: 本体コードに参照が残存
#### 影響範囲
- **参照ファイル数**: 27ファイル
- **feature gate**: `cranelift-jit` (Cargo.tomlで既にコメントアウト済み)
- **推定削除可能行数**: 約1,500〜2,000行
#### 主要ファイル
##### 削除推奨 (Safe)
```
src/runner/modes/cranelift.rs (46行) - Safe削除
src/runner/modes/aot.rs (66行) - Safe削除 (cranelift feature依存)
src/runner/jit_direct.rs (推定200行) - Safe削除
src/tests/core13_smoke_jit.rs (約100行) - Safe削除
src/tests/core13_smoke_jit_map.rs (約100行) - Safe削除
src/tests/identical_exec*.rs (7ファイル) - feature gateで無効化済み
src/tests/policy_mutdeny.rs (206行) - 一部cranelift依存
```
##### 要検証 (Investigate)
```
src/backend/mod.rs:29-52 - cranelift再エクスポート (削除可能)
src/backend/aot/ - AOTコンパイル機能 (WASM依存, 要確認)
src/runner/dispatch.rs - cranelift分岐 (削除可能)
src/cli/args.rs - --backend cranelift オプション (削除可能)
```
#### 推奨アクション
1. **Phase 1**: feature gate確認・テストファイル削除 (Safe, 約500行)
2. **Phase 2**: runner/modesのcranelift.rs削除 (Safe, 約200行)
3. **Phase 3**: backend/mod.rs再エクスポート削除 (Safe, 約30行)
4. **Phase 4**: 残存参照の完全削除 (要テスト, 約1,000行)
**削除時影響**: 無し (feature既に削除済み、ビルドエラーなし)
---
### 2. 🌐 WASMバックエンド (低優先度・要確認)
**状態**: Feature-gated (`wasm-backend`), 使用頻度不明
#### 影響範囲
- **ディレクトリ**: `src/backend/wasm/`, `src/backend/wasm_v2/`, `src/backend/aot/`
- **総行数**: 約3,170行
- **ディスクサイズ**: 140KB
- **参照ファイル数**: 8ファイル
#### 主要ファイル
```
src/backend/wasm/codegen.rs (851行)
src/backend/wasm/memory.rs (426行)
src/backend/wasm/runtime.rs (369行)
src/backend/aot/executable.rs (301行)
src/backend/wasm_v2/* (約250行)
```
#### 判定: **Risky** - 現時点では保持推奨
**理由**:
- CLAUDE.mdで「⚠ WASM機能: レガシーインタープリター削除により一時無効」と記載
- 将来的なWASM対応の可能性あり
- Phase 21.0完成後の方針次第
**推奨アクション**:
1. 使用状況調査 (WASMバックエンド実際に動作するか?)
2. 動作しない場合: `archive/wasm-backend/`に移動
3. 動作する場合: ドキュメント整備・テスト追加
---
### 3. 🗂️ BID Copilot Modules (中優先度・Safe削除)
**状態**: 未使用プロトタイプ (READMEで「現在は使用していない」と明記)
#### 影響範囲
- **ディレクトリ**: `src/bid-codegen-from-copilot/`, `src/bid-converter-copilot/`
- **総行数**: 約1,894行
- **ディスクサイズ**: 124KB
- **総ファイル数**: 13ファイル
#### 詳細
##### bid-codegen-from-copilot/ (88KB, 9ファイル)
```
schema.rs (約300行)
codegen/generator.rs (推定500行)
codegen/targets/wasm.rs (詳細実装)
codegen/targets/{vm,llvm,python,ts}.rs (スタブ)
```
**用途**: 将来的なプラグイン多言語対応
**判定**: **Safe削除** - `archive/bid-copilot-prototype/`に移動
##### bid-converter-copilot/ (36KB, 4ファイル)
```
tlv.rs (TLVエンコード/デコード)
types.rs (BID型定義)
error.rs (BIDエラー型)
```
**用途**: 将来的なnyash2.toml実装時に活用予定
**判定**: **Safe削除** - 汎用性高いが現在未使用、`archive/bid-converter/`に移動
#### 推奨アクション
1. **Phase 1**: `archive/bid-copilot-prototype/`にディレクトリごと移動
2. **Phase 2**: `src/lib.rs`のコメント削除 (現在はモジュール宣言なし)
3. **影響**: 無し (既に未使用、インポート0)
**削減見込み**: 約1,900行
---
### 4. 📄 JSON v1 Bridge (中優先度・要確認)
**状態**: 使用状況不明
#### 影響範囲
- **ファイル**: `src/runner/json_v1_bridge.rs` (734行)
- **#[allow(dead_code)]**: `try_parse_v1_to_module()` 関数
#### コード抜粋
```rust
#[allow(dead_code)]
pub fn try_parse_v1_to_module(json: &str) -> Result<Option<MirModule>, String> {
// MIR JSON v1スキーマパース
// 最小限のサポート: const, copy, ret
}
```
#### 判定: **Investigate** - 使用確認が必要
**調査項目**:
1. JSON v1を出力するコードは存在するか?
2. テストで使用されているか?
3. JSON v0 bridgeで代替可能か?
**推奨アクション**:
1. **Phase 1**: 使用状況調査 (grep検索・テスト実行)
2. **Phase 2**: 未使用なら`archive/json-v1-bridge.rs`に移動
3. **Phase 3**: 使用中なら機能追加 or ドキュメント整備
**削減見込み**: 約700行 (未使用の場合)
---
### 5. 🔧 #[allow(dead_code)] マーカー (高優先度・段階削除)
**状態**: 76箇所存在
#### 主要カテゴリ
##### PyVM/JSON v0 Bridge (保持推奨)
```
src/runner/modes/common_util/pyvm.rs - PyVMハーネス (セルフホスト専用)
src/runner/modes/common_util/exec.rs - 実行ユーティリティ
```
**判定**: **保持** - Phase 15セルフホスティングで使用中
##### Legacy Expression/Type Check
```
src/mir/builder/exprs_legacy.rs:6 - build_expression_impl_legacy()
src/mir/verification/legacy.rs:6 - check_no_legacy_ops()
src/mir/builder/utils.rs - 旧型チェック関数
```
**判定**: **Safe削除** - Phase 15でCore-13/14/15に統一済み
##### Parser関連
```
src/parser/common.rs - unknown_span() 等
src/parser/sugar.rs - 旧シュガー構文
src/parser/declarations/*/validators.rs - 古いバリデーター
```
**判定**: **Investigate** - 実際の使用状況確認が必要
##### Box Factory Deprecated
```
src/box_factory/builtin_impls/*.rs - 18箇所のDEPRECATEDマーカー
```
**判定**: **Risky** - プラグイン移行戦略次第 (後述)
#### 推奨アクション
1. **Phase 1**: 明確に未使用な関数削除 (約20箇所, Safe)
2. **Phase 2**: Legacy MIR関連削除 (約10箇所, Safe)
3. **Phase 3**: Parser関連の実使用確認・削除 (約15箇所, Investigate)
4. **Phase 4**: 残存コードのリファクタリング (約30箇所, Risky)
**削減見込み**: 約500〜1,000行
---
### 6. ⚠️ Builtin Box DEPRECATED (低優先度・Phase戦略依存)
**状態**: プラグイン移行計画中
#### 影響範囲
- **ディレクトリ**: `src/box_factory/builtin_impls/`
- **総行数**: 約264行
- **DEPRECATEDマーカー**: 18箇所
#### 対象Box
```
console_box.rs - ⚠️ nyash-console-plugin推奨 (既存)
string_box.rs - ⚠️ nyash-string-plugin推奨
array_box.rs - ⚠️ nyash-array-plugin推奨
bool_box.rs - ⚠️ nyash-bool-plugin推奨 (未作成)
integer_box.rs - ⚠️ nyash-integer-plugin推奨
map_box.rs - ⚠️ nyash-map-plugin推奨
```
#### 判定: **Risky** - Phase 15.5-B戦略次第
**理由**:
- CLAUDE.mdで「2本柱体制: Core Box統一化完了」と記載
- プラグイン移行は段階的実施中
- 削除すると既存コードが大量に壊れる可能性
**推奨アクション**:
1. **現状**: DEPRECATEDマーカーは保持
2. **Phase 15.5-B完了後**: プラグイン移行状況確認
3. **Phase 16**: builtin→plugin完全移行計画策定
4. **Phase 17**: builtinコード削除
**削減見込み**: 約200〜300行 (Phase 16以降)
---
### 7. 🧪 Legacy Test Files (中優先度・Safe削除)
**状態**: Feature-gatedで無効化済み
#### 影響範囲
- **総数**: 7ファイル (cranelift依存)
- **推定行数**: 約1,000〜1,500行
#### 主要ファイル
```
src/tests/core13_smoke_jit.rs (#[cfg(feature = "cranelift-jit")])
src/tests/core13_smoke_jit_map.rs (#[cfg(feature = "cranelift-jit")])
src/tests/identical_exec.rs (一部cranelift依存)
src/tests/identical_exec_collections.rs
src/tests/identical_exec_instance.rs
src/tests/identical_exec_string.rs
src/tests/policy_mutdeny.rs (206行, 一部cranelift)
```
#### 判定: **Safe削除** - feature削除済み
**推奨アクション**:
1. **Phase 1**: cranelift feature完全依存ファイル削除 (5ファイル)
2. **Phase 2**: identical_exec系の整理 (4ファイル, 一部保持?)
3. **Phase 3**: policy_mutdeny.rsの分割 (cranelift部分のみ削除)
**削減見込み**: 約1,000行
---
### 8. 🐍 PyVM References (保持推奨)
**状態**: JSON v0 Bridge・セルフホスト専用
#### 影響範囲
- **参照数**: 102箇所
- **主要用途**: Phase 15セルフホスティング
#### 主要ファイル
```
src/runner/modes/pyvm.rs - PyVM実行モード
src/runner/json_v0_bridge/ - JSON v0→MIR変換
src/llvm_py/pyvm/ - Python VM実装
```
#### 判定: **保持** - Phase 15現役使用中
**理由**:
- CLAUDE.mdで「PyVM特化保持 (JSON v0ブリッジ・using処理のみ)」と明記
- Phase 15.5-Bセルフホスティング実装で必須
- 削除不可
**推奨アクション**: なし (現状維持)
---
## 📈 削減見込みサマリー
| カテゴリ | 推定行数 | 削除難易度 | 優先度 | 削減見込み |
|---------|---------|-----------|-------|----------|
| Cranelift/JIT | 1,500〜2,000行 | Safe | 高 | 1,500行 |
| WASM Backend | 3,170行 | Risky | 低 | 0行 (保持) |
| BID Copilot | 1,894行 | Safe | 中 | 1,900行 |
| JSON v1 Bridge | 734行 | Investigate | 中 | 700行? |
| #[allow(dead_code)] | 500〜1,000行 | Mixed | 高 | 500行 |
| Builtin Box | 264行 | Risky | 低 | 0行 (Phase 16) |
| Legacy Tests | 1,000行 | Safe | 中 | 1,000行 |
| PyVM | N/A | N/A | N/A | 0行 (保持) |
| **合計** | **約9,000行** | - | - | **約5,600行** |
---
## 🎯 段階的削除計画
### Phase A: 安全削除 (即実行可能)
**推定削減**: 約2,500行
1. **Cranelift JITファイル削除**
- `src/runner/modes/cranelift.rs`
- `src/runner/jit_direct.rs`
- `src/tests/core13_smoke_jit*.rs` (2ファイル)
2. **BID Copilotアーカイブ**
- `src/bid-codegen-from-copilot/``archive/`
- `src/bid-converter-copilot/``archive/`
3. **明確なDead Code削除**
- `#[allow(dead_code)]`で未使用確認済み関数 (約20箇所)
**リスク**: 無し (feature削除済み、未使用コード)
### Phase B: 調査後削除 (1週間)
**推定削減**: 約1,500行
1. **JSON v1 Bridge調査**
- 使用状況確認 (grep + テスト実行)
- 未使用なら削除 or アーカイブ
2. **Legacy Test Files整理**
- `identical_exec*.rs` 系統の再評価
- cranelift依存部分の削除
3. **Parser関連Dead Code**
- 実使用確認後、未使用関数削除
**リスク**: 低 (調査後判断)
### Phase C: 段階的削除 (Phase 16以降)
**推定削減**: 約1,600行
1. **WASM Backend評価**
- 動作確認 → 動作しないならアーカイブ
2. **Builtin Box移行**
- Phase 15.5-B完了後
- プラグイン移行戦略確定後
**リスク**: 中 (Phase戦略依存)
---
## 🚨 削除時の注意点
### 1. Feature Gate確認
```bash
# 削除前に必ず確認
cargo build --release # デフォルト
cargo build --release --features llvm # LLVM
cargo test # テスト通過確認
```
### 2. Archive戦略
削除ではなく **アーカイブ** を推奨:
```
archive/
├── jit-cranelift/ (既存)
├── bid-copilot-prototype/ (新規)
├── bid-converter/ (新規)
├── json-v1-bridge/ (新規)
└── wasm-backend/ (Phase C)
```
### 3. Git履歴保持
```bash
# ファイル削除時はgit mvを使用 (履歴保持)
git mv src/runner/modes/cranelift.rs archive/jit-cranelift/runner_modes_cranelift.rs
```
### 4. ドキュメント更新
- CLAUDE.md
- README.md
- 削除理由を CHANGELOG.md に記録
---
## 📋 推奨実行順序
### 今すぐ実行 (Safe削除)
```bash
# 1. Cranelift JIT削除
rm src/runner/modes/cranelift.rs
rm src/runner/jit_direct.rs
rm src/tests/core13_smoke_jit*.rs
# 2. BID Copilotアーカイブ
mkdir -p archive/bid-copilot-prototype
git mv src/bid-codegen-from-copilot archive/bid-copilot-prototype/
git mv src/bid-converter-copilot archive/bid-copilot-prototype/
# 3. ビルド確認
cargo build --release
cargo test
```
### 1週間以内 (調査後削除)
1. JSON v1 Bridge使用状況調査
2. Legacy Test Files整理
3. Parser Dead Code削除
### Phase 16以降 (戦略確定後)
1. WASM Backend評価・アーカイブ
2. Builtin Box→Plugin完全移行
3. 残存Legacy MIR削除
---
## 📊 Impact Analysis
### 削除後の効果
- **コードベース削減**: 約5,600行 (約6%)
- **保守性向上**: レガシーコード除去で可読性向上
- **ビルド時間短縮**: 未使用コード削除で微減
- **Phase 15集中**: セルフホスティング開発に集中可能
### リスク評価
- **Phase A (Safe削除)**: リスク無し
- **Phase B (調査後削除)**: 低リスク
- **Phase C (Phase 16以降)**: 中リスク (戦略依存)
---
## 🔍 補足調査項目
### 1. 追加調査が必要な項目
- [ ] JSON v1 Bridgeの実使用確認
- [ ] WASM Backendの動作確認
- [ ] identical_exec系テストの保持必要性
- [ ] Parser関連Dead Codeの実使用状況
### 2. 今回調査対象外
- `crates/`ディレクトリ (別途調査推奨)
- `apps/`ディレクトリ (スクリプト例・テストケース)
- `tools/`ディレクトリ (ビルドスクリプト)
- Pythonコード (`src/llvm_py/`)
---
## 📝 結論
### 即実行推奨
**Cranelift/JIT削除** (1,500行, Safe)
**BID Copilotアーカイブ** (1,900行, Safe)
**明確なDead Code削除** (500行, Safe)
**合計削減見込み**: 約3,900行 (即実行可能)
### 段階的実施
🔍 **JSON v1 Bridge調査** (700行?, 1週間)
🔍 **Legacy Test Files整理** (1,000行, 1週間)
**WASM Backend評価** (3,170行, Phase C)
**Builtin Box移行** (264行, Phase 16)
**追加削減見込み**: 約1,700〜5,000行 (段階的)
### 総削減見込み
**5,600〜8,900行** (6〜9%) の削減が可能
---
**調査担当**: Claude Code
**次のアクション**: Phase A (Safe削除) の実行