parser(match): add MVP type patterns (IntegerBox(x)/StringBox(s)) via AST If-chain; keep literal-only path using PeekExpr; add smoke app (apps/tests/match_type_pattern_basic.nyash); build + stage-2 smokes green
This commit is contained in:
220
docs/archive/phases/phase-10/phase_10_app_migration.md
Normal file
220
docs/archive/phases/phase-10/phase_10_app_migration.md
Normal file
@ -0,0 +1,220 @@
|
||||
# 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は「実用的なプログラミング言語」として確立されます!** 🎉
|
||||
Reference in New Issue
Block a user