Files
hakorune/docs/説明書/reference/box-design/implementation-notes/phase-9-75-redesign.md
Moe Charm e0f0a658e6 docs: Phase 9.75 Box設計根本革命 - SocketBox Arc<Mutex>責務一元化
 Phase 9.75実装計画追加:
- copilot_issues.txtにPhase 9.75追加(Phase 9.7と9.8の間)
- Arc<Mutex>二重化問題の根本解決計画
- 段階的実装戦略(Phase A-D)定義

📚 Box設計ドキュメント完全体系化:
- docs/説明書/reference/box-design/ 新設
- everything-is-box.md: 核心哲学の完全解説
- memory-management.md: Arc<Mutex>設計・fini/weak参照
- delegation-system.md: 完全明示デリゲーション仕様
- box-types-catalog.md: 全Box型の完全カタログ
- ffi-abi-specification.md: FFI/ABI仕様(移動済み)

🔧 実装ノート完備:
- current-issues.md: 現在進行中の設計課題
- socket-box-problem.md: Arc<Mutex>二重化問題詳細分析
- phase-9-75-redesign.md: 実装計画詳細

👥 Copilot実装ガイド作成:
- phase9_75_socketbox_arc_mutex_redesign.md
- SocketBox優先対応の具体的実装手順
- 完全テストスイート設計
- 段階的実装戦略(Step 1-5)

📋 CURRENT_TASK.md更新:
- Box設計ドキュメント完成記録
- Phase 9.75準備完了状況

🎯 効果:
- Everything is Box哲学の体系的文書化
- SocketBox問題解決の明確な道筋
- Copilot協調実装の準備完了
- 新規開発者オンボーディング改善

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-15 07:47:09 +09:00

5.8 KiB
Raw Blame History

🔧 Phase 9.75: Box設計根本革命 - 実装計画詳細

📅 実施期間: 2025-08 (Phase 9.7完了後)

🎯 目標

Arc責務の二重化問題を根本的に解決し、すべてのBox型で統一的な設計を実現する。

🏗️ 新設計アーキテクチャ

Before現在の問題設計

// Box内部でロック管理
pub struct SocketBox {
    listener: Arc<Mutex<Option<TcpListener>>>,
    is_server: Arc<Mutex<bool>>,
}

// インタープリターでも二重ロック
Arc<Mutex<dyn NyashBox>>

After新設計

// 純粋なデータコンテナ
pub struct SocketBox {
    listener: Option<TcpListener>,
    is_server: bool,
}

// インタープリターが一元管理
Arc<Mutex<dyn NyashBox>>

📋 実装フェーズ

Phase A: 設計ガイドライン策定3日

A-1: Box実装パターンドキュメント

// ✅ 推奨パターン
pub struct MyBox {
    base: BoxBase,
    data: String,           // シンプルなフィールド
    count: usize,           // Arc<Mutex>不要
    items: Vec<Item>,       // 直接保持
}

// ❌ アンチパターン
pub struct BadBox {
    data: Arc<Mutex<String>>,     // 内部ロック禁止
    count: Arc<Mutex<usize>>,     // 過剰な同期
}

A-2: テンプレート作成

  • box_template.rs - 新Box実装のひな形
  • box_test_template.rs - テストスイートひな形
  • マクロによる定型処理自動化検討

A-3: 既存コードレビュー

  • 15個のBox型の実装詳細調査
  • 問題パターンの分類
  • 修正難易度の評価

Phase B: 最優先Box修正1週間

B-1: SocketBox修正

// 新実装
impl NyashBox for SocketBox {
    fn bind(&mut self, addr: &str, port: u16) -> Result<(), String> {
        match TcpListener::bind((addr, port)) {
            Ok(listener) => {
                self.listener = Some(listener);
                self.is_server = true;
                Ok(())
            }
            Err(e) => Err(e.to_string())
        }
    }
}

B-2: HTTPServerBox修正

  • SocketBoxと同様のパターンで修正
  • 内部SocketBoxとの連携確認

B-3: テストスイート作成

// 状態保持テスト
test "SocketBox state persistence" {
    server = new SocketBox()
    assert(server.bind("127.0.0.1", 8080) == true)
    assert(server.isServer() == true)  // 必ず成功すること
}

// 並行アクセステスト
test "Concurrent access safety" {
    // 複数スレッドからのアクセステスト
}

Phase C: ステートフルBox修正1週間

C-1: コレクション系Box

  • ArrayBox: Vec<Box<dyn NyashBox>>直接保持
  • MapBox: HashMap<String, Box<dyn NyashBox>>直接保持
  • BufferBox: バッファ管理の簡素化

C-2: I/O系Box

  • FileBox: ファイルハンドル管理
  • StreamBox: ストリーム状態管理

C-3: P2P系Box

  • P2PBox: ピア管理の再設計
  • IntentBox: インテント処理の簡素化

Phase D: 残りのBox統一3日

D-1: 機械的修正

  • RandomBox, DebugBox等の単純なBox
  • Arc除去の機械的適用

D-2: 統合テスト

  • 全Box型の動作確認
  • 相互運用性テスト
  • メモリリークチェック

D-3: パフォーマンス検証

  • ベンチマーク実行
  • ロック競合の削減確認
  • メモリ使用量の改善確認

🤖 Copilot協力タスク

自動化可能な作業

  1. Arc検出スクリプト

    grep -r "Arc<Mutex<" src/boxes/ | wc -l
    # 現在: 50箇所以上 → 目標: 0箇所
    
  2. 機械的リファクタリング

    • Arc<Mutex<T>>T
    • .lock().unwrap() 除去
    • Clone実装の簡素化
  3. テストケース生成

    • 各Boxの状態保持テスト
    • 並行アクセステスト
    • エッジケーステスト

📊 成功指標

定量的指標

  • Arc使用箇所: 0個Box内部
  • デッドロック発生: 0件
  • 状態保持テスト: 100%成功
  • パフォーマンス: 10%以上向上

定性的指標

  • コード可読性の向上
  • デバッグの容易さ
  • 新規開発者の理解しやすさ

🚨 リスクと対策

リスク1: 既存コード互換性

対策:

  • NyashBoxトレイトは変更しない
  • 段階的移行deprecated警告

リスク2: パフォーマンス劣化

対策:

  • 事前ベンチマーク取得
  • ホットパスの最適化

リスク3: 実装工数超過

対策:

  • 優先順位付けSocketBox最優先
  • Copilot活用による自動化

📅 詳細スケジュール

Week 1:
月: Phase A-1 パターンドキュメント
火: Phase A-2 テンプレート作成
水: Phase A-3 既存コードレビュー
木: Phase B-1 SocketBox修正開始
金: Phase B-1 SocketBox修正完了

Week 2:
月: Phase B-2 HTTPServerBox修正
火: Phase B-3 テストスイート作成
水: Phase C-1 ArrayBox/MapBox修正
木: Phase C-2 FileBox/StreamBox修正
金: Phase C-3 P2PBox修正

Week 3:
月: Phase D-1 残りBox修正
火: Phase D-2 統合テスト
水: Phase D-3 パフォーマンス検証
木: ドキュメント最終化
金: リリース準備

🎉 期待される成果

  1. 技術的成果

    • デッドロック問題の根絶
    • 状態管理の信頼性向上
    • パフォーマンス改善
  2. 開発効率向上

    • 新Box実装の簡素化
    • デバッグ時間の短縮
    • 保守コストの削減
  3. Everything is Box哲学の強化

    • より純粋なBox設計
    • 統一的な実装パターン
    • 初学者にも理解しやすい構造

関連ドキュメント: