# Phase 10: Classic C Applications Migration to Nyash

## 🎯 概要
3つの著名なCアプリケーションをNyashに移植し、新実装された高度なメモリ管理機能を実戦テストする。

## 📦 移植対象アプリケーション（優先順位順）

### 1. 🌐 **Tinyproxy** - ゼロコピー判定機能の実証
**元実装**: https://github.com/tinyproxy/tinyproxy
**サイズ**: ~5000行C、軽量HTTPプロキシサーバー
**Nyash移植目標**: `apps/tinyproxy_nyash/`

#### 🔍 **ゼロコピー判定テストケース**
```nyash
// HTTPリクエスト転送でのメモリ効率検証
static box ProxyServer {
    init { upstream_buffer, downstream_buffer }
    
    relay_data(client_data) {
        // ⭐ ゼロコピー判定：バッファーが共有されているかチェック
        if (me.upstream_buffer.is_shared_with(client_data)) {
            console.log("✅ Zero-copy achieved!")
        } else {
            console.log("❌ Unnecessary copy detected")
        }
        
        // 大量データ転送での最適化確認
        return me.upstream_buffer.share_reference(client_data)
    }
}
```

#### 📋 **実装要件**
- HTTPプロキシの基本機能（GET/POST転送）
- `SocketBox`でのクライアント・サーバー接続
- `BufferBox`での効率的なデータ転送
- **ゼロコピー判定API**の実装・テスト

---

### 2. 🎮 **Chip-8エミュレーター** - fini伝播とweak生存チェック
**元実装**: https://github.com/mattmikolay/chip-8 (参考)
**サイズ**: ~1000行C、8ビットゲーム機エミュレーター
**Nyash移植目標**: `apps/chip8_nyash/`

#### 🔍 **メモリ管理テストケース**
```nyash
// CPU・メモリ・グラフィックスの相互参照関係でのfini伝播テスト
static box Chip8CPU {
    init { memory, graphics, sound }
    
    fini() {
        // ⭐ fini伝播：依存オブジェクトの自動クリーンアップ
        console.log("🔄 CPU cleanup triggered")
        me.memory.cleanup()  // メモリバンクの解放
        me.graphics.cleanup()  // VRAM解放
    }
}

static box Chip8Memory {
    init { ram, weak_cpu_ref }  // CPUへの弱参照
    
    read_byte(address) {
        // ⭐ weak生存チェック：CPUがまだ生きているか確認
        if (me.weak_cpu_ref.is_alive()) {
            return me.ram.get(address)
        } else {
            console.log("⚠️ CPU destroyed, memory access blocked")
            return null
        }
    }
}
```

#### 📋 **実装要件**
- Chip-8命令セット実装（35命令）
- 64x32ピクセルグラフィックス（`WebCanvasBox`使用）
- サウンド出力（`SoundBox`使用）
- **fini伝播システム**と**weak参照**の実戦テスト

---

### 3. ✏️ **kilo テキストエディター** - 「うっかり全体コピー」検出
**元実装**: https://github.com/antirez/kilo
**サイズ**: ~1000行C、軽量ターミナルエディター
**Nyash移植目標**: `apps/kilo_nyash/`

#### 🔍 **メモリ効率テストケース**
```nyash
// 大きなテキストファイル編集での不必要なコピー検出
static box TextBuffer {
    init { lines, undo_stack }
    
    insert_char(row, col, char) {
        local old_lines_size = me.lines.memory_footprint()
        
        // 文字挿入操作
        me.lines.get(row).insert_at(col, char)
        
        local new_lines_size = me.lines.memory_footprint()
        local size_diff = new_lines_size - old_lines_size
        
        // ⭐ 「うっかり全体コピー」検出
        if (size_diff > 1000) {  // 1文字挿入で1KB以上増加
            console.log("🚨 INEFFICIENT COPY DETECTED!")
            console.log("Expected: 1 byte, Actual: " + size_diff + " bytes")
            me.log_memory_leak_warning()
        }
    }
    
    // 大規模な検索・置換での効率性チェック
    search_and_replace(pattern, replacement) {
        local initial_memory = me.lines.memory_footprint()
        
        // 検索・置換実行
        me.lines.replace_all(pattern, replacement)
        
        local final_memory = me.lines.memory_footprint()
        // メモリ使用量が2倍を超えた場合は問題
        if (final_memory > initial_memory * 2) {
            console.log("⚠️ Memory usage doubled during replace operation")
        }
    }
}
```

#### 📋 **実装要件**
- ターミナル操作（`ConsoleBox`での入出力）
- ファイル読み書き（`FileBox`使用）
- 基本的な編集機能（カーソル移動、挿入、削除）
- **メモリ効率監視**と**コピー検出システム**

---

## 🛠️ **技術的実装指針**

### 共通アーキテクチャ
```nyash
// 各アプリケーション共通の構造
static box AppName {
    init { core_components }
    
    main() {
        me.initialize_components()
        me.run_main_loop()
        me.cleanup_resources()
    }
    
    // メモリ効率レポート（全アプリ共通）
    memory_report() {
        return new MapBox()
            .set("zero_copy_count", me.zero_copy_operations)
            .set("unnecessary_copies", me.detected_copies)
            .set("memory_leaks", me.fini_failures)
            .set("weak_ref_cleanups", me.weak_cleanup_count)
    }
}
```

### 新API要件
1. **ゼロコピー判定API**
   - `BufferBox.is_shared_with(other)` → BoolBox
   - `BufferBox.share_reference(data)` → 参照共有

2. **fini伝播システム**
   - 自動的な依存オブジェクトクリーンアップ
   - クリーンアップチェーンの可視化

3. **weak参照システム**
   - `WeakBox.is_alive()` → BoolBox
   - 循環参照の自動検出・回避

4. **メモリ効率監視**
   - `Box.memory_footprint()` → IntegerBox
   - コピー発生の検出・警告

---

## 🎯 **期待される成果**

### パフォーマンス目標
- **Tinyproxy**: HTTP転送でのゼロコピー率 90%以上
- **Chip-8**: 60FPSエミュレーション + fini伝播の完全動作
- **kilo**: 1MB+ファイル編集でのメモリ効率 95%以上

### 学習効果
- **Copilot**: 大規模Nyashアプリケーション開発経験
- **開発者**: 新メモリ管理機能の実用性確認
- **コミュニティ**: Nyashでの実用アプリケーション事例

---

## 📅 **実装計画**

### Phase 10.1: Tinyproxy実装 (1週間)
- HTTPプロキシ基本機能
- ゼロコピー判定API実装・テスト

### Phase 10.2: Chip-8実装 (1週間)  
- エミュレーター基本機能
- fini伝播・weak参照の実戦テスト

### Phase 10.3: kilo実装 (1週間)
- テキストエディター基本機能
- メモリ効率監視システム

### Phase 10.4: 統合テスト・最適化 (1週間)
- 3アプリケーション同時実行テスト
- パフォーマンス分析・改善

---

## 🚀 **この移植プロジェクトの意義**

1. **実用性の実証**: Nyashで実際のアプリケーションが作れることを証明
2. **新機能の検証**: ゼロコピー・fini・weakの実戦テスト  
3. **開発体験の向上**: Copilotとの協調開発での生産性検証
4. **エコシステム拡充**: Nyashアプリケーションの具体例提供

**この移植が成功すれば、Nyashは「実用的なプログラミング言語」として確立されます！** 🎉
Status: Historical
