# Phase 16 次期実装タスク - 実装開始への具体的ステップ **策定日**: 2025-09-18 **ステータス**: 実装準備完了 **優先度**: 最高(全AI相談結果に基づく統合計画) ## 🎯 実装開始の準備状況 ### ✅ 完了済み(計画・設計フェーズ) - **AI三賢者相談完了**: ChatGPT・Gemini・Codex全ての技術検証済み - **統合実装ロードマップ**: 4-6週間の詳細計画策定済み - **Pattern Matching基盤計画**: 2週間の実装詳細完成 - **マクロ実例集**: 6つの革命的マクロタイプの具体例完成 - **技術アーキテクチャ**: HIRパッチ式エンジン設計確定 ## 🚀 即座実装タスク(今週着手推奨) ### Task 1: Pattern Matching実装開始(最優先) **期間**: 2週間 **理由**: Gemini・Codex共に「マクロ実装の必須基盤」と明言 #### Week 1: 基本構文 ```bash # 実装ファイル src/parser/pattern_matching.rs # パターン構文解析 src/ast/pattern.rs # Pattern AST定義 src/mir/lowering/pattern.rs # Pattern → MIR14変換 ``` #### Week 2: 高度機能 ```bash # 実装ファイル src/parser/destructuring.rs # Box destructuring src/type_checker/pattern.rs # パターン型検査 src/mir/optimization/pattern.rs # パターン最適化 ``` #### 受け入れ基準 ```nyash // 動作必須テスト local result = match value { 0 => "zero", 1..10 => "small", UserBox(name, age) => "user: " + name, _ => "other" } ``` ### Task 2: AST操作基盤構築(Pattern Matching並行) **期間**: 1週間 **依存**: Pattern Matching Week 1完了後 #### 実装内容 ```bash # 新規ファイル src/macro_system/ast_pattern.rs # AST用Pattern Matching src/macro_system/quote.rs # 準引用/脱引用 src/macro_system/rewriter.rs # AST書き換え器 ``` #### API設計例 ```rust // マクロでのAST操作 fn expand_derive(input: &AstNode) -> Result { match input { BoxDef { name, fields } => { let equals_method = quote! { method equals(other: #name) -> BoolBox { #(generate_field_comparisons(fields)) } }; Ok(equals_method) } } } ``` ### Task 3: @derive(Equals)最小実装(MVP) **期間**: 1週間 **依存**: Task 1・2完了 #### 実装目標 ```nyash // 入力 @derive(Equals) box UserBox { name: StringBox age: IntegerBox } // 自動生成 method equals(other: UserBox) -> BoolBox { return me.name == other.name && me.age == other.age } ``` #### 実装ファイル ```bash src/macro_system/derive/mod.rs # derive マクロシステム src/macro_system/derive/equals.rs # Equals実装ジェネレーター src/macro_system/registry.rs # マクロ登録システム ``` ## 📋 並行作業可能タスク ### A系列: コア機能実装 - [ ] Pattern Matching parser - [ ] AST manipulation tools - [ ] HIR patch engine - [ ] @derive(Equals) generator ### B系列: 品質保証 - [ ] Unit tests for pattern matching - [ ] Integration tests for macro expansion - [ ] Performance benchmarks - [ ] Error message quality ### C系列: 開発体験 - [ ] `nyash --expand` コマンド - [ ] `NYASH_MACRO_TRACE=1` デバッグ - [ ] マクロ展開可視化ツール - [ ] 開発者ドキュメント ## 🎯 2週間後の目標状態 ### 動作するコード例 ```nyash // Pattern Matching が動作 local greeting = match user { UserBox(name, age) => "Hello " + name + "!", AdminBox(name) => "Hello Admin " + name + "!", _ => "Hello stranger!" } // @derive(Equals) が動作 @derive(Equals, ToString) box PersonBox { name: StringBox age: IntegerBox } local person1 = new PersonBox("Alice", 25) local person2 = new PersonBox("Alice", 25) assert person1.equals(person2) // 自動生成されたequalsメソッド ``` ### 技術達成目標 - ✅ Pattern Matching基本動作(リテラル・変数・構造パターン) - ✅ @derive(Equals)自動生成動作 - ✅ HIRパッチエンジン基盤完成 - ✅ マクロ展開デバッグツール動作 ## 🔧 実装時の技術指針 ### 安全な実装戦略 1. **既存MIR14命令不変**: 新命令追加なし 2. **段階的機能追加**: 最小動作から開始 3. **回帰テスト重視**: 既存機能への影響なし 4. **エラーハンドリング**: 明確なエラーメッセージ ### パフォーマンス考慮 1. **Pattern最適化**: Jump table、Decision tree 2. **マクロキャッシュ**: 展開結果のキャッシュ 3. **漸進的コンパイル**: 変更部分のみ再処理 4. **メモリ効率**: AST操作の最適化 ## 🚨 実装時の注意点 ### Hygiene(衛生)問題 ```nyash // 生成されるメソッド名が既存と衝突しないように method __generated_equals_#unique_id(other: UserBox) -> BoolBox { // 安全な名前空間での生成 } ``` ### エラー報告品質 ```nyash // 良いエラーメッセージ例 Error: @derive(Equals) cannot be applied to UserBox → UserBox contains field 'callback' of type FunctionBox → Equals comparison is not supported for FunctionBox Help: Consider implementing custom equals method or excluding this field ``` ### デバッグ支援 ```bash # マクロ展開の可視化 nyash --expand program.hako # ステップバイステップ追跡 NYASH_MACRO_TRACE=1 nyash program.hako ``` ## 📊 成功指標(2週間後) ### 機能的成功 - [ ] Pattern Matching基本テスト全通過 - [ ] @derive(Equals)生成コード動作確認 - [ ] 既存テストスイート全通過(回帰なし) - [ ] 実用サンプルアプリでの動作確認 ### 技術的成功 - [ ] MIR14出力の妥当性確認 - [ ] PyVM・LLVMバックエンド両対応 - [ ] パフォーマンス基準クリア - [ ] メモリ使用量の適正範囲 ### 開発者体験 - [ ] 明確なエラーメッセージ提供 - [ ] デバッグツールの実用性確認 - [ ] ドキュメントの完成度 - [ ] サンプルコードの動作確認 --- **Phase 16実装開始!世界最強マクロ言語への第一歩。** *「Pattern Matching → @derive(Equals) → 世界征服」- 明確な実装経路の確立完了。*