Files
hakorune/docs/CURRENT_TASK.md
Moe Charm c2af6c9987 docs: Add Phase 9.78 Unified BoxFactory Architecture design
- Add comprehensive design discussion with Gemini about unified BoxFactory
- Define Phase 9.78 implementation plan with 6 sub-phases (9.78a-f)
- Include clone_box/share_box semantics clarification and fixes
- Update CURRENT_TASK.md with specific misimplementation details
- Archive Gemini's deep technical analysis endorsing the approach

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-19 16:21:34 +09:00

5.1 KiB
Raw Blame History

🎯 現在のタスク (2025-08-19 更新)

完了: ビルド時間劇的改善成功!

🎉 達成結果

ビルド時間: 4分 → 43秒 (5.6倍高速化!)

実装内容

  1. wasmtime分離完了 - wasm-backend feature flag実装

    • Cargo.toml: wasmtime/wabtをoptional化
    • src/backend/mod.rs: 条件付きコンパイル追加
    • src/runner.rs: feature未有効時の適切なエラー表示
    • src/benchmarks.rs: WASM関連を条件付き化
  2. ビルドエラー修正完了

    • benchmarks.rs内の条件付きコンパイル対応
    • すべてのビルドパターンで正常動作確認済み

📊 新しいビルドコマンド

# 高速ビルド(通常開発用): ~43秒
cargo build --release -j32

# WASM機能付きビルド必要時のみ: ~4分
cargo build --release -j32 --features wasm-backend

🎯 次の優先事項

1. 統合Box管理システムの設計最優先🆕

  • 目標: ビルトイン・ユーザー定義・プラグインBoxの統一管理
  • 現状の問題:
    • ビルトインBox: 直接Box<dyn NyashBox>生成
    • ユーザー定義Box: InstanceBox経由
    • プラグインBox: BIDシステム経由
  • 提案: 統合BoxFactory/BoxRegistryシステム
  • 期待効果:
    • フロー簡略化(すべて同じインターフェース)
    • WASMビルド時の除外が容易feature分岐統一
    • 将来の拡張性向上

2. nekocodeでソースコードダイエット

  • 目標: 3.3MB → 2MB以下
  • 手法: 未使用コード・重複実装の削除
  • ツール: nekocodeによる分析改善待ち
  • 期待効果: さらなるビルド時間短縮+保守性向上

3. clone_box/share_box使用方法統一

  • 問題: Arcのシェアリング戦略が不統一
  • 具体的な誤実装:
    • channel_box.rs: share_boxがclone_boxを呼んでいる仮実装
    • plugin_box_legacy.rs: 同様の誤実装
  • 正しいセマンティクス:
    • clone_box: 新しいインスタンス生成深いコピー、新しいID
    • share_box: 同じインスタンスへの参照共有同じID、Arc参照
  • 影響: メモリ効率・パフォーマンス・セマンティクスの一貫性
  • 修正範囲: 全Box型の実装確認と統一Phase 9.78fで対応)

💡 統合Box管理システム設計案

🎯 深く考えた結果: BoxFactory統一アーキテクチャ

// 統合BoxFactoryトレイト
pub trait BoxFactory {
    fn create_box(&self, name: &str, args: &[Box<dyn NyashBox>]) -> Result<Box<dyn NyashBox>, RuntimeError>;
    fn is_available(&self) -> bool;
    fn box_types(&self) -> Vec<&str>;
}

// 実装例
struct BuiltinBoxFactory;     // StringBox, IntegerBox等
struct UserBoxFactory;        // InstanceBox経由
struct PluginBoxFactory;      // BID/FFI経由

// 統合レジストリ
struct UnifiedBoxRegistry {
    factories: Vec<Box<dyn BoxFactory>>,
}

📊 利点

  1. 統一インターフェース: new StringBox()new MyBox()も同じ処理フロー
  2. 条件付きコンパイル簡単:
    #[cfg(not(target_arch = "wasm32"))]
    registry.add_factory(Box::new(PluginBoxFactory));
    
  3. 優先順位制御: ビルトイン→ユーザー定義→プラグインの順で検索
  4. エラーハンドリング統一: すべて同じエラー型で処理

🚀 実装ステップ

  1. BoxFactoryトレイト定義
  2. 各種Factory実装Builtin/User/Plugin
  3. UnifiedBoxRegistry実装
  4. objects.rsのcreate_object統合
  5. WASM向けfeature分岐追加

🎉 本日の成果: FileBox v2完全動作

📍 達成事項

  1. TLVエンコーディング修正

    • プラグインが期待する正確な形式に修正
    • Header: version(2) + argc(2)
    • Entry: tag(1) + reserved(1) + size(2) + data
  2. 重複実装削除

    • method_dispatch.rs削除-494行
    • calls.rsが実際の実装
  3. FileBox全機能テスト成功

    • open/read/write/close全て正常動作
    • 実ファイルI/O確認済み

🔥 重要な教訓

「深く考える」の重要性

  • コードフローを正確に追跡
  • 推測でなく実際の実行パスを確認
  • レガシーコードを放置しない

📋 技術メモ

wasmtime使用箇所

src/backend/wasm/mod.rs
src/backend/wasm/host.rs
src/backend/wasm/runtime.rs
src/backend/aot/compiler.rs
src/backend/aot/mod.rs
src/backend/aot/executable.rs
src/backend/aot/config.rs

ビルド時間計測コマンド

time cargo clean && time cargo build --release -j32

プロジェクトサイズ調査結果 🆕

  • 実際のプロジェクトサイズ: 約3GB3.3MBは誤解)
  • 内訳:
    • target/: 1.3GB(ビルド生成物)
    • development/: 1.2GB(開発ファイル)
    • src/: 2.2MB(実際のソースコード)
  • 削除可能: 約2.3GBtarget関連

最終更新: 2025年8月19日
次回: 統合Box管理システムで革命を