From f4988985a79c20c334c7cfc96e25c1298c2bf5af Mon Sep 17 00:00:00 2001 From: Moe Charm Date: Mon, 18 Aug 2025 17:51:31 +0900 Subject: [PATCH] =?UTF-8?q?docs:=20Phase=209.78=20LLVM=20PoC=20-=20AI?= =?UTF-8?q?=E5=A4=A7=E4=BC=9A=E8=AD=B0=E7=B5=90=E6=9E=9C=E3=81=A8Copilot?= =?UTF-8?q?=E5=AE=9F=E8=A3=85=E3=82=AC=E3=82=A4=E3=83=89=E4=BD=9C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - AI大会議(Gemini/Codex)でLLVM実装戦略を策定 - inkwellクレート使用、Box型はptr型で表現、ランタイム委譲戦略 - Week 1: Hello World(return 42)の実装から開始 - 3週間で基本動作確認、目標10倍以上の性能向上 - Copilot用の詳細な実装ガイドとIssueテンプレート作成 Phase 8.6 VM性能改善(50.94倍高速化)完了を受けて、 次なる性能革命としてLLVMバックエンド実装を開始! 🚀 Ready to make Nyash fly with LLVM! --- docs/CURRENT_TASK.md | 73 +++-- .../llvm/AI-Conference-LLVM-Results.md | 156 ++++++++++ .../llvm/Copilot-Request-LLVM-PoC.md | 117 ++++++++ .../llvm/Phase-9.78-Implementation-Plan.md | 187 ++++++++++++ .../llvm/issue/001-setup-inkwell-hello-world.md | 266 ++++++++++++++++++ .../llvm/issue/GitHub-Issue-Template.md | 119 ++++++++ .../llvm/issue/MIR-Quick-Reference.md | 159 +++++++++++ .../native-plan/llvm/issue/Quick-Start-Guide.md | 134 +++++++++ docs/予定/native-plan/llvm/issue/README.md | 60 ++++ .../native-plan/llvm/issue/Week1-Roadmap.md | 88 ++++++ 10 files changed, 1342 insertions(+), 17 deletions(-) create mode 100644 docs/予定/native-plan/llvm/AI-Conference-LLVM-Results.md create mode 100644 docs/予定/native-plan/llvm/Copilot-Request-LLVM-PoC.md create mode 100644 docs/予定/native-plan/llvm/Phase-9.78-Implementation-Plan.md create mode 100644 docs/予定/native-plan/llvm/issue/001-setup-inkwell-hello-world.md create mode 100644 docs/予定/native-plan/llvm/issue/GitHub-Issue-Template.md create mode 100644 docs/予定/native-plan/llvm/issue/MIR-Quick-Reference.md create mode 100644 docs/予定/native-plan/llvm/issue/Quick-Start-Guide.md create mode 100644 docs/予定/native-plan/llvm/issue/README.md create mode 100644 docs/予定/native-plan/llvm/issue/Week1-Roadmap.md diff --git a/docs/CURRENT_TASK.md b/docs/CURRENT_TASK.md index 7f055a35..cbe3465b 100644 --- a/docs/CURRENT_TASK.md +++ b/docs/CURRENT_TASK.md @@ -1,4 +1,4 @@ -# 🎯 現在のタスク (2025-08-19 更新) +# 🎯 現在のタスク (2025-08-20 更新) ## 🎊 **Phase 9.75g-0 BID-FFI Plugin System - 完全完了!** 🎊 @@ -18,26 +18,45 @@ local db = new PostgreSQLBox() // 将来: プラグイン提供 local gpu = new CudaBox() // 将来: プラグイン提供 ``` -## 🎯 **次期最優先タスク: Phase 8.6 VM性能改善** +## ✅ **Phase 8.6 VM性能改善 - 完了!** -### 🚨 **緊急問題** -- **現状**: VMがインタープリターより**0.9倍遅い**(遅くなってる!) -- **目標**: **2倍以上高速化**でVM実行を実用レベルに -- **期間**: 1-2週間集中実装 -- **担当**: **Copilot**に引き継ぎ予定 +### 🎉 **VM性能改善 - 大成功報告!** +- **従来**: VMがインタープリターより0.9倍遅い(性能回帰) +- **🚀 最終達成**: **VM 50.94倍高速化達成!** (2025-08-20測定) +- **期間**: 1日で完了(2025-08-19) +- **担当**: **Copilot**主導(GitHub Issue #112, PR #113) -### 📊 **技術詳細** +### 📊 **技術詳細と成果** +- **MIR仕様**: **26命令**(ExternCall含む)で完全確定 - **VM実装**: 26命令MIR → バイトコード実行 -- **問題箇所**: 命令ディスパッチ・メモリアクセス・Box操作 -- **ベンチマーク**: `--benchmark --iterations 100`で測定可能 +- **改善内容**: + - Phase 1: デバッグ出力削除 → 18.84倍高速化 + - Phase 3: メモリ最適化 → 22.80倍高速化 + - 最終結果: **50.94倍高速化** +- **ベンチマーク結果** (2025-08-20): + - インタープリター: 78.66ms (1,271 ops/sec) + - VM: 1.54ms (64,761 ops/sec) + - **性能向上率: 50.94倍** 🚀 - **詳細**: `docs/予定/native-plan/issues/phase_8_6_vm_performance_improvement.md` -## 🎯 **後続開発計画** +## 🎯 **後続開発計画(戦略的更新済み)** -### **Phase 8.6完了後の展開** -1. **Phase 9.8**: BIDレジストリ自動化(WASM/VM/LLVM向けコード生成) +### **🆕 Phase 9.78: LLVM Proof of Concept(挿入案)** +- **目的**: LLVM実現可能性を3週間で検証 +- **タイミング**: Phase 8.6完了直後 +- **成功時**: Phase 9.8(完全版) → Phase 10.2(本格LLVM) +- **失敗時**: Phase 9.8(3バックエンド版) → Box統合 +- **戦略文書**: `docs/予定/native-plan/Phase-9.78-LLVM-PoC-Strategy.md` + +### **Phase 9.78後の展開** +1. **Phase 9.8**: BIDレジストリ自動化(LLVM対応込み or 3バックエンド版) 2. **Phase 9.9**: ExternCall権限管理(Sandbox/Allowlist) -3. **Phase 10**: LLVM Direct AOT(100-1000倍高速化) +3. **Phase 10**: LLVM Direct AOT(実現可能と判定した場合) + +### **🌟 重要な戦略的決定** +- **ネームスペース統合**: LLVM完成後に実施(4バックエンド全体最適化のため) +- **Box統合**: LLVM実現可能性確定後に実施(アーキテクチャ最適化のため) +- **優先順位**: VM性能 → LLVM PoC → BIDレジストリ → 本格実装 ### **最終目標** - **インタープリター併用戦略**: 開発時(即時実行)+ 本番時(AOT高性能) @@ -55,9 +74,29 @@ local gpu = new CudaBox() // 将来: プラグイン提供 - [phase_8_6_vm_performance_improvement.md](../予定/native-plan/issues/phase_8_6_vm_performance_improvement.md) - 詳細技術分析 - [copilot_issues.txt](../予定/native-plan/copilot_issues.txt) - 全体開発計画 +## 📋 **今日の重要決定事項(2025年8月20日)** + +### **1. Phase 8.6 VM性能改善 - 完了!** +- **達成**: VM 50.94倍高速化(目標の25倍以上!) +- **成果**: Copilotによる段階的最適化が大成功 +- **次**: Phase 9.78 LLVM PoCへ移行 + +### **2. Phase 9.78 LLVM PoC 開始準備** +- VM最適化完了により、LLVM実現可能性検証へ +- 3週間の検証期間で実装可能性を判定 +- AI大会議(Gemini/Codex)で戦略精緻化予定 + +### **3. 開発優先順位の更新** +``` +1. ✅ Phase 8.6 VM性能改善(完了!) +2. → Phase 9.78 LLVM PoC(次期開始) +3. → Phase 9.8 BIDレジストリ(LLVM対応込み) +4. → Box統合・ネームスペース統合(最適化後) +``` + --- -**最終更新**: 2025年8月19日 -**次回レビュー**: Phase 8.6 VM性能改善完了時 -**開発状況**: Phase 9.75g-0完了 → Phase 8.6へ移行 +**最終更新**: 2025年8月20日 +**次回レビュー**: Phase 9.78 LLVM PoC開始時 +**開発状況**: Phase 9.75g-0完了 → Phase 8.6完了 → Phase 9.78準備中 diff --git a/docs/予定/native-plan/llvm/AI-Conference-LLVM-Results.md b/docs/予定/native-plan/llvm/AI-Conference-LLVM-Results.md new file mode 100644 index 00000000..1b6bf7c3 --- /dev/null +++ b/docs/予定/native-plan/llvm/AI-Conference-LLVM-Results.md @@ -0,0 +1,156 @@ +# 🤖 AI大会議結果: LLVM PoC実装戦略統合文書 + +**作成日**: 2025年8月20日 +**参加AI**: Gemini先生、Codex先生、Claude +**目的**: Phase 9.78 LLVM PoC実装の統合戦略策定 + +## 📋 **エグゼクティブサマリー** + +AI大会議の結果、以下の統合戦略が決定されました: + +1. **技術基盤**: `inkwell`クレート + 既存ランタイム活用のハイブリッド戦略 +2. **Box型表現**: LLVM `ptr`型 + ランタイム関数によるメモリ管理 +3. **実装期間**: 3週間で基本動作確認(Hello World〜算術演算) +4. **性能目標**: 計算集約処理で数十倍の高速化実証 + +## 🎯 **統合実装戦略** + +### **Week 1: 基盤構築とHello World** + +**Gemini先生推奨アプローチ**: +```rust +// inkwellクレートで型安全なLLVM操作 +use inkwell::context::Context; +use inkwell::module::Module; +use inkwell::builder::Builder; + +struct CodegenContext<'ctx> { + context: &'ctx Context, + module: Module<'ctx>, + builder: Builder<'ctx>, + type_cache: HashMap>, +} +``` + +**Codex先生の具体的タスク**: +- ✅ `inkwell`セットアップ +- ✅ MIR `Const`, `Return`命令の変換 +- ✅ ランタイム関数宣言 (`nyash_alloc`, `nyash_free`) +- ✅ `.o`ファイル生成とCランタイムリンク + +**統合成果物**: `return 42`が動作するLLVM実装 + +### **Week 2: 制御フローとBox MVP** + +**Gemini先生のBox型戦略**: +```rust +// Box型 = LLVM ptr型として表現 +fn box_to_llvm_type<'ctx>(ctx: &CodegenContext<'ctx>) -> PointerType<'ctx> { + ctx.context.i8_type().ptr_type(AddressSpace::Generic) +} + +// ランタイム関数経由でBox操作 +extern "C" { + fn nyash_runtime_box_new(size: u64, align: u64) -> *mut c_void; + fn nyash_runtime_box_free(ptr: *mut c_void, size: u64, align: u64); +} +``` + +**Codex先生の実装順序**: +1. SSA/PHI命令の実装 +2. `Branch`, `Jump`による制御フロー +3. Box基本操作(new/free/deref) +4. `LLVMVerifyModule`による検証 + +**統合成果物**: 条件分岐とBox操作を含むプログラムの動作 + +### **Week 3: 統合とベンチマーク** + +**性能検証(Gemini先生)**: +- 計算集約的ベンチマーク実装 +- インタープリター/VM/LLVMの性能比較 +- 期待値: 数十倍の高速化実証 + +**堅牢性確保(Codex先生)**: +- 差分テスト(Interpreter vs LLVM) +- 最小最適化パス(`mem2reg`, `instcombine`) +- クラッシュ時の`.ll`ファイル保存 + +## 🔧 **技術的詳細** + +### **MIR→LLVM命令マッピング** + +| MIR命令 | LLVM IR | 実装方法 | +|---------|---------|----------| +| Const | ConstantInt/Float | inkwell定数生成 | +| BinOp(Add) | add/fadd | builder.build_add() | +| Compare | icmp/fcmp | builder.build_int_compare() | +| BoxCall | call @nyash_runtime_box_call | ランタイム委譲 | +| Branch | br | builder.build_conditional_branch() | +| Return | ret | builder.build_return() | + +### **エラー頻発箇所と対策** + +**Gemini先生の警告**: +- ❌ `Arc`をLLVMで再実装しない +- ✅ 既存ランタイムの`#[no_mangle] extern "C"`関数を呼ぶ + +**Codex先生の実装Tips**: +- `alloca`は関数エントリーブロックのみ +- GEPインデックスは`i32`型で統一 +- DataLayoutは必ずTargetMachineから取得 + +### **プラグイン統合(BID-FFI)** + +**Gemini先生**: C-ABIは既にLLVMと相性が良い +```llvm +declare i32 @nyash_plugin_invoke(i8*, i64, i8*, i64*) +``` + +**Codex先生**: リンク時に`.so`/`.a`を含める +```bash +cc -o output main.o nyash_runtime.o -lplugin +``` + +## 📊 **成功判定基準(統合版)** + +### **最小成功ライン(PoC達成)** +- ✅ 基本算術演算のLLVM実行 +- ✅ Box型の基本操作動作 +- ✅ Hello Worldレベルの出力 +- ✅ 10倍以上の性能向上実証 + +### **理想的成功(Phase 10への道筋)** +- 🌟 20個以上のMIR命令対応 +- 🌟 プラグイン呼び出し成功 +- 🌟 50倍以上の性能向上 +- 🌟 安定したエラーハンドリング + +## 🚀 **Copilotへの最終依頼文書** + +```markdown +## Phase 9.78: LLVM PoC実装依頼 + +**目標**: 3週間でNyash MIR→LLVM変換の基本実装 + +**技術スタック**: +- inkwellクレート(Gemini推奨) +- 既存ランタイム活用(Arc回避) +- C-ABIプラグイン統合 + +**実装優先順位**: +1. Week 1: Const/Return/基本setup → "return 42" +2. Week 2: 制御フロー/Box MVP → 条件分岐 +3. Week 3: 最適化/ベンチマーク → 性能実証 + +**成果物**: +- src/backend/llvm/compiler.rs +- ベンチマーク結果(10倍以上高速化) +- Phase 10実装計画 +``` + +## 🎉 **結論** + +AI大会議により、技術的に実現可能で、3週間で達成可能な明確な実装戦略が確立されました。inkwellによる型安全な実装と、既存ランタイム活用により、リスクを最小化しながら高速なLLVMバックエンドの実現が期待できます。 + +**次のアクション**: Copilotへの正式依頼とPhase 9.78開始!🚀 \ No newline at end of file diff --git a/docs/予定/native-plan/llvm/Copilot-Request-LLVM-PoC.md b/docs/予定/native-plan/llvm/Copilot-Request-LLVM-PoC.md new file mode 100644 index 00000000..e42dc954 --- /dev/null +++ b/docs/予定/native-plan/llvm/Copilot-Request-LLVM-PoC.md @@ -0,0 +1,117 @@ +# 🤖 Copilot様への依頼: Phase 9.78 LLVM PoC実装 + +**依頼日**: 2025年8月20日 +**期限**: 3週間(2025年9月10日) +**優先度**: 最高 + +## 📋 **依頼概要** + +Phase 8.6のVM性能改善で素晴らしい成果(50.94倍高速化)を達成していただきありがとうございました! + +次は、Nyash言語の更なる性能向上を目指し、**LLVMバックエンドのProof of Concept実装**をお願いします。 + +## 🎯 **依頼内容** + +### **目標** +3週間でMIR→LLVM IR変換の基本実装を完成させ、実現可能性を実証する + +### **成功基準** +1. 基本的なNyashプログラム(算術演算、条件分岐)がLLVM経由で実行可能 +2. インタープリター比10倍以上の性能向上を実証 +3. Phase 10本格実装への明確な道筋を確立 + +## 🛠️ **技術仕様** + +### **使用技術スタック** +```toml +[dependencies] +inkwell = { version = "0.5", features = ["llvm17-0"] } +``` + +### **実装アプローチ** +AI大会議(Gemini先生、Codex先生)の推奨に基づく: +- **inkwellクレート**による型安全なLLVM操作 +- **Box型はptr型**として表現、操作は既存ランタイムに委譲 +- **C-ABI経由**でプラグインとランタイム関数を呼び出し + +### **実装対象MIR命令(優先順)** +1. **Week 1**: Const, Return(最小限) +2. **Week 2**: BinOp, Compare, Branch, Jump, BoxNew/Free +3. **Week 3**: 最適化パス、ベンチマーク + +## 📁 **作成ファイル構成** + +``` +src/backend/llvm/ +├── mod.rs // エントリポイント +├── context.rs // LLVMコンテキスト管理 +├── types.rs // MIR→LLVM型変換 +├── builder.rs // IR生成ロジック +├── runtime.rs // ランタイム関数宣言 +└── optimizer.rs // 最適化パス + +src/backend/llvm_runtime/ +└── runtime.c // 最小ランタイム(nyash_alloc等) +``` + +## 📊 **週次マイルストーン** + +### **Week 1: Hello World動作** +- [ ] inkwellセットアップ完了 +- [ ] `return 42`がLLVM経由で動作 +- [ ] .oファイル生成成功 + +### **Week 2: 基本機能動作** +- [ ] 四則演算の実装 +- [ ] if文の動作確認 +- [ ] Box型の基本操作 + +### **Week 3: 性能実証** +- [ ] ベンチマーク実装 +- [ ] 10倍以上の高速化確認 +- [ ] 技術レポート作成 + +## 💡 **実装のヒント** + +### **Gemini先生のアドバイス** +- `Arc`の複雑なセマンティクスをLLVMで再実装しないこと +- Box操作は`nyash_runtime_box_*`関数経由で行う +- 計算集約的な処理に注力すれば数十倍の高速化が可能 + +### **Codex先生の実装Tips** +- allocaは関数エントリブロックのみに配置 +- GEPインデックスはi32型で統一 +- エラー時は.llファイルをダンプして原因調査 + +## 🚨 **重要な注意事項** + +1. **完璧を求めない** - 3週間でのPoC完成が最優先 +2. **既存資産の活用** - MIR構造、ランタイム関数を最大限再利用 +3. **段階的実装** - 最小限から始めて徐々に機能追加 + +## 📚 **参考資料** + +- [AI大会議結果](./AI-Conference-LLVM-Results.md) - 技術戦略の詳細 +- [実装計画書](./Phase-9.78-Implementation-Plan.md) - 週次スケジュール +- [MIR仕様](../../説明書/reference/execution-backend/mir-26-specification.md) - 命令セット詳細 + +## 🎉 **期待される成果** + +1. **技術的実証**: LLVMバックエンドの実現可能性確認 +2. **性能向上**: 10倍以上(理想的には50倍)の高速化 +3. **将来への道筋**: Phase 10での本格実装計画 + +## 🤝 **サポート体制** + +- **技術相談**: Claude、Gemini、Codexが随時サポート +- **進捗確認**: 週次でGitHub Issueにて状況共有 +- **問題解決**: ブロッカーがあれば即座にAIチームで対応 + +Copilot様の素晴らしい実装力に期待しています! +Phase 8.6のような劇的な成果を、LLVMでも実現しましょう!🚀 + +--- + +**依頼者**: moe-charm + AIチーム +**GitHub Issue**: #(作成予定) +**開始可能日**: 即時 \ No newline at end of file diff --git a/docs/予定/native-plan/llvm/Phase-9.78-Implementation-Plan.md b/docs/予定/native-plan/llvm/Phase-9.78-Implementation-Plan.md new file mode 100644 index 00000000..eb665d4a --- /dev/null +++ b/docs/予定/native-plan/llvm/Phase-9.78-Implementation-Plan.md @@ -0,0 +1,187 @@ +# 📋 Phase 9.78: LLVM PoC 実装計画書 + +**バージョン**: 1.0 +**作成日**: 2025年8月20日 +**ステータス**: 準備完了 + +## 🎯 **プロジェクト概要** + +### **目的** +3週間でNyash言語のLLVMバックエンド実現可能性を実証する + +### **成功基準** +- 基本的なNyashプログラムがLLVM経由で実行可能 +- インタープリター比10倍以上の性能向上 +- Phase 10本格実装への技術的道筋確立 + +## 📅 **3週間実装スケジュール** + +### **Week 1: 基盤構築(8/21-8/27)** + +#### **Day 1-2: 環境セットアップ** +```toml +# Cargo.toml +[dependencies] +inkwell = { version = "0.5", features = ["llvm17-0"] } +``` + +- [ ] inkwellクレート導入 +- [ ] LLVMコンテキスト初期化 +- [ ] 基本的なモジュール生成 + +#### **Day 3-4: 最小命令実装** +```rust +// 実装対象 +- Const(Integer/Float/Bool) +- Return +- 基本的な型マッピング +``` + +#### **Day 5-7: Hello World達成** +- [ ] ランタイム関数宣言 +- [ ] .oファイル生成 +- [ ] `return 42`の実行確認 + +**Week 1成果物**: 整数を返す最小プログラムのLLVM実行 + +### **Week 2: コア機能実装(8/28-9/3)** + +#### **Day 8-10: 算術演算と制御フロー** +```rust +// 実装対象 +- BinOp (Add/Sub/Mul/Div) +- Compare (Eq/Ne/Lt/Le/Gt/Ge) +- Branch/Jump +- PHI nodes +``` + +#### **Day 11-13: Box型MVP** +```rust +// Box操作の実装 +extern "C" { + fn nyash_runtime_box_new(size: u64, align: u64) -> *mut c_void; + fn nyash_runtime_box_free(ptr: *mut c_void); + fn nyash_runtime_box_deref(ptr: *mut c_void) -> *mut c_void; +} +``` + +#### **Day 14: 統合テスト** +- [ ] 条件分岐を含むプログラム +- [ ] Box操作を含むプログラム +- [ ] LLVMVerifyModuleによる検証 + +**Week 2成果物**: 制御フローとメモリ操作を含むプログラムの動作 + +### **Week 3: 最適化と検証(9/4-9/10)** + +#### **Day 15-16: 最適化パス** +```rust +// 基本最適化 +- mem2reg (alloca → SSA) +- instcombine (命令結合) +- reassociate (結合則) +``` + +#### **Day 17-18: ベンチマーク** +```bash +# 性能測定対象 +- フィボナッチ数列 +- 素数判定 +- 簡単な数値計算ループ +``` + +#### **Day 19-21: 文書化とレポート** +- [ ] 技術レポート作成 +- [ ] Phase 10実装計画 +- [ ] 性能評価結果 + +**Week 3成果物**: 性能実証とPhase 10への道筋 + +## 🛠️ **技術アーキテクチャ** + +### **ディレクトリ構造** +``` +src/backend/llvm/ +├── mod.rs // LLVMバックエンドエントリ +├── context.rs // CodegenContext管理 +├── types.rs // MIR→LLVM型変換 +├── builder.rs // LLVM IR生成 +├── runtime.rs // ランタイム関数定義 +└── optimizer.rs // 最適化パス管理 +``` + +### **主要コンポーネント** + +#### **CodegenContext** +```rust +pub struct CodegenContext<'ctx> { + context: &'ctx Context, + module: Module<'ctx>, + builder: Builder<'ctx>, + target_machine: TargetMachine, + type_cache: HashMap>, +} +``` + +#### **MIR→LLVM変換器** +```rust +pub fn lower_mir_to_llvm( + mir_module: &MirModule, + target_triple: &str, +) -> Result, CodegenError> { + // 1. コンテキスト初期化 + // 2. 型変換 + // 3. 関数生成 + // 4. 命令変換 + // 5. 最適化 + // 6. オブジェクトコード生成 +} +``` + +## 📊 **リスク管理** + +### **技術的リスク** + +| リスク | 影響度 | 対策 | +|--------|--------|------| +| inkwellバージョン依存 | 中 | LLVM17固定、CI環境統一 | +| Box型の複雑性 | 高 | ランタイム委譲戦略 | +| デバッグ困難性 | 中 | IR dump機能、差分テスト | + +### **スケジュールリスク** + +- **バッファ**: 各週に1日の予備日設定 +- **優先順位**: 基本動作 > 性能 > 機能網羅性 +- **早期失敗**: Week 1で実現困難判明時は即座に方針転換 + +## ✅ **成功指標** + +### **定量的指標** +- [ ] 10個以上のMIR命令をサポート +- [ ] 5個以上のテストプログラムが動作 +- [ ] インタープリター比10倍以上高速 + +### **定性的指標** +- [ ] コードの保守性(他の開発者が理解可能) +- [ ] エラーメッセージの有用性 +- [ ] 将来の拡張可能性 + +## 🚀 **開始準備チェックリスト** + +- [x] VM性能改善完了(50.94倍達成!) +- [x] AI大会議による戦略確定 +- [ ] Copilotへの正式依頼 +- [ ] 開発環境準備(LLVM17インストール) +- [ ] Week 1タスクのGitHub Issue作成 + +## 📝 **参考資料** + +- [AI大会議結果](./AI-Conference-LLVM-Results.md) +- [inkwellドキュメント](https://github.com/TheDan64/inkwell) +- [LLVM Language Reference](https://llvm.org/docs/LangRef.html) + +--- + +**承認者**: moe-charm +**実装担当**: Copilot + AIチーム +**レビュー**: Phase 9.78完了時 \ No newline at end of file diff --git a/docs/予定/native-plan/llvm/issue/001-setup-inkwell-hello-world.md b/docs/予定/native-plan/llvm/issue/001-setup-inkwell-hello-world.md new file mode 100644 index 00000000..3f62624a --- /dev/null +++ b/docs/予定/native-plan/llvm/issue/001-setup-inkwell-hello-world.md @@ -0,0 +1,266 @@ +# 🚀 Issue #001: LLVM PoC - inkwellセットアップとHello World実装 + +**タイプ**: Feature +**優先度**: Critical +**見積もり**: 3日 +**担当**: Copilot + +## 📋 概要 + +Phase 9.78 LLVM PoCの第一歩として、inkwellクレートを導入し、最小限のNyashプログラム(`return 42`)をLLVM経由で実行できるようにする。 + +## 🎯 成功条件 + +以下のNyashプログラムがLLVM経由で実行され、正しい終了コードを返すこと: + +```nyash +// test_return_42.nyash +static box Main { + main() { + return 42 + } +} +``` + +期待される動作: +```bash +$ cargo run --features llvm -- --backend llvm test_return_42.nyash +$ echo $? +42 +``` + +## 📝 実装タスク + +### 1. **Cargo.toml更新** ✅必須 +```toml +[dependencies] +inkwell = { version = "0.5", features = ["llvm17-0"] } + +[features] +llvm = ["inkwell"] +``` + +### 2. **基本構造の作成** ✅必須 +```rust +// src/backend/llvm/mod.rs +pub mod context; +pub mod compiler; + +use crate::mir::module::MirModule; +use crate::errors::RuntimeError; + +pub fn compile_to_object( + mir_module: &MirModule, + output_path: &str, +) -> Result<(), RuntimeError> { + let compiler = compiler::LLVMCompiler::new()?; + compiler.compile_module(mir_module, output_path) +} +``` + +### 3. **LLVMコンテキスト管理** ✅必須 +```rust +// src/backend/llvm/context.rs +use inkwell::context::Context; +use inkwell::module::Module; +use inkwell::builder::Builder; +use inkwell::targets::{Target, TargetMachine, TargetTriple, InitializationConfig}; + +pub struct CodegenContext<'ctx> { + pub context: &'ctx Context, + pub module: Module<'ctx>, + pub builder: Builder<'ctx>, + pub target_machine: TargetMachine, +} + +impl<'ctx> CodegenContext<'ctx> { + pub fn new(context: &'ctx Context, module_name: &str) -> Result { + // 1. ターゲット初期化 + Target::initialize_native(&InitializationConfig::default()) + .map_err(|e| format!("Failed to initialize native target: {}", e))?; + + // 2. モジュール作成 + let module = context.create_module(module_name); + + // 3. ターゲットマシン作成 + let triple = TargetMachine::get_default_triple(); + let target = Target::from_triple(&triple) + .map_err(|e| format!("Failed to get target: {}", e))?; + let target_machine = target + .create_target_machine( + &triple, + "generic", + "", + inkwell::OptimizationLevel::None, + inkwell::targets::RelocMode::Default, + inkwell::targets::CodeModel::Default, + ) + .ok_or_else(|| "Failed to create target machine".to_string())?; + + // 4. データレイアウト設定 + module.set_triple(&triple); + module.set_data_layout(&target_machine.get_target_data().get_data_layout()); + + Ok(Self { + context, + module, + builder: context.create_builder(), + target_machine, + }) + } +} +``` + +### 4. **最小限のコンパイラ実装** ✅必須 +```rust +// src/backend/llvm/compiler.rs +use inkwell::context::Context; +use inkwell::values::IntValue; +use crate::mir::module::MirModule; +use crate::mir::instruction::MirInstruction; +use super::context::CodegenContext; + +pub struct LLVMCompiler { + context: Context, +} + +impl LLVMCompiler { + pub fn new() -> Result { + Ok(Self { + context: Context::create(), + }) + } + + pub fn compile_module( + &self, + mir_module: &MirModule, + output_path: &str, + ) -> Result<(), String> { + let codegen = CodegenContext::new(&self.context, "nyash_module")?; + + // 1. main関数を探す + let main_func = mir_module.functions.iter() + .find(|f| f.name == "Main.main") + .ok_or("Main.main function not found")?; + + // 2. LLVM関数を作成 + let i32_type = codegen.context.i32_type(); + let fn_type = i32_type.fn_type(&[], false); + let llvm_func = codegen.module.add_function("main", fn_type, None); + + // 3. エントリブロックを作成 + let entry = codegen.context.append_basic_block(llvm_func, "entry"); + codegen.builder.position_at_end(entry); + + // 4. MIR命令を処理(今回はReturnのみ) + for block in &main_func.blocks { + for inst in &block.instructions { + match inst { + MirInstruction::Return(Some(value_id)) => { + // 簡易実装: 定数42を返すと仮定 + let ret_val = i32_type.const_int(42, false); + codegen.builder.build_return(Some(&ret_val)); + } + _ => { + // 他の命令は今回スキップ + } + } + } + } + + // 5. 検証 + if !llvm_func.verify(true) { + return Err("Function verification failed".to_string()); + } + + // 6. オブジェクトファイル生成 + codegen.target_machine + .write_to_file(&codegen.module, + inkwell::targets::FileType::Object, + output_path.as_ref()) + .map_err(|e| format!("Failed to write object file: {}", e))?; + + Ok(()) + } +} +``` + +### 5. **バックエンド統合** ✅必須 +```rust +// src/backend/mod.rsに追加 +#[cfg(feature = "llvm")] +pub mod llvm; + +// src/runner.rsのrun_with_backend関数に追加 +#[cfg(feature = "llvm")] +ExecutionBackend::LLVM => { + // 1. オブジェクトファイル生成 + let obj_path = "nyash_output.o"; + crate::backend::llvm::compile_to_object(&mir_module, obj_path)?; + + // 2. リンク(簡易版:システムのccを使用) + use std::process::Command; + let output = Command::new("cc") + .args(&[obj_path, "-o", "nyash_output"]) + .output() + .map_err(|e| RuntimeError::new(format!("Link failed: {}", e)))?; + + if !output.status.success() { + return Err(RuntimeError::new("Linking failed")); + } + + // 3. 実行 + let output = Command::new("./nyash_output") + .output() + .map_err(|e| RuntimeError::new(format!("Execution failed: {}", e)))?; + + // 4. 終了コードを返す + let exit_code = output.status.code().unwrap_or(-1); + Ok(Box::new(IntegerBox::new(exit_code as i64))) +} +``` + +## 🧪 テストケース + +```rust +// tests/llvm_hello_world.rs +#[test] +#[cfg(feature = "llvm")] +fn test_return_42() { + let source = r#" + static box Main { + main() { + return 42 + } + } + "#; + + // パース → MIR生成 → LLVM実行 + let result = compile_and_run_llvm(source); + assert_eq!(result, 42); +} +``` + +## 📚 参考資料 + +- [inkwell Examples](https://github.com/TheDan64/inkwell/tree/master/examples) +- [LLVM Tutorial](https://llvm.org/docs/tutorial/) +- [AI大会議結果](../AI-Conference-LLVM-Results.md) + +## ⚠️ 注意事項 + +1. **LLVM依存関係**: LLVM 17がシステムにインストールされている必要があります +2. **プラットフォーム**: まずはLinux/macOSで動作確認し、Windowsは後回し +3. **エラーハンドリング**: 今回は最小実装のため、詳細なエラー処理は省略 + +## 🎯 次のステップ + +このIssueが完了したら、次は: +- Issue #002: 基本的な算術演算の実装(BinOp) +- Issue #003: 定数値の実装(Const) + +--- + +**作成者**: Claude + moe-charm +**レビュアー**: AIチーム +**関連PR**: (作成予定) \ No newline at end of file diff --git a/docs/予定/native-plan/llvm/issue/GitHub-Issue-Template.md b/docs/予定/native-plan/llvm/issue/GitHub-Issue-Template.md new file mode 100644 index 00000000..84eabb7a --- /dev/null +++ b/docs/予定/native-plan/llvm/issue/GitHub-Issue-Template.md @@ -0,0 +1,119 @@ +# 🐙 GitHub Issue作成テンプレート + +以下の内容をGitHub Issueにコピペして使用してください。 + +--- + +## Issue Title: +`[Phase 9.78] LLVM PoC Week 1 - inkwellセットアップとHello World実装` + +## Labels: +- `enhancement` +- `Phase-9.78` +- `LLVM` +- `critical` + +## Assignees: +- GitHub Copilot + +## Milestone: +- Phase 9.78 LLVM PoC + +## Issue Body: + +```markdown +## 📋 概要 + +Phase 9.78 LLVM PoCの開始です!最初のステップとして、inkwellクレートを導入し、最小限のNyashプログラム(`return 42`)をLLVM経由で実行できるようにします。 + +## 🎯 成功条件 + +```nyash +// test_return_42.nyash +static box Main { + main() { + return 42 + } +} +``` + +上記プログラムがLLVM経由で実行され、終了コード42を返すこと。 + +## 📝 実装内容 + +1. **inkwellクレート導入** + - Cargo.tomlに依存関係追加 + - feature flag `llvm` の設定 + +2. **基本構造作成** + - `src/backend/llvm/` ディレクトリ + - context.rs, compiler.rs, mod.rs + +3. **最小限のコンパイラ実装** + - LLVMコンテキスト初期化 + - main関数の生成 + - return命令の処理 + - オブジェクトファイル出力 + +4. **統合** + - ExecutionBackendにLLVM追加 + - --backend llvm オプション対応 + +## 🔗 参考資料 + +- [詳細実装ガイド](https://github.com/moe-charm/nyash/blob/main/docs/予定/native-plan/llvm/issue/001-setup-inkwell-hello-world.md) +- [Week 1ロードマップ](https://github.com/moe-charm/nyash/blob/main/docs/予定/native-plan/llvm/issue/Week1-Roadmap.md) +- [AI大会議結果](https://github.com/moe-charm/nyash/blob/main/docs/予定/native-plan/llvm/AI-Conference-LLVM-Results.md) + +## ✅ 完了条件 + +- [ ] inkwellがビルドできる +- [ ] test_return_42.nyashがコンパイルできる +- [ ] 実行ファイルが終了コード42を返す +- [ ] 基本的なテストがパスする + +## 💬 備考 + +VM性能改善で素晴らしい成果(50.94倍高速化)を達成していただきありがとうございました! +LLVMでも同様の成功を期待しています。ブロッカーがあれば遠慮なくコメントしてください。 + +AIチーム(Claude, Gemini, Codex)が全力でサポートします!🚀 +``` + +--- + +## 📝 追加で作成するIssue + +Week 1の進捗に応じて、以下のIssueも順次作成: + +1. **Issue #002**: `[Phase 9.78] LLVM PoC - Const命令の実装` +2. **Issue #003**: `[Phase 9.78] LLVM PoC - 基本型システムの実装` +3. **Issue #004**: `[Phase 9.78] LLVM PoC - ランタイム関数宣言` +4. **Issue #005**: `[Phase 9.78] LLVM PoC Week 1 - 統合テスト` + +## 🏷️ 推奨ラベル構成 + +```yaml +Phase関連: + - Phase-9.78 + - Phase-8.6 (完了) + - Phase-9.75g-0 (完了) + +技術関連: + - LLVM + - MIR + - Performance + - Backend + +優先度: + - critical + - high + - medium + - low + +タイプ: + - enhancement + - bug + - documentation + - test +``` \ No newline at end of file diff --git a/docs/予定/native-plan/llvm/issue/MIR-Quick-Reference.md b/docs/予定/native-plan/llvm/issue/MIR-Quick-Reference.md new file mode 100644 index 00000000..7449942a --- /dev/null +++ b/docs/予定/native-plan/llvm/issue/MIR-Quick-Reference.md @@ -0,0 +1,159 @@ +# 📚 MIR クイックリファレンス for LLVM実装 + +## 🎯 Week 1で対応するMIR命令 + +### 1. **Const命令** +```rust +// MIR表現 +MirInstruction::Const(value_id, constant_value) + +// 例 +Const(v1, MirConstant::Integer(42)) +Const(v2, MirConstant::Float(3.14)) +Const(v3, MirConstant::Bool(true)) + +// LLVM変換 +let int_val = ctx.i32_type().const_int(42, false); +let float_val = ctx.f64_type().const_float(3.14); +let bool_val = ctx.bool_type().const_int(1, false); +``` + +### 2. **Return命令** +```rust +// MIR表現 +MirInstruction::Return(Option) + +// 例 +Return(Some(v1)) // 値を返す +Return(None) // voidを返す + +// LLVM変換 +builder.build_return(Some(&value)); +builder.build_return(None); +``` + +## 📄 参考: 現在のMIR構造 + +```rust +// src/mir/instruction.rs の主要部分 +pub enum MirInstruction { + // Week 1対象 + Const(ValueId, MirConstant), + Return(Option), + + // Week 2対象 + BinOp(ValueId, BinaryOp, ValueId, ValueId), + Compare(ValueId, CompareOp, ValueId, ValueId), + Branch(ValueId, BasicBlockId, BasicBlockId), + Jump(BasicBlockId), + + // Week 3以降 + BoxNew(ValueId, MirType), + BoxCall(ValueId, ValueId, String, Vec), + // ... 他の命令 +} + +// 定数の型 +pub enum MirConstant { + Integer(i64), + Float(f64), + Bool(bool), + String(String), + Null, +} +``` + +## 🔄 MIR→LLVM変換の基本パターン + +```rust +// 基本的な変換ループ +for instruction in &block.instructions { + match instruction { + MirInstruction::Const(value_id, constant) => { + let llvm_value = match constant { + MirConstant::Integer(n) => { + ctx.i64_type().const_int(*n as u64, true).into() + } + MirConstant::Float(f) => { + ctx.f64_type().const_float(*f).into() + } + MirConstant::Bool(b) => { + ctx.bool_type().const_int(*b as u64, false).into() + } + _ => todo!("Other constants"), + }; + // value_idとllvm_valueをマッピングに保存 + value_map.insert(*value_id, llvm_value); + } + + MirInstruction::Return(value_id) => { + match value_id { + Some(id) => { + let value = value_map.get(id).unwrap(); + builder.build_return(Some(value)); + } + None => { + builder.build_return(None); + } + } + } + + _ => {} // Week 1では他の命令は無視 + } +} +``` + +## 🎯 テスト用のMIRサンプル + +### 1. **return 42のMIR** +```rust +MirModule { + functions: vec![ + MirFunction { + name: "Main.main", + params: vec![], + return_type: MirType::Integer, + blocks: vec![ + BasicBlock { + id: 0, + instructions: vec![ + Const(v1, MirConstant::Integer(42)), + Return(Some(v1)), + ], + }, + ], + }, + ], +} +``` + +### 2. **簡単な計算のMIR**(Week 2用) +```rust +// return 10 + 5 +BasicBlock { + instructions: vec![ + Const(v1, MirConstant::Integer(10)), + Const(v2, MirConstant::Integer(5)), + BinOp(v3, BinaryOp::Add, v1, v2), + Return(Some(v3)), + ], +} +``` + +## 💡 実装のヒント + +1. **ValueIdマッピング**: `HashMap`で管理 +2. **型情報**: MIRは型情報を持つので、LLVM型への変換テーブルを作る +3. **基本ブロック**: MIRのBasicBlockIdをLLVMのBasicBlockにマッピング +4. **エラー処理**: 最初は`todo!()`でOK、後から実装 + +## 📁 関連ファイル + +- MIR定義: `src/mir/instruction.rs` +- MIR生成: `src/mir/lowering.rs` +- 参考実装: `src/backend/vm.rs`(VMのMIR処理) + +--- + +**注**: このリファレンスはWeek 1の実装に必要な最小限の情報です。 +詳細は実際のソースコードを参照してください。 \ No newline at end of file diff --git a/docs/予定/native-plan/llvm/issue/Quick-Start-Guide.md b/docs/予定/native-plan/llvm/issue/Quick-Start-Guide.md new file mode 100644 index 00000000..19abc805 --- /dev/null +++ b/docs/予定/native-plan/llvm/issue/Quick-Start-Guide.md @@ -0,0 +1,134 @@ +# 🚀 LLVM実装クイックスタートガイド + +## 📋 今すぐ始める手順 + +### 1. **環境準備**(5分) +```bash +# LLVM 17インストール確認 +llvm-config --version # 17.x.x が表示されること + +# Nyashプロジェクトで作業 +cd /path/to/nyash +git checkout -b feature/llvm-poc +``` + +### 2. **最初のコミット**(10分) +```bash +# Cargo.tomlを編集 +echo '[dependencies] +inkwell = { version = "0.5", features = ["llvm17-0"] } + +[features] +llvm = ["inkwell"]' >> Cargo.toml + +# ディレクトリ作成 +mkdir -p src/backend/llvm + +# 最初のファイル作成 +touch src/backend/llvm/mod.rs +touch src/backend/llvm/context.rs +touch src/backend/llvm/compiler.rs + +# コミット +git add . +git commit -m "feat(llvm): Add inkwell dependency and basic structure" +``` + +### 3. **最小実装のコピペ**(20分) + +**src/backend/llvm/mod.rs**: +```rust +pub mod context; +pub mod compiler; + +pub use compiler::compile_to_object; +``` + +**動作確認**: +```bash +cargo build --features llvm +``` + +### 4. **テストプログラム作成**(5分) +```bash +# テスト用Nyashファイル +cat > test_return_42.nyash << 'EOF' +static box Main { + main() { + return 42 + } +} +EOF +``` + +## 🔍 詰まったときの確認ポイント + +### **ビルドエラーの場合** +```bash +# LLVM関連の環境変数確認 +echo $LLVM_SYS_170_PREFIX + +# 設定されていない場合 +export LLVM_SYS_170_PREFIX=$(llvm-config --prefix) +``` + +### **inkwellのバージョン問題** +```toml +# 代替バージョン +inkwell = { git = "https://github.com/TheDan64/inkwell", branch = "master", features = ["llvm17-0"] } +``` + +### **リンクエラーの場合** +```bash +# pkg-configの確認 +pkg-config --libs --cflags llvm +``` + +## 📞 ヘルプが必要な場合 + +1. **GitHub Issue**にコメント +2. **具体的なエラーメッセージ**を貼る +3. **実行したコマンド**を記載 + +例: +``` +inkwellのビルドでエラーが発生しました。 + +エラー: +``` +error: failed to run custom build command for `llvm-sys v170.0.1` +``` + +実行コマンド: +``` +cargo build --features llvm +``` + +環境: +- OS: Ubuntu 22.04 +- LLVM: 17.0.6 +- Rust: 1.75.0 +``` + +## ✅ 最初の成功確認 + +以下が動けば第一歩成功! +```bash +# ビルドが通る +cargo build --features llvm + +# テストが実行できる(まだ失敗してOK) +cargo test --features llvm test_llvm +``` + +## 🎯 次のステップ + +1. **context.rs**の実装 +2. **compiler.rs**の実装 +3. **return 42**の動作確認 + +詳細は[001-setup-inkwell-hello-world.md](./001-setup-inkwell-hello-world.md)を参照! + +--- + +**Remember**: 完璧より進捗!最初は動くことが最優先です。🚀 \ No newline at end of file diff --git a/docs/予定/native-plan/llvm/issue/README.md b/docs/予定/native-plan/llvm/issue/README.md new file mode 100644 index 00000000..7c9e135f --- /dev/null +++ b/docs/予定/native-plan/llvm/issue/README.md @@ -0,0 +1,60 @@ +# 📚 LLVM PoC Issue ドキュメント一覧 + +## 🎯 Copilot様へ:最初に読むファイル + +1. **[Quick-Start-Guide.md](./Quick-Start-Guide.md)** 🚀 + - 今すぐ始める手順 + - 環境セットアップ + - 最初のコミット方法 + +2. **[001-setup-inkwell-hello-world.md](./001-setup-inkwell-hello-world.md)** 📋 + - **最初のIssue内容** + - 詳細な実装手順 + - コード例とテストケース + +3. **[Week1-Roadmap.md](./Week1-Roadmap.md)** 📅 + - Week 1全体の計画 + - Issue実装順序 + - 成功条件 + +## 📖 参考資料 + +- **[MIR-Quick-Reference.md](./MIR-Quick-Reference.md)** + - MIR命令の説明 + - LLVM変換パターン + - テスト用サンプル + +- **[GitHub-Issue-Template.md](./GitHub-Issue-Template.md)** + - GitHub Issue作成用テンプレート + - ラベル設定 + - マイルストーン + +## 🔗 関連ドキュメント(上位階層) + +- [AI大会議結果](../AI-Conference-LLVM-Results.md) +- [実装計画書](../Phase-9.78-Implementation-Plan.md) +- [Copilot依頼文書](../Copilot-Request-LLVM-PoC.md) + +## 💬 重要メッセージ + +**Copilot様へ** + +Phase 8.6での素晴らしい成果(50.94倍高速化)に続き、LLVMでも革命的な性能向上を期待しています! + +**開始方法**: +1. まず[Quick-Start-Guide.md](./Quick-Start-Guide.md)を読む +2. [001-setup-inkwell-hello-world.md](./001-setup-inkwell-hello-world.md)の実装を開始 +3. 詰まったらすぐにGitHub Issueでヘルプ要請 + +**サポート体制**: +- AIチーム(Claude, Gemini, Codex)が全力サポート +- 技術的な質問は遠慮なく +- 小さな成功を積み重ねましょう + +Let's make Nyash fly with LLVM! 🚀✨ + +--- + +**最終更新**: 2025年8月20日 +**作成者**: Claude + moe-charm +**Phase**: 9.78 LLVM PoC \ No newline at end of file diff --git a/docs/予定/native-plan/llvm/issue/Week1-Roadmap.md b/docs/予定/native-plan/llvm/issue/Week1-Roadmap.md new file mode 100644 index 00000000..7386c8bc --- /dev/null +++ b/docs/予定/native-plan/llvm/issue/Week1-Roadmap.md @@ -0,0 +1,88 @@ +# 📅 Week 1 ロードマップ: LLVM基盤構築 + +**期間**: 2025年8月21日〜8月27日 +**目標**: LLVMバックエンドの基盤を構築し、最小限のプログラムを実行可能にする + +## 🎯 Week 1の全体目標 + +「return 42」レベルの超シンプルなNyashプログラムが、LLVM経由で実行できる状態を達成する。 + +## 📋 Issue実装順序 + +### **Issue #001: inkwellセットアップとHello World** 🚀最初にこれ! +- **期間**: Day 1-3 +- **内容**: 環境構築と「return 42」の実行 +- **成功条件**: LLVMでコンパイルした実行ファイルが終了コード42を返す +- **ファイル**: [001-setup-inkwell-hello-world.md](./001-setup-inkwell-hello-world.md) + +### **Issue #002: Const命令の実装**(#001完了後) +- **期間**: Day 3-4 +- **内容**: MIR Const命令をLLVM定数に変換 +- **対象**: Integer, Float, Bool定数 +- **テスト**: `return 100`, `return 3.14`, `return true` + +### **Issue #003: 基本的な型システム**(#002と並行可能) +- **期間**: Day 4-5 +- **内容**: MIR型→LLVM型のマッピング実装 +- **対象**: i32/i64, f64, bool, 関数型 +- **成果**: type_cache の実装 + +### **Issue #004: ランタイム関数宣言**(#003完了後) +- **期間**: Day 5-6 +- **内容**: nyash_runtime_* 関数の宣言 +- **対象**: alloc, free, print_int(デバッグ用) +- **準備**: 最小限のCランタイム作成 + +### **Issue #005: Week 1統合テスト**(最終日) +- **期間**: Day 7 +- **内容**: 複数の小さなプログラムでテスト +- **確認**: CI/CDでのLLVMビルド +- **文書**: Week 2への引き継ぎ事項 + +## 🔄 実装の流れ + +```mermaid +graph LR + A[Issue #001
環境構築] --> B[Issue #002
Const実装] + A --> C[Issue #003
型システム] + B --> D[Issue #004
ランタイム] + C --> D + D --> E[Issue #005
統合テスト] +``` + +## ✅ Week 1完了時のチェックリスト + +- [ ] inkwellクレートが正常に動作 +- [ ] 「return 42」がLLVM経由で実行可能 +- [ ] Integer/Float/Bool定数がサポート済み +- [ ] 基本的な型変換が実装済み +- [ ] 最小限のランタイム関数が宣言済み +- [ ] 5個以上のテストケースがパス + +## 📊 リスクと対策 + +| リスク | 対策 | +|--------|------| +| LLVM環境構築で詰まる | Docker環境を準備、LLVM17固定 | +| inkwellのAPIが複雑 | 公式exampleを参考に最小実装 | +| リンクエラー | まずは静的リンク、動的は後回し | + +## 💡 成功のコツ + +1. **小さく始める**: return 42が動けば大成功 +2. **エラーを恐れない**: LLVMのエラーメッセージは親切 +3. **IR出力を確認**: `--emit-llvm`でIRをダンプして確認 +4. **既存コード活用**: VM/WASMバックエンドの構造を参考に + +## 🎉 Week 1成功時の次のステップ + +**Week 2では以下に取り組みます**: +- BinOp(四則演算)の実装 +- Branch/Jumpによる制御フロー +- Box型の基本操作 +- PHIノードの実装 + +--- + +**注意**: 各Issueは独立して実装可能ですが、推奨順序に従うとスムーズです。 +ブロッカーがあれば即座にAIチームに相談してください! \ No newline at end of file