Commit Graph

9 Commits

Author SHA1 Message Date
04dceb6bc0 feat(runtime): Phase 97 IntegerService/BoolService 完全実装 - #[allow(dead_code)] 100%根絶達成
## Phase 97 完了項目
-  IntegerService trait & Adapter実装(add/sub/mul/div, saturating算術)
-  BoolService trait & Adapter実装(not/and/or/xor)
-  #[allow(dead_code)] 6箇所→0箇所(100%削減完了)
-  全13テストPASS(IntegerService 2テスト、BoolService 1テスト追加)

## 技術的成果
**3つのAdapterパターン確立完了**:
1. Ring0直結型: ConsoleService(OS API thin wrapper)
2. 純粋関数型: StringService, IntegerService, BoolService(stateless)
3. downcast型: ArrayService, MapService(複数インスタンス対応)

**CoreServices完全実装**:
- core_required 6個すべて実装完了
- String, Integer, Bool, Array, Map, Console

**オーバーフロー対策**:
- saturating_add/sub/mul でi64オーバーフロー安全
- div はゼロ除算でOption::None返却

## 実装詳細
- src/runtime/core_services.rs: +74行(IntegerService/BoolService traits & impls)
- src/runtime/plugin_host.rs: +2行(Integer/Bool初期化チェック)
- docs/development/current/main/core_boxes_design.md: +256行(Section 14追加)

## Phase 85-97 総括
- Phase 85: 構造設計(CoreServices/PluginHost skeleton)
- Phase 91-94: PluginHost実装 & 箱化モジュール化
- Phase 95.5: StringService/ConsoleService(Ring0直結型・純粋関数型)
- Phase 96: ArrayService/MapService(downcast型)
- Phase 96.5: コード整理(use文統合、コメント更新)
- Phase 97: IntegerService/BoolService(純粋関数型)  完了

次: Phase 98(代表パス拡張 5-10箇所)

🎊 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-03 10:41:16 +09:00
8995fd151d refactor(phase96.5): use文整理とコメント更新 - コード可読性向上
Phase 96.5完了 - コード整理とメンテナンス性向上

### 変更内容
-  use文をトップレベルに集約(10行削除)
-  コメント更新(Phase 96 → Phase 97)
-  テスト9/9 PASS(100%)

### use文整理
**Before**: 各メソッド内で重複import
```rust
fn get(&self, arr: &dyn NyashBox, index: i64) -> Option<Box<dyn NyashBox>> {
    use crate::boxes::array::ArrayBox;  // 重複
    use crate::box_trait::IntegerBox;   // 重複
    // ...
}
```

**After**: トップレベルで一度だけimport
```rust
// トップレベル
use crate::boxes::array::ArrayBox;
use crate::boxes::map_box::MapBox;
use crate::box_trait::{IntegerBox, StringBox, BoolBox};

fn get(&self, arr: &dyn NyashBox, index: i64) -> Option<Box<dyn NyashBox>> {
    // use不要!スッキリ!
}
```

### コメント更新
- IntegerBoxAdapter: "Phase 96 以降で実装" → "Phase 97 で実装予定(純粋関数型として実装)"
- BoolBoxAdapter: "Phase 96 以降で実装" → "Phase 97 で実装予定(純粋関数型として実装)"

### 改善効果
-  可読性向上(use文の重複削除)
-  メンテナンス性向上(import一箇所集約)
-  コメント整合性(実際のPhase計画と一致)

### 削減統計
- use文: 10行削除
- コメント: 2箇所更新

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-03 10:30:26 +09:00
81a5a04eb7 feat(phase96): ArrayService/MapService実装完了 - downcastパターン確立
Phase 96完全達成 - Ring1-Core層の主要Service実装完成

### 実装成果
-  ArrayService trait定義(len/get/set/push)
-  MapService trait定義(size/has/get/set)
-  ArrayBoxAdapter/MapBoxAdapter unit struct化
-  downcastパターン実装(複数インスタンス対応)
-  #[allow(dead_code)] 4→2箇所(2削除)
-  テスト53/53 PASS(100%)

### 変更ファイル
- src/runtime/core_services.rs: ArrayService/MapService実装(+134行)
- src/runtime/plugin_host.rs: 初期化ロジック更新(+8/-12行)
- docs/development/current/main/core_boxes_design.md: Section 13追加(+228行)

### 3つのAdapterパターン確立
1. **Ring0直結型**(ConsoleService): OS API thin wrapper
2. **純粋関数型**(StringService): Box状態不要
3. **downcast型**(ArrayService/MapService) NEW
   - unit struct + downcast_ref パターン
   - 複数インスタンス対応
   - Rust idiomatic API(Option/Result)

### API設計
- ArrayService: Rust型(i64)引数、内部でBox変換
- MapService: Rust型(&str)引数、内部でBox変換
- 戻り値: Option/Result で型安全

### 技術的成果
- 型安全性向上(downcast_ref によるコンパイル時検証)
- コード簡略化(#[allow(dead_code)] 2削除)
- 設計明確化(3パターンの使い分け確立)

### 削減統計
- #[allow(dead_code)]: 2箇所削除
- innerフィールド: 2個削除
- Box依存: 2箇所削除

### 次のステップ
Phase 96.5: use文整理とコメント更新
Phase 97: IntegerService/BoolService実装(#[allow(dead_code)] 完全削除)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-03 10:27:39 +09:00
1108a61533 feat(phase95.5): Ring0統合完了 - Adapter整理とコード簡略化
Phase 95.5完全達成 - ConsoleService/StringService Ring0直結化

### 実装成果
-  ConsoleBoxAdapter Ring0直結(println → log.info, print → io.stdout_write)
-  StringBoxAdapter 純粋関数化(Box状態不要)
-  #[allow(dead_code)] 6→4箇所削減(2削除)
-  PluginHost初期化簡略化(存在確認のみ)
-  テスト14/14 PASS(100%)

### 変更ファイル
- src/runtime/core_services.rs: ConsoleBoxAdapter/StringBoxAdapter unit struct化
- src/runtime/plugin_host.rs: 初期化ロジック簡略化(create_box → has_type)
- docs/development/current/main/core_boxes_design.md: Section 12追加
- CURRENT_TASK.md: Phase 95.5成果記録

### 設計パターン確立
**2つのAdapterパターン**:
1. Ring0直結型(ConsoleService): OS API thin wrapper
2. 純粋関数型(StringService): Box状態不要

**将来実装方針**:
- ArrayService/MapService: 状態管理必要 → Box保持
- IntegerService/BoolService: 純粋関数 → Box不要

### 技術的成果
- Ring0統合完成(ログ経路統一: Ring0 → Ring1-Core → 実行パス)
- コード簡略化(不要なinnerフィールド削除)
- 設計明確化(Adapterの役割を2パターンに整理)
- テスト容易性向上(Ring0モック可能)

### 削減統計
- #[allow(dead_code)]: 2箇所削除
- innerフィールド: 2個削除
- Box依存: 2箇所削除

### 次のステップ
Phase 96: ArrayService/MapService実装(downcastパターン)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-03 10:15:23 +09:00
e74694d08b feat(phase95): CoreServices実用化 - Console/String Service実装完了
Phase 95完全達成 - Ring1-Core層の実際のService実装

### 実装成果
-  ConsoleService::println/print 実装
-  StringService::len 実装(UTF-8文字数対応)
-  global accessor 実装(get_core_plugin_host)
-  代表パス切り替え(selfhost.rs)
-  テスト13/13 PASS(100%)

### 変更ファイル
- src/runtime/core_services.rs: Service API定義、Adapter実装、テスト追加(+79行)
- src/runtime/mod.rs: global accessor実装(+18行)
- src/runtime/plugin_host.rs: Debug impl追加(+3行)
- src/runner/selfhost.rs: ConsoleService経由に切り替え(+5行)
- docs/development/current/main/core_boxes_design.md: Phase 95文書化(+118行)

### 技術的成果
- Ring0 → Ring1-Core → 実行パス の三層構造確立
- 型安全なService経由アクセス実現
- UTF-8完全対応(文字数カウント)
- global accessorパターン統一(Ring0と同じOnceLock)

### Bug修正
- PluginHost Debug impl追加
- PluginHost.optional型修正(Send + Sync追加)
- CoreServices Debug impl実装

### 次のステップ
Phase 95.5: Ring0統合とAdapter整理(#[allow(dead_code)]削除)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-03 09:57:38 +09:00
f4144a22a6 feat(phase94): Box→Service conversion with actual registry integration
Phase 94完全達成 - UnifiedBoxRegistryから実際のBoxを取得してServiceに変換

### 実装成果
-  6個のAdapter実装(StringBox/Integer/Bool/Array/Map/Console)
-  Dummy実装完全削除(38行削減)
-  Fail-Fast原則徹底(フォールバック削除)
-  テスト7/7 PASS(100%)

### 変更ファイル
- src/runtime/core_services.rs: 6個のAdapter実装(+93行)
- src/runtime/plugin_host.rs: 実際のBox取得ロジック(+54行)、Dummy削除(-17行)
- src/runtime/mod.rs: フォールバック削除(-8行)

### 技術的成果
- Box<dyn NyashBox>を直接保持(型安全性確保)
- registry.create_box()で実際のBoxインスタンス取得
- BuiltinBoxFactory登録でcore_required Boxes提供

### 次のステップ
Phase 95: Service traitメソッド実装(Console/String/Array/Map)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-03 09:14:49 +09:00
b3de4cac4b feat(phase93): with_core_from_registry implementation complete
Phase 93 完了: UnifiedBoxRegistry 統合実装 & 起動パス統合

**実装内容**:
- with_core_from_registry() 実装
  - UnifiedBoxRegistry.has_type() で core Box の存在確認
  - 不足時は CoreInitError::MissingService を返す
  - ダミー Service 実装で CoreServices を構築
- ダミー Service 実装を pub に
  - DummyStringService, DummyIntegerService 等を公開
  - Phase 94 の実変換までの橋渡し
- CoreServices::dummy() ヘルパー追加
  - フォールバック用ダミー実装
- initialize_runtime() 実装(環境変数制御)
  - NYASH_USE_PLUGIN_HOST=1 で PluginHost 有効化
  - 環境変数なしで従来通り動作(後方互換性)
- selfhost に PluginHost 初期化追加
  - CoreInitError 発生時は fail-fast
  - 既存ロジックは変更なし

**Fail-Fast 設計**:
- 起動時に core Box 不足を即座に検出
- CoreInitError で明示的なエラーメッセージ
- デバッグ容易(ランタイムエラーではなく起動時エラー)

**テスト結果**:
- test_with_core_from_registry_missing_box 追加
- 7件全て成功
- ビルド成功(1分4秒)
- 526 passed(既存36失敗は Phase 93 と無関係)

**動作確認**:
- 環境変数なし: 従来通り動作 
- NYASH_USE_PLUGIN_HOST=1: PluginHost 初期化成功 
- selfhost: fail-fast 動作確認済み 

**ドキュメント更新**:
- Section 10 追加(77行)
- 段階的展開戦略、Fail-Fast 設計を文書化

**次のステップ**: Phase 94 (実際の Box → Service 変換)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-03 08:42:45 +09:00
2f54e64d27 feat(phase92): UnifiedBoxRegistry integration roadmap complete
Phase 92 完了: UnifiedBoxRegistry 統合の導線作り

**実装内容**:
- CoreServices::required_ids() 実装
  - Phase 87 CoreBoxId の core_required (6個) を返す
  - is_core_required() との整合性を型レベルで保証
- CoreInitError enum 追加
  - MissingService, RegistryEmpty, InvalidServiceType
  - Display + std::error::Error trait 実装
- PluginHost::with_core_from_registry() skeleton
  - Phase 93 で実装予定(todo!() でプレースホルダー)
- initialize_runtime() 接続ポイント決定
  - Ring0Context と UnifiedBoxRegistry を橋渡し

**Phase 87 整合性**:
- required_ids() が is_core_required() と完全一致
- テストで整合性を検証

**テスト結果**:
- 3件追加(全て合格)
  - test_required_ids_consistency
  - test_core_init_error_display
  - test_with_core_from_registry_todo (should_panic)
- ビルド成功
- 既存テストに影響なし

**ドキュメント更新**:
- Section 9 追加(113行)
- ensure_initialized() 呼び出し場所決定(4箇所)
- Phase 93 実装計画明記

**次のステップ**: Phase 93 (with_core_from_registry 実装 & 起動パス統合)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-03 07:57:21 +09:00
3d253056bd feat(phase91): PluginHost/CoreServices skeleton complete
Phase 91 完了: Ring1-Core 構造の明確化

**実装内容**:
- CoreServices 定義(6つの Service trait)
  - StringService, IntegerService, BoolService
  - ArrayService, MapService, ConsoleService
- PluginHost 構造体(Ring0 ⇔ CoreServices 橋渡し)
- NyashPlugin trait(プラグインシステム標準IF)
- PluginRegistry skeleton

**Phase 87 整合性**:
- CoreServices は core_required (6個) を完全カバー
  - String, Integer, Bool, Array, Map, Console
- CoreBoxId との対応表をドキュメント化

**設計原則確立**:
- Ring1-Core 構造明確化
- core_required は必ず揃う(型レベル保証)
- Fail-Fast 設計(ensure_initialized)
- 既存影響ゼロ(新規ファイルのみ)

**テスト結果**:
- 5件追加(全て合格)
- ビルド成功
- 既存テストに影響なし

**次のステップ**: Phase 92 (UnifiedBoxRegistry との統合)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-03 07:43:08 +09:00