# 📅 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<br/>環境構築] --> B[Issue #002<br/>Const実装]
    A --> C[Issue #003<br/>型システム]
    B --> D[Issue #004<br/>ランタイム]
    C --> D
    D --> E[Issue #005<br/>統合テスト]
```

## ✅ 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チームに相談してください！