Files
hakorune/docs/development/strategies/builtin-box-removal-strategy.md

96 lines
2.4 KiB
Markdown
Raw Normal View History

# BuiltinBoxFactory段階削除戦略
> **Phase 15.5 "Everything is Plugin" への道**
> 作成日: 2025-09-24
> 戦略者: codex
## 🎯 目標
BuiltinBoxFactoryと`builtin_impls/`を安全に段階削除し、すべてをプラグインに移行する。
## 📊 現状分析
### 削除対象
- `src/box_factory/builtin.rs`: BuiltinBoxFactory実装
- `src/box_factory/builtin_impls/`: 8ファイル、32KB
- string_box.rs
- integer_box.rs
- bool_box.rs
- array_box.rs
- map_box.rs
- console_box.rs
- null_box.rs
- mod.rs
### 参照箇所
- `src/runtime/unified_registry.rs`: BuiltinBoxFactory登録2箇所
- `src/runtime/nyash_runtime.rs`: BuiltinBoxFactory登録1箇所
## 🚀 段階削除戦略
### Phase 1: 機能ゲート厳格化(現在)
```rust
// 現状plugins-onlyでのみ無効化
#[cfg(not(feature = "plugins-only"))]
{
registry.register(Arc::new(BuiltinBoxFactory::new()));
}
```
### Phase 2: Opt-in化次回
```rust
// 将来builtin-coreでのみ有効化
#[cfg(feature = "builtin-core")]
{
registry.register(Arc::new(BuiltinBoxFactory::new()));
}
```
### Phase 3: 個別Box削除順序
1. **StringBox**: プラグイン版が安定動作確認後
2. **IntegerBox**: 同上
3. **BoolBox**: シンプルなので早期削除可
4. **ArrayBox**: 依存関係確認後
5. **MapBox**: 最後に削除
6. **ConsoleBox**: print依存の最後
7. **NullBox**: 影響最小、いつでも削除可
## ✅ 検証項目(各段階)
### ビルド検証
```bash
cargo check --features llvm
cargo check --features plugins-only
```
### スモークテスト
```bash
# プラグインで基本動作確認
./target/release/nyash test_plugin_basic.hako
# LLVM EXEでprint出力確認
NYASH_LLVM_USE_HARNESS=1 ./target/release/nyash --backend llvm test.hako
```
## 🛡️ ロールバック戦略
各削除は別ブランチで実施:
- `cleanup/builtin-string`
- `cleanup/builtin-integer`
-
失敗時は該当ブランチをrevertするだけで復帰可能。
## 🏁 完了条件
1. `builtin_impls/`ディレクトリ削除
2. `BuiltinBoxFactory`削除
3. すべてのBoxがプラグイン経由で動作
4. CI全緑確認
## 📅 タイムライン
- **Phase 1**: ✅ 完了2025-09-24
- **Phase 2**: 機能フラグ反転(次回作業)
- **Phase 3**: 個別Box削除1週間程度
- **完了予定**: Phase 15.5完了時