Files
hakorune/docs/development/current/main/phase130_joinir_llvm_baseline.md

7.2 KiB
Raw Blame History

Phase 130: JoinIR → LLVM ベースライン確立

🎯 ゴール

「JoinIR で selfhost/hako_check まで安定した」現在の状態から、JoinIR → LLVM 経路の現状を観測・記録する フェーズ。

目的:

  • 代表的な .hako を LLVM ラインで実行し、「どこまで通っているか、どこが赤いか」を一覧化
  • JoinIR → MIR → LLVMny-llvmc / ハーネス)経路での問題点(命令未対応 / ABI ズレ / print系などを洗い出す
  • 実装修正は Phase 131+ に回すPhase 130 は「観測専用」と割り切る)
Phase 124: JoinIR/selfhost 第2章 完了 ✅
        ↓
Phase 130: 「JoinIR → LLVM どこが赤いか」を観測・記録 ← ← ここ!
        ↓
Phase 131+: 個別の LLVM 側問題を潰す

📋 スコープ(やること・やらないこと)

やること

  1. 代表ケース選定JoinIR/selfhost/hako_check から 5〜8 本)
  2. LLVM 実行コマンドと環境変数の整理Rust VM と LLVM ハーネス両方)
  3. 実行結果(成功 / 失敗 / 既知問題)を 1 つの docs にまとめる
  4. CURRENT_TASK / Backlog に「JoinIR→LLVM 第3章の入り口」を追記

やらないこと

  • LLVM 側の実装修正Phase 131 以降の役割)
  • 新しい最適化パスやコード生成ルールの追加
  • JoinIR / Ring0 の設計変更

🏗️ 4 つのタスク

Task 1: 代表ケース選定LLVM 用)

ファイル: docs/development/current/main/phase130_joinir_llvm_baseline.md(このファイル)

やること:

  1. いまの代表パスから、LLVM でも意味があるやつをピックアップ:

    カテゴリ ファイル 用途
    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 3367 の if/loop PHI テスト PHI マージ・LoopForm
  2. できれば 5〜8 本に絞る(あれもこれもはやらない)

  3. 各代表ケースについて、この docs に記載:

    • .hako パス
    • 期待される挙動
    • 既知の過去フェーズPhase 15 / 120の結果もしあれば

Task 2: LLVM 実行コマンドの整理

やること:

  1. Phase 130 用の「代表コマンド」を docs に固定:

    • Rust VM 対応コマンド(比較用):
      ./target/release/nyash --backend vm apps/tests/peek_expr_block.hako
      
    • LLVM ハーネス対応コマンド
      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 スモーク実行(統合テスト):
      ./tools/smokes/v2/run.sh --profile integration
      
  2. 各代表 .hako に対して、どう実行するかを docs に例として明記

  3. 環境変数一覧:

    • NYASH_LLVM_USE_HARNESS=1 → Python/llvmlite ハーネス使用
    • LLVM_SYS_180_PREFIX=$(llvm-config-18 --prefix) → LLVM 18 設定

Task 3: 実行とベースライン記録(観測専用)

やること:

  1. 代表 .hako を、少なくともこの 2 パターンで実行:

    • Rust VMすでに green の比較軸)
    • 🔧 LLVM backendNYASH_LLVM_USE_HARNESS=1 --backend llvm
  2. それぞれについて:

    • 実行結果: / ⚠️ /
    • エラーの場合:
      • エラーメッセージ
      • どのフェーズで失敗したかparse / JoinIR / MIR / LLVM / 実行時)
    • 既知の LLVM 側制約Phase 15 docsと照らし合わせる
  3. 結果を表形式でまとめる:

    ### 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 更新

ファイル:

  • CURRENT_TASK.md
  • docs/development/current/main/30-Backlog.md

やること:

  1. CURRENT_TASK.md に Phase 130 セクション追加:

    ### Phase 130: JoinIR → LLVM ベースライン確立 ✅
    
    **完了内容**:
    - 代表パス 8 本を選定selfhost/hako_check/JoinIR系
    - Rust VM vs LLVM ハーネスで両実行結果を記録
    - LLVM 側の Known Issues 一覧(赤いところ)を確認
    
    **テスト結果**:
    - Rust VM: X/8 PASS
    - LLVM harness: X/8 PASS赤いところ Y 個を特定)
    
    **成果**:
    - JoinIR→LLVM 経路の現状を可視化
    - Phase 131 以降の優先度付けが可能に
    
    **次フェーズ**: Phase 131 - JoinIR→LLVM 個別修正ライン
    
  2. Backlog に「Phase 131: JoinIR→LLVM 個別修正ライン」を軽く書いておく:

    ### Phase 131: JoinIR→LLVM 個別修正ライン(予定)
    
    Phase 130 で検出された赤いところを潰す:
    - BoxCall 未対応 → LLVM IR 生成ルール追加
    - JoinIR 命令 → LLVM 側の lowering 脱落 → 実装追加
    - Console/Logger まわりの LLVM 経路整合 → ハーネス側修正
    - [他、Phase 130 で検出された問題を随時追加]
    

完成チェックリストPhase 130

  • phase130_joinir_llvm_baseline.md が存在し、代表パス/コマンド/結果が整理されている
  • 少なくとも 5〜8 本の .hako が「Rust VM / LLVM backend」両方で実行されている
    • LLVM 側は「結果を記録」できていれば OK赤でも OK
  • 実行結果の表が表形式で docs に記載されている
  • CURRENT_TASK.md に Phase 130 完了行が追加されている
  • Backlog に「Phase 131: 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 124: hako_check レガシー削除 & JoinIR 専用化(完了)
  • Phase 56: array_ext.filter JoinIR 対応(テスト修正完了)
  • 🎯 Phase 130: JoinIR → LLVM ベースライン確立(← 現在のフェーズ
  • 📋 Phase 131+: JoinIR→LLVM 個別修正ライン(予定)