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
15 KiB
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 オプション (削除可能)
推奨アクション
- Phase 1: feature gate確認・テストファイル削除 (Safe, 約500行)
- Phase 2: runner/modesのcranelift.rs削除 (Safe, 約200行)
- Phase 3: backend/mod.rs再エクスポート削除 (Safe, 約30行)
- 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完成後の方針次第
推奨アクション:
- 使用状況調査 (WASMバックエンド実際に動作するか?)
- 動作しない場合:
archive/wasm-backend/に移動 - 動作する場合: ドキュメント整備・テスト追加
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/に移動
推奨アクション
- Phase 1:
archive/bid-copilot-prototype/にディレクトリごと移動 - Phase 2:
src/lib.rsのコメント削除 (現在はモジュール宣言なし) - 影響: 無し (既に未使用、インポート0)
削減見込み: 約1,900行
4. 📄 JSON v1 Bridge (中優先度・要確認)
状態: 使用状況不明
影響範囲
- ファイル:
src/runner/json_v1_bridge.rs(734行) - #[allow(dead_code)]:
try_parse_v1_to_module()関数
コード抜粋
#[allow(dead_code)]
pub fn try_parse_v1_to_module(json: &str) -> Result<Option<MirModule>, String> {
// MIR JSON v1スキーマパース
// 最小限のサポート: const, copy, ret
}
判定: Investigate - 使用確認が必要
調査項目:
- JSON v1を出力するコードは存在するか?
- テストで使用されているか?
- JSON v0 bridgeで代替可能か?
推奨アクション:
- Phase 1: 使用状況調査 (grep検索・テスト実行)
- Phase 2: 未使用なら
archive/json-v1-bridge.rsに移動 - 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 - プラグイン移行戦略次第 (後述)
推奨アクション
- Phase 1: 明確に未使用な関数削除 (約20箇所, Safe)
- Phase 2: Legacy MIR関連削除 (約10箇所, Safe)
- Phase 3: Parser関連の実使用確認・削除 (約15箇所, Investigate)
- 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統一化完了」と記載
- プラグイン移行は段階的実施中
- 削除すると既存コードが大量に壊れる可能性
推奨アクション:
- 現状: DEPRECATEDマーカーは保持
- Phase 15.5-B完了後: プラグイン移行状況確認
- Phase 16: builtin→plugin完全移行計画策定
- 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削除済み
推奨アクション:
- Phase 1: cranelift feature完全依存ファイル削除 (5ファイル)
- Phase 2: identical_exec系の整理 (4ファイル, 一部保持?)
- 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行
-
Cranelift JITファイル削除
src/runner/modes/cranelift.rssrc/runner/jit_direct.rssrc/tests/core13_smoke_jit*.rs(2ファイル)
-
BID Copilotアーカイブ
src/bid-codegen-from-copilot/→archive/src/bid-converter-copilot/→archive/
-
明確なDead Code削除
#[allow(dead_code)]で未使用確認済み関数 (約20箇所)
リスク: 無し (feature削除済み、未使用コード)
Phase B: 調査後削除 (1週間)
推定削減: 約1,500行
-
JSON v1 Bridge調査
- 使用状況確認 (grep + テスト実行)
- 未使用なら削除 or アーカイブ
-
Legacy Test Files整理
identical_exec*.rs系統の再評価- cranelift依存部分の削除
-
Parser関連Dead Code
- 実使用確認後、未使用関数削除
リスク: 低 (調査後判断)
Phase C: 段階的削除 (Phase 16以降)
推定削減: 約1,600行
-
WASM Backend評価
- 動作確認 → 動作しないならアーカイブ
-
Builtin Box移行
- Phase 15.5-B完了後
- プラグイン移行戦略確定後
リスク: 中 (Phase戦略依存)
🚨 削除時の注意点
1. Feature Gate確認
# 削除前に必ず確認
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履歴保持
# ファイル削除時はgit mvを使用 (履歴保持)
git mv src/runner/modes/cranelift.rs archive/jit-cranelift/runner_modes_cranelift.rs
4. ドキュメント更新
- CLAUDE.md
- README.md
- 削除理由を CHANGELOG.md に記録
📋 推奨実行順序
今すぐ実行 (Safe削除)
# 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週間以内 (調査後削除)
- JSON v1 Bridge使用状況調査
- Legacy Test Files整理
- Parser Dead Code削除
Phase 16以降 (戦略確定後)
- WASM Backend評価・アーカイブ
- Builtin Box→Plugin完全移行
- 残存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削除) の実行