docs(phase130): JoinIR→LLVM ベースライン確立
Phase 130完了: JoinIR → LLVM 経路の現状を観測・記録
実施内容:
- 代表ケース7本選定(selfhost/hako_check/JoinIR各系統)
- Rust VM / LLVM harness 両経路でテスト実行
- 実行結果を表形式で記録(観測専用、修正なし)
- Phase 131への引き継ぎ事項を整理
テスト結果:
- Rust VM: 6/7 PASS (85.7%)
- peek_expr_block, loop_min_while, phase123_simple_if,
phase123_while_loop, joinir_if_select_simple, joinir_min_loop
- FAIL: esc_dirname_smoke (ConsoleBox未登録)
- LLVM harness: 0/7実行 (Mock backend、要--features llvm)
- MIRコンパイルは全て成功
- 実LLVM実行は未対応
検出された問題点:
1. LLVM Backend未対応(最重要)
- --features llvm ビルドが必要
- Mock backend実行中
2. ConsoleBox未登録問題
- Rust VM環境での登録不備
- Phase 15.5方針との衝突
3. JoinIR → LLVM経路の不明確性
- MIR → LLVM IR lowering未検証
成果物:
- docs/development/current/main/phase130_joinir_llvm_baseline.md
- 代表ケース選定理由・実行コマンド整理
- 実行結果詳細・問題点分析
- Phase 131引き継ぎ事項
- CURRENT_TASK.md: Phase 130セクション追加
- 30-Backlog.md: Phase 131予告追加
次フェーズ: Phase 131 - JoinIR→LLVM 個別修正ライン
This commit is contained in:
119
CURRENT_TASK.md
119
CURRENT_TASK.md
@ -954,7 +954,124 @@ if mode == "w" {
|
|||||||
✅ 環境変数フラグ削除により実装簡素化
|
✅ 環境変数フラグ削除により実装簡素化
|
||||||
✅ Fail-Fast 原則に準拠したエラーハンドリング
|
✅ Fail-Fast 原則に準拠したエラーハンドリング
|
||||||
|
|
||||||
**次のフェーズ**: selfhost Stage-4 拡張 or 次の大型改善フェーズ
|
**次のフェーズ**: Phase 130 - JoinIR → LLVM ベースライン確立
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🎯 Phase 130: JoinIR → LLVM ベースライン確立(完了)✅ 2025-12-04
|
||||||
|
|
||||||
|
### 📋 実装内容
|
||||||
|
|
||||||
|
**目的**: JoinIR で selfhost/hako_check まで安定した現在の状態から、JoinIR → LLVM 経路の現状を観測・記録
|
||||||
|
|
||||||
|
**スコープ**:
|
||||||
|
- ✅ 代表ケース選定(7本)
|
||||||
|
- ✅ LLVM実行コマンドと環境変数の整理
|
||||||
|
- ✅ 実行結果(Rust VM / LLVM harness)を記録
|
||||||
|
- ✅ **観測専用**:実装修正は Phase 131 以降に回す
|
||||||
|
|
||||||
|
### 📊 実行結果
|
||||||
|
|
||||||
|
**代表ケース(7本)**:
|
||||||
|
1. apps/tests/peek_expr_block.hako - 式ブロック・peek構文
|
||||||
|
2. apps/tests/loop_min_while.hako - ループ・PHI命令
|
||||||
|
3. apps/tests/esc_dirname_smoke.hako - ConsoleBox・複雑な制御フロー
|
||||||
|
4. local_tests/phase123_simple_if.hako - シンプルなif文
|
||||||
|
5. local_tests/phase123_while_loop.hako - while loop
|
||||||
|
6. apps/tests/joinir_if_select_simple.hako - IfSelect基本ケース
|
||||||
|
7. apps/tests/joinir_min_loop.hako - 最小ループ
|
||||||
|
|
||||||
|
**テスト結果統計**:
|
||||||
|
|
||||||
|
| 経路 | PASS | FAIL | 合計 | 成功率 |
|
||||||
|
|--------------|------|------|------|--------|
|
||||||
|
| Rust VM | 6 | 1 | 7 | 85.7% |
|
||||||
|
| LLVM harness | 0 | 0 | 7 | 0% (Mock実行) |
|
||||||
|
|
||||||
|
**Rust VM結果詳細**:
|
||||||
|
- ✅ PASS: 6/7
|
||||||
|
- peek_expr_block, loop_min_while, phase123_simple_if, phase123_while_loop, joinir_if_select_simple, joinir_min_loop
|
||||||
|
- ❌ FAIL: 1/7
|
||||||
|
- esc_dirname_smoke.hako: ConsoleBox未登録エラー
|
||||||
|
|
||||||
|
**LLVM harness結果詳細**:
|
||||||
|
- ⚠️ 全7テストがMock backend実行(実LLVM未対応)
|
||||||
|
- ✅ MIRコンパイルは全て成功
|
||||||
|
- ❌ `--features llvm` ビルドが必要と判明
|
||||||
|
|
||||||
|
### 🔍 検出された問題点
|
||||||
|
|
||||||
|
#### 1. LLVM Backend未対応(最重要)
|
||||||
|
**現象**: 全テストがMock backend実行
|
||||||
|
```
|
||||||
|
🔧 Mock LLVM Backend Execution:
|
||||||
|
Build with --features llvm-inkwell-legacy for Rust/inkwell backend,
|
||||||
|
or set NYASH_LLVM_OBJ_OUT and NYASH_LLVM_USE_HARNESS=1 for harness.
|
||||||
|
```
|
||||||
|
|
||||||
|
**原因**: `--features llvm` ビルドが必要(現在のビルドでは無効化)
|
||||||
|
|
||||||
|
**影響**: 全7テストケース
|
||||||
|
|
||||||
|
#### 2. ConsoleBox未登録問題
|
||||||
|
**現象**: esc_dirname_smoke.hakoで失敗
|
||||||
|
```
|
||||||
|
[ERROR] ❌ [rust-vm] VM error: Invalid instruction: NewBox ConsoleBox:
|
||||||
|
invalid operation: Unknown Box type: ConsoleBox. Available: Main
|
||||||
|
```
|
||||||
|
|
||||||
|
**原因**: Rust VM環境でConsoleBoxが登録されていない(Phase 15.5の "Everything is Plugin" 方針と衝突)
|
||||||
|
|
||||||
|
**影響**: Console出力を使用するテストケース
|
||||||
|
|
||||||
|
#### 3. JoinIR → LLVM経路の不明確性
|
||||||
|
**観測事実**:
|
||||||
|
- JoinIR → MIR変換: ✅ 全テストで成功
|
||||||
|
- MIR → LLVM IR: ⚠️ Mock実行(未検証)
|
||||||
|
- LLVM実行: ❌ 未対応
|
||||||
|
|
||||||
|
### 📄 成果物
|
||||||
|
|
||||||
|
**ドキュメント**: `docs/development/current/main/phase130_joinir_llvm_baseline.md`
|
||||||
|
- 代表ケース7本の選定理由
|
||||||
|
- 実行コマンド・環境変数の整理
|
||||||
|
- 実行結果の詳細記録(表形式)
|
||||||
|
- 検出された問題点の分析
|
||||||
|
- Phase 131への引き継ぎ事項
|
||||||
|
|
||||||
|
### 🏆 Phase 130 の価値
|
||||||
|
|
||||||
|
**観測専用フェーズの成功**:
|
||||||
|
- ✅ 実装修正なし(赤は赤のまま記録)
|
||||||
|
- ✅ JoinIR → LLVM 経路の現状を可視化
|
||||||
|
- ✅ Phase 131 以降の優先度付けが明確化
|
||||||
|
|
||||||
|
**重要な発見**:
|
||||||
|
1. LLVM backend機能が現在のビルドで無効化
|
||||||
|
2. ConsoleBoxのRust VM登録問題が再発
|
||||||
|
3. JoinIR → MIR変換は全て正常動作
|
||||||
|
4. 実LLVM実行には `--features llvm` ビルドが必要
|
||||||
|
|
||||||
|
### 🚀 次のステップ
|
||||||
|
|
||||||
|
**Phase 131: JoinIR→LLVM 個別修正ライン**(予定)
|
||||||
|
|
||||||
|
Phase 130 で検出された問題を優先度順に潰す:
|
||||||
|
|
||||||
|
#### 優先度1: LLVM Backend有効化
|
||||||
|
- [ ] `cargo build --release --features llvm` 実行
|
||||||
|
- [ ] Python/llvmlite 環境確認(`src/llvm_py/venv`)
|
||||||
|
- [ ] 実LLVM実行での7テスト再実行
|
||||||
|
|
||||||
|
#### 優先度2: ConsoleBox問題解決
|
||||||
|
- [ ] Rust VMでのConsoleBox登録状況調査
|
||||||
|
- [ ] Phase 122で解決済みの内容との差分確認
|
||||||
|
- [ ] PluginBox登録機構の修正(必要に応じて)
|
||||||
|
|
||||||
|
#### 優先度3: LLVM IR生成確認
|
||||||
|
- [ ] MIR → LLVM IR lowering実装状況調査
|
||||||
|
- [ ] 未対応命令の洗い出し(BoxCall/NewBox/PHI等)
|
||||||
|
- [ ] 最小ケース(joinir_if_select_simple.hako)での詳細検証
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@ -1,9 +1,17 @@
|
|||||||
# Self Current Task — Backlog (main)
|
# Self Current Task — Backlog (main)
|
||||||
|
|
||||||
短期(JoinIR/selfhost ライン 第2章)
|
短期(JoinIR/selfhost ライン 第3章 - LLVM統合)
|
||||||
- selfhost Stage‑3 代表パスの安定化(JoinIR Strict 経由で JSON emit まで通す)。
|
- ✅ Phase 130: JoinIR → LLVM ベースライン確立(完了 2025-12-04)
|
||||||
- `hako_check` ラインの整理(可能な限り JoinIR 経由に寄せ、分岐やフォールバックを可視化)。
|
- 🎯 **Phase 131: JoinIR→LLVM 個別修正ライン**(次の最優先タスク)
|
||||||
- CURRENT_TASK / Phase docs を「selfhost/JoinIR 第2章」視点で更新。
|
- 優先度1: LLVM Backend有効化(`--features llvm` ビルド、実LLVM実行)
|
||||||
|
- 優先度2: ConsoleBox問題解決(Rust VM登録問題の根治)
|
||||||
|
- 優先度3: LLVM IR生成確認(MIR → LLVM lowering実装状況調査)
|
||||||
|
- selfhost Stage‑3 代表パスの LLVM 実行(7テストケースを実LLVM経由で検証)
|
||||||
|
|
||||||
|
完了済み(JoinIR/selfhost ライン 第2章)
|
||||||
|
- ✅ selfhost Stage‑3 代表パスの安定化(Phase 120完了)
|
||||||
|
- ✅ `hako_check` ラインの JoinIR 統合(Phase 121-124完了)
|
||||||
|
- ✅ CURRENT_TASK / Phase docs 更新完了
|
||||||
|
|
||||||
中期
|
中期
|
||||||
- VInvoke(vector)戻り型の正道化(toml 記述 or NyRT 期待フラグ)。
|
- VInvoke(vector)戻り型の正道化(toml 記述 or NyRT 期待フラグ)。
|
||||||
|
|||||||
@ -34,166 +34,358 @@ Phase 131+: 個別の LLVM 側問題を潰す
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🏗️ 4 つのタスク
|
## 🏗️ Task 1: 代表ケース選定(完了)✅
|
||||||
|
|
||||||
### Task 1: 代表ケース選定(LLVM 用)
|
Phase 130 では以下の **7 本** を代表ケースとして選定しました:
|
||||||
|
|
||||||
**ファイル**: `docs/development/current/main/phase130_joinir_llvm_baseline.md`(このファイル)
|
| # | カテゴリ | ファイル | 用途 | 選定理由 |
|
||||||
|
|---|---------|---------|-----|---------|
|
||||||
|
| 1 | selfhost Stage-3 | `apps/tests/peek_expr_block.hako` | 式ブロック・peek構文 | Phase 120で検証済み、基本的な式評価 |
|
||||||
|
| 2 | selfhost Stage-3 | `apps/tests/loop_min_while.hako` | ループ・条件分岐 | Phase 120で検証済み、ループとPHI |
|
||||||
|
| 3 | selfhost Stage-3 | `apps/tests/esc_dirname_smoke.hako` | ConsoleBox.println・複合処理 | Phase 120/122で検証済み、複雑な制御フロー |
|
||||||
|
| 4 | hako_check / Phase 123 | `local_tests/phase123_simple_if.hako` | シンプルなif文 | Phase 124でJoinIR専用化テスト済み |
|
||||||
|
| 5 | hako_check / Phase 123 | `local_tests/phase123_while_loop.hako` | while loop | Phase 124でJoinIR専用化テスト済み |
|
||||||
|
| 6 | JoinIR/PHI | `apps/tests/joinir_if_select_simple.hako` | IfSelect(単純) | JoinIR If Lowering基本ケース |
|
||||||
|
| 7 | JoinIR/PHI | `apps/tests/joinir_min_loop.hako` | 最小ループ | JoinIR Loop基本ケース |
|
||||||
|
|
||||||
**やること**:
|
### 選定基準
|
||||||
|
- **多様性**: selfhost/hako_check/JoinIR の3カテゴリから選定
|
||||||
1. いまの代表パスから、LLVM でも意味があるやつをピックアップ:
|
- **段階性**: 基本→複雑の順でカバー
|
||||||
|
- **実績**: Phase 120-124 で検証済みのケースを優先
|
||||||
| カテゴリ | ファイル | 用途 |
|
- **LLVM適合性**: Console/StringBox/基本制御フローを含む
|
||||||
|---------|---------|-----|
|
|
||||||
| selfhost Stage-3 | `apps/tests/peek_expr_block.hako` | 式ブロック・peek構文 |
|
|
||||||
| selfhost Stage-3 | `apps/tests/loop_min_while.hako` | ループ・条件分岐 |
|
|
||||||
| selfhost Stage-3 | `apps/tests/esc_dirname_smoke.hako` | ConsoleBox.println・複合処理 |
|
|
||||||
| hako_check | Phase 121 から適切な最小ケース | hako_check 診断ロジック |
|
|
||||||
| JoinIR/PHI | Phase 33–67 の if/loop PHI テスト | PHI マージ・LoopForm |
|
|
||||||
|
|
||||||
2. できれば 5〜8 本に絞る(あれもこれもはやらない)
|
|
||||||
|
|
||||||
3. 各代表ケースについて、この docs に記載:
|
|
||||||
- `.hako` パス
|
|
||||||
- 期待される挙動
|
|
||||||
- 既知の過去フェーズ(Phase 15 / 120)の結果(もしあれば)
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Task 2: LLVM 実行コマンドの整理
|
## 🔧 Task 2: LLVM 実行コマンドの整理
|
||||||
|
|
||||||
**やること**:
|
### 環境変数一覧
|
||||||
|
|
||||||
1. Phase 130 用の「代表コマンド」を docs に固定:
|
| 環境変数 | 用途 | 必須 |
|
||||||
- **Rust VM 対応コマンド**(比較用):
|
|---------|-----|------|
|
||||||
```bash
|
| `NYASH_LLVM_USE_HARNESS=1` | Python/llvmlite ハーネス使用 | ✅ LLVM実行時必須 |
|
||||||
./target/release/nyash --backend vm apps/tests/peek_expr_block.hako
|
| `LLVM_SYS_180_PREFIX=$(llvm-config-18 --prefix)` | LLVM 18 設定 | ✅ LLVM実行時必須 |
|
||||||
```
|
|
||||||
- **LLVM ハーネス対応コマンド**:
|
|
||||||
```bash
|
|
||||||
LLVM_SYS_180_PREFIX=$(llvm-config-18 --prefix) \
|
|
||||||
NYASH_LLVM_USE_HARNESS=1 \
|
|
||||||
./target/release/nyash --backend llvm apps/tests/peek_expr_block.hako
|
|
||||||
```
|
|
||||||
- **v2 スモーク実行**(統合テスト):
|
|
||||||
```bash
|
|
||||||
./tools/smokes/v2/run.sh --profile integration
|
|
||||||
```
|
|
||||||
|
|
||||||
2. 各代表 .hako に対して、どう実行するかを docs に例として明記
|
### 実行コマンド例
|
||||||
|
|
||||||
3. 環境変数一覧:
|
#### Rust VM 実行(比較用)
|
||||||
- `NYASH_LLVM_USE_HARNESS=1` → Python/llvmlite ハーネス使用
|
```bash
|
||||||
- `LLVM_SYS_180_PREFIX=$(llvm-config-18 --prefix)` → LLVM 18 設定
|
./target/release/nyash --backend vm apps/tests/peek_expr_block.hako
|
||||||
|
```
|
||||||
|
|
||||||
|
#### LLVM ハーネス実行
|
||||||
|
```bash
|
||||||
|
LLVM_SYS_180_PREFIX=$(llvm-config-18 --prefix) \
|
||||||
|
NYASH_LLVM_USE_HARNESS=1 \
|
||||||
|
./target/release/nyash --backend llvm apps/tests/peek_expr_block.hako
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 統合スモークテスト(v2プロファイル)
|
||||||
|
```bash
|
||||||
|
# 全integration テスト
|
||||||
|
./tools/smokes/v2/run.sh --profile integration
|
||||||
|
|
||||||
|
# Phase 120 stable paths(Rust VM)
|
||||||
|
./tools/smokes/v2/run.sh --profile integration --filter "*phase120_stable_paths*"
|
||||||
|
```
|
||||||
|
|
||||||
|
### 各代表ケースの実行方法
|
||||||
|
|
||||||
|
代表ケースごとに、以下の2パターンで実行:
|
||||||
|
|
||||||
|
1. **Rust VM**(比較軸・greenベースライン):
|
||||||
|
```bash
|
||||||
|
./target/release/nyash --backend vm <HAKO_FILE>
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **LLVM harness**(観測対象):
|
||||||
|
```bash
|
||||||
|
LLVM_SYS_180_PREFIX=$(llvm-config-18 --prefix) \
|
||||||
|
NYASH_LLVM_USE_HARNESS=1 \
|
||||||
|
./target/release/nyash --backend llvm <HAKO_FILE>
|
||||||
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Task 3: 実行とベースライン記録(観測専用)
|
## 📊 Task 3: 実行結果とベースライン記録
|
||||||
|
|
||||||
**やること**:
|
### 凡例
|
||||||
|
- ✅ PASS: 正常終了、期待される出力
|
||||||
1. 代表 .hako を、少なくともこの 2 パターンで実行:
|
- ⚠️ PARTIAL: 部分的に動作、警告あり
|
||||||
- ✅ Rust VM(すでに green の比較軸)
|
- ❌ FAIL: エラーで失敗
|
||||||
- 🔧 LLVM backend(NYASH_LLVM_USE_HARNESS=1 --backend llvm)
|
|
||||||
|
|
||||||
2. それぞれについて:
|
|
||||||
- 実行結果: ✅ / ⚠️ / ❌
|
|
||||||
- エラーの場合:
|
|
||||||
- エラーメッセージ
|
|
||||||
- どのフェーズで失敗したか(parse / JoinIR / MIR / LLVM / 実行時)
|
|
||||||
- 既知の LLVM 側制約(Phase 15 docs)と照らし合わせる
|
|
||||||
|
|
||||||
3. 結果を表形式でまとめる:
|
|
||||||
|
|
||||||
```markdown
|
|
||||||
### apps/tests/esc_dirname_smoke.hako
|
|
||||||
|
|
||||||
| 経路 | 結果 | メモ |
|
|
||||||
|--------------|-------|-------------------------------------------|
|
|
||||||
| Rust VM | ✅ | Phase 122 で ConsoleBox.println 問題解決済み |
|
|
||||||
| LLVM harness | ❌ | [ERROR] 未対応 BoxCall / console access issue |
|
|
||||||
```
|
|
||||||
|
|
||||||
4. **この Phase では「修正せず、観測だけ」で止める**
|
|
||||||
- 赤いところは「Phase 131 以降の TODO」として列挙しておく
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Task 4: CURRENT_TASK / Backlog 更新
|
### 1. apps/tests/peek_expr_block.hako
|
||||||
|
|
||||||
**ファイル**:
|
**期待される挙動**: peek式を使ったブロック式評価(match式、ブロック式で値を返す)
|
||||||
- `CURRENT_TASK.md`
|
|
||||||
- `docs/development/current/main/30-Backlog.md`
|
|
||||||
|
|
||||||
**やること**:
|
**実行結果**:
|
||||||
|
|
||||||
1. CURRENT_TASK.md に Phase 130 セクション追加:
|
| 経路 | 結果 | メモ |
|
||||||
```markdown
|
|--------------|-------|------|
|
||||||
### Phase 130: JoinIR → LLVM ベースライン確立 ✅
|
| Rust VM | ✅ | 正常動作。"found one"出力、RC=1(main関数の戻り値) |
|
||||||
|
| LLVM harness | ⚠️ | Mock backend使用中。MIRコンパイル成功、実LLVM実行は未対応 |
|
||||||
|
|
||||||
**完了内容**:
|
**VM出力**: `found one`, `RC: 1`
|
||||||
- 代表パス 8 本を選定(selfhost/hako_check/JoinIR系)
|
|
||||||
- Rust VM vs LLVM ハーネスで両実行結果を記録
|
|
||||||
- LLVM 側の Known Issues 一覧(赤いところ)を確認
|
|
||||||
|
|
||||||
**テスト結果**:
|
---
|
||||||
- Rust VM: X/8 PASS
|
|
||||||
- LLVM harness: X/8 PASS(赤いところ Y 個を特定)
|
|
||||||
|
|
||||||
**成果**:
|
### 2. apps/tests/loop_min_while.hako
|
||||||
- JoinIR→LLVM 経路の現状を可視化
|
|
||||||
- Phase 131 以降の優先度付けが可能に
|
|
||||||
|
|
||||||
**次フェーズ**: Phase 131 - JoinIR→LLVM 個別修正ライン
|
**期待される挙動**: 最小限のwhile loop、PHI命令生成
|
||||||
```
|
|
||||||
|
|
||||||
2. Backlog に「Phase 131: JoinIR→LLVM 個別修正ライン」を軽く書いておく:
|
**実行結果**:
|
||||||
```markdown
|
|
||||||
### Phase 131: JoinIR→LLVM 個別修正ライン(予定)
|
|
||||||
|
|
||||||
Phase 130 で検出された赤いところを潰す:
|
| 経路 | 結果 | メモ |
|
||||||
- BoxCall 未対応 → LLVM IR 生成ルール追加
|
|--------------|-------|------|
|
||||||
- JoinIR 命令 → LLVM 側の lowering 脱落 → 実装追加
|
| Rust VM | ✅ | 正常動作。ループ(0,1,2出力)、ControlForm::Loop生成確認 |
|
||||||
- Console/Logger まわりの LLVM 経路整合 → ハーネス側修正
|
| LLVM harness | ⚠️ | Mock backend使用中。MIRコンパイル成功、実LLVM実行は未対応 |
|
||||||
- [他、Phase 130 で検出された問題を随時追加]
|
|
||||||
```
|
**VM出力**: `0`, `1`, `2`, `RC: 0`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 3. apps/tests/esc_dirname_smoke.hako
|
||||||
|
|
||||||
|
**期待される挙動**: ConsoleBox.println、StringBox操作、複雑な制御フロー
|
||||||
|
|
||||||
|
**実行結果**:
|
||||||
|
|
||||||
|
| 経路 | 結果 | メモ |
|
||||||
|
|--------------|-------|------|
|
||||||
|
| Rust VM | ❌ | ConsoleBox未対応エラー: "Unknown Box type: ConsoleBox" |
|
||||||
|
| LLVM harness | ⚠️ | Mock backend使用中。MIRコンパイル成功、実LLVM実行は未対応 |
|
||||||
|
|
||||||
|
**VMエラー**: `[ERROR] ❌ [rust-vm] VM error: Invalid instruction: NewBox ConsoleBox: invalid operation: Unknown Box type: ConsoleBox. Available: Main`
|
||||||
|
|
||||||
|
**根本原因**: ConsoleBoxがRust VM環境で登録されていない(PluginBox問題)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 4. local_tests/phase123_simple_if.hako
|
||||||
|
|
||||||
|
**期待される挙動**: シンプルなif文のJoinIR lowering
|
||||||
|
|
||||||
|
**実行結果**:
|
||||||
|
|
||||||
|
| 経路 | 結果 | メモ |
|
||||||
|
|--------------|-------|------|
|
||||||
|
| Rust VM | ✅ | 正常動作。JoinIR If lowering成功、RC=0 |
|
||||||
|
| LLVM harness | ⚠️ | Mock backend使用中。MIRコンパイル成功、実LLVM実行は未対応 |
|
||||||
|
|
||||||
|
**VM出力**: `RC: 0`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 5. local_tests/phase123_while_loop.hako
|
||||||
|
|
||||||
|
**期待される挙動**: while loopのJoinIR lowering
|
||||||
|
|
||||||
|
**実行結果**:
|
||||||
|
|
||||||
|
| 経路 | 結果 | メモ |
|
||||||
|
|--------------|-------|------|
|
||||||
|
| Rust VM | ✅ | 正常動作。ControlForm::Loop生成、RC=0 |
|
||||||
|
| LLVM harness | ⚠️ | Mock backend使用中。MIRコンパイル成功、実LLVM実行は未対応 |
|
||||||
|
|
||||||
|
**VM出力**: `RC: 0`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 6. apps/tests/joinir_if_select_simple.hako
|
||||||
|
|
||||||
|
**期待される挙動**: IfSelectパターンの基本ケース
|
||||||
|
|
||||||
|
**実行結果**:
|
||||||
|
|
||||||
|
| 経路 | 結果 | メモ |
|
||||||
|
|--------------|-------|------|
|
||||||
|
| Rust VM | ✅ | 正常動作。JoinIR If Lowering実装済み、RC=0 |
|
||||||
|
| LLVM harness | ⚠️ | Mock backend使用中。MIRコンパイル成功、実LLVM実行は未対応 |
|
||||||
|
|
||||||
|
**VM出力**: `RC: 0`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 7. apps/tests/joinir_min_loop.hako
|
||||||
|
|
||||||
|
**期待される挙動**: JoinIR最小ループケース
|
||||||
|
|
||||||
|
**実行結果**:
|
||||||
|
|
||||||
|
| 経路 | 結果 | メモ |
|
||||||
|
|--------------|-------|------|
|
||||||
|
| Rust VM | ✅ | 正常動作。ControlForm::Loop(breakブロック含む)生成、RC=0 |
|
||||||
|
| LLVM harness | ⚠️ | Mock backend使用中。MIRコンパイル成功、実LLVM実行は未対応 |
|
||||||
|
|
||||||
|
**VM出力**: `RC: 0`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📈 実行結果サマリー
|
||||||
|
|
||||||
|
### 統計
|
||||||
|
|
||||||
|
| 経路 | PASS | PARTIAL | FAIL | 合計 | 成功率 |
|
||||||
|
|--------------|------|---------|------|------|--------|
|
||||||
|
| Rust VM | 6 | 0 | 1 | 7 | 85.7% |
|
||||||
|
| LLVM harness | 0 | 7 (Mock)| 0 | 7 | 0% (Mock実行) |
|
||||||
|
|
||||||
|
**Rust VM結果詳細**:
|
||||||
|
- ✅ PASS: 6/7 (peek_expr_block, loop_min_while, phase123_simple_if, phase123_while_loop, joinir_if_select_simple, joinir_min_loop)
|
||||||
|
- ❌ FAIL: 1/7 (esc_dirname_smoke - ConsoleBox未対応)
|
||||||
|
|
||||||
|
**LLVM harness結果詳細**:
|
||||||
|
- ⚠️ 全テストがMock backend実行(実LLVM実行は未対応)
|
||||||
|
- ✅ MIRコンパイルは全7テストで成功
|
||||||
|
- ❌ 実際のLLVM IR生成・実行は未実装
|
||||||
|
|
||||||
|
### 検出された問題点
|
||||||
|
|
||||||
|
#### 1. LLVM Backend未対応(最重要)
|
||||||
|
|
||||||
|
**現象**:
|
||||||
|
```
|
||||||
|
🔧 Mock LLVM Backend Execution:
|
||||||
|
Build with --features llvm-inkwell-legacy for Rust/inkwell backend,
|
||||||
|
or set NYASH_LLVM_OBJ_OUT and NYASH_LLVM_USE_HARNESS=1 for harness.
|
||||||
|
✅ Mock exit code: 0
|
||||||
|
```
|
||||||
|
|
||||||
|
**原因**:
|
||||||
|
- `--backend llvm` 指定時、Mock backendにフォールバック
|
||||||
|
- 実際のLLVM IR生成・実行機構が無効化されている
|
||||||
|
- `--features llvm` ビルドが必要(未実施)
|
||||||
|
|
||||||
|
**影響範囲**: 全7テストケース
|
||||||
|
|
||||||
|
**Phase 131での対応**:
|
||||||
|
1. `cargo build --release --features llvm` でLLVM機能有効化ビルド
|
||||||
|
2. Python/llvmlite ハーネス(`src/llvm_py/`)の動作確認
|
||||||
|
3. 実LLVM実行での再テスト
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### 2. ConsoleBox未登録問題
|
||||||
|
|
||||||
|
**現象**: `apps/tests/esc_dirname_smoke.hako`
|
||||||
|
```
|
||||||
|
[ERROR] ❌ [rust-vm] VM error: Invalid instruction: NewBox ConsoleBox:
|
||||||
|
invalid operation: Unknown Box type: ConsoleBox. Available: Main
|
||||||
|
```
|
||||||
|
|
||||||
|
**原因**:
|
||||||
|
- Rust VM環境でConsoleBoxが登録されていない
|
||||||
|
- PluginBox(Console)とビルトインBoxの登録問題
|
||||||
|
- Phase 15.5の "Everything is Plugin" 方針と衝突
|
||||||
|
|
||||||
|
**影響範囲**:
|
||||||
|
- esc_dirname_smoke.hako(Console出力を使用)
|
||||||
|
- 他の複雑な制御フローテスト(潜在的)
|
||||||
|
|
||||||
|
**Phase 131での対応**:
|
||||||
|
1. ConsoleBoxのVM登録確認
|
||||||
|
2. PluginBox vs ビルトインBoxの登録優先順位整理
|
||||||
|
3. Phase 120/122で解決済みのはずだが、環境依存の可能性
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### 3. JoinIR → LLVM経路の不明確性
|
||||||
|
|
||||||
|
**観測事実**:
|
||||||
|
- JoinIR → MIR変換: ✅ 全テストで成功
|
||||||
|
- MIR → LLVM IR: ⚠️ Mock実行(未検証)
|
||||||
|
- LLVM実行: ❌ 未対応
|
||||||
|
|
||||||
|
**Phase 131での確認事項**:
|
||||||
|
1. `ny-llvmc` コンパイラの状態確認
|
||||||
|
2. Python/llvmlite ハーネスの動作確認
|
||||||
|
3. MIR14命令 → LLVM IR lowering実装状況
|
||||||
|
4. BoxCall/NewBox/PHI命令のLLVM対応
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Phase 131への引き継ぎ事項
|
||||||
|
|
||||||
|
#### 優先度1: LLVM Backend有効化
|
||||||
|
- [ ] `cargo build --release --features llvm` 実行
|
||||||
|
- [ ] Python/llvmlite 環境確認(`src/llvm_py/venv`)
|
||||||
|
- [ ] 実LLVM実行での7テスト再実行
|
||||||
|
|
||||||
|
#### 優先度2: ConsoleBox問題解決
|
||||||
|
- [ ] Rust VMでのConsoleBox登録状況調査
|
||||||
|
- [ ] Phase 122で解決済みの内容との差分確認
|
||||||
|
- [ ] PluginBox登録機構の修正(必要に応じて)
|
||||||
|
|
||||||
|
#### 優先度3: LLVM IR生成確認
|
||||||
|
- [ ] MIR → LLVM IR lowering実装状況調査
|
||||||
|
- [ ] 未対応命令の洗い出し(BoxCall/NewBox/PHI等)
|
||||||
|
- [ ] 最小ケース(joinir_if_select_simple.hako)での詳細検証
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🚀 Task 4: CURRENT_TASK / Backlog 更新(完了)✅
|
||||||
|
|
||||||
|
**実施内容**:
|
||||||
|
|
||||||
|
1. **CURRENT_TASK.md更新**:
|
||||||
|
- Phase 130 セクション追加(実施日: 2025-12-04)
|
||||||
|
- 実行結果統計(Rust VM: 6/7 PASS、LLVM: 0/7 Mock実行)
|
||||||
|
- 検出された3つの問題点の記録
|
||||||
|
- Phase 131への引き継ぎ事項を明記
|
||||||
|
|
||||||
|
2. **30-Backlog.md更新**:
|
||||||
|
- 短期タスクを「第3章 - LLVM統合」に更新
|
||||||
|
- Phase 131の3つの優先度タスクを追加
|
||||||
|
- Phase 120-124を「完了済み第2章」に移動
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## ✅ 完成チェックリスト(Phase 130)
|
## ✅ 完成チェックリスト(Phase 130)
|
||||||
|
|
||||||
- [ ] `phase130_joinir_llvm_baseline.md` が存在し、代表パス/コマンド/結果が整理されている
|
- [x] `phase130_joinir_llvm_baseline.md` が存在し、代表パス/コマンド/結果が整理されている
|
||||||
- [ ] 少なくとも 5〜8 本の .hako が「Rust VM / LLVM backend」両方で実行されている
|
- [x] 7 本の .hako が選定され、ドキュメントに記載されている
|
||||||
- LLVM 側は「結果を記録」できていれば OK(赤でも OK)
|
- [x] 各ケースが「Rust VM / LLVM backend」両方で実行されている
|
||||||
- [ ] 実行結果の表が表形式で docs に記載されている
|
- [x] 実行結果の表が表形式で docs に記載されている
|
||||||
- [ ] CURRENT_TASK.md に Phase 130 完了行が追加されている
|
- [x] **実装修正は一切入れていない**(赤は赤のまま、一覧化だけしている)
|
||||||
- [ ] Backlog に「Phase 131: JoinIR→LLVM 個別修正ライン」が追加されている
|
- [x] CURRENT_TASK.md に Phase 130 完了行が追加されている
|
||||||
- [ ] **実装修正は一切入れていない**(赤は赤のまま、一覧化だけしている)
|
- [x] Backlog に「Phase 131: JoinIR→LLVM 個別修正ライン」が追加されている
|
||||||
- [ ] git commit で記録(コミットメッセージ例: `docs(phase130): JoinIR→LLVM ベースライン確立`)
|
- [ ] git commit で記録(コミットメッセージ例: `docs(phase130): JoinIR→LLVM ベースライン確立`)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 所要時間
|
## 📋 次のステップ
|
||||||
|
|
||||||
**5〜6 時間程度**
|
|
||||||
|
|
||||||
- Task 1 (代表ケース選定): 30分
|
|
||||||
- Task 2 (コマンド整理): 30分
|
|
||||||
- Task 3 (実行とベースライン記録): 3〜4時間(.hako 実行 + 結果記録)
|
|
||||||
- Task 4 (ドキュメント更新): 30分
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 次のステップ
|
|
||||||
|
|
||||||
**Phase 131: JoinIR→LLVM 個別修正ライン** - Phase 130 で検出された問題を優先度順に潰す
|
**Phase 131: JoinIR→LLVM 個別修正ライン** - Phase 130 で検出された問題を優先度順に潰す
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 進捗
|
## 📝 進捗
|
||||||
|
|
||||||
- ✅ Phase 124: hako_check レガシー削除 & JoinIR 専用化(完了)
|
- ✅ Phase 124: hako_check レガシー削除 & JoinIR 専用化(完了)
|
||||||
- ✅ Phase 56: array_ext.filter JoinIR 対応(テスト修正完了)
|
- ✅ Phase 56: array_ext.filter JoinIR 対応(テスト修正完了)
|
||||||
- 🎯 Phase 130: JoinIR → LLVM ベースライン確立(← **現在のフェーズ**)
|
- ✅ Phase 130: JoinIR → LLVM ベースライン確立(← **完了!** 2025-12-04)
|
||||||
|
- ✅ Task 1: 代表ケース選定(7本選定完了)
|
||||||
|
- ✅ Task 2: LLVM実行コマンド整理(完了)
|
||||||
|
- ✅ Task 3: 実行とベースライン記録(完了)
|
||||||
|
- Rust VM: 6/7 PASS (85.7%)
|
||||||
|
- LLVM: 0/7実行(Mock backend、要`--features llvm`ビルド)
|
||||||
|
- 🔄 Task 4: ドキュメント更新(実行中)
|
||||||
- 📋 Phase 131+: JoinIR→LLVM 個別修正ライン(予定)
|
- 📋 Phase 131+: JoinIR→LLVM 個別修正ライン(予定)
|
||||||
|
|
||||||
|
### Phase 130実行結果サマリー
|
||||||
|
|
||||||
|
**Rust VM(--backend vm)**:
|
||||||
|
- ✅ 6/7テストPASS(85.7%成功率)
|
||||||
|
- ❌ 1/7失敗: esc_dirname_smoke.hako(ConsoleBox未登録問題)
|
||||||
|
|
||||||
|
**LLVM harness(--backend llvm)**:
|
||||||
|
- ⚠️ 7/7テストがMock backend実行(実LLVM未対応)
|
||||||
|
- ✅ MIRコンパイルは全て成功
|
||||||
|
- ❌ `--features llvm` ビルドが必要と判明
|
||||||
|
|
||||||
|
**重要な発見**:
|
||||||
|
1. LLVM backend機能が現在のビルドで無効化されている
|
||||||
|
2. ConsoleBoxのRust VM登録問題が再発
|
||||||
|
3. JoinIR → MIR変換は全て正常動作
|
||||||
|
4. Phase 131での優先課題が明確化
|
||||||
|
|||||||
Reference in New Issue
Block a user