Files
hakorune/docs/archive/phases/phase-106-156/phase120_baseline_results.md
nyash-codex d4f90976da refactor(joinir): Phase 244 - ConditionLoweringBox trait unification
Unify condition lowering logic across Pattern 2/4 with trait-based API.

New infrastructure:
- condition_lowering_box.rs: ConditionLoweringBox trait + ConditionContext (293 lines)
- ExprLowerer implements ConditionLoweringBox trait (+51 lines)

Pattern migrations:
- Pattern 2 (loop_with_break_minimal.rs): Use trait API
- Pattern 4 (loop_with_continue_minimal.rs): Use trait API

Benefits:
- Unified condition lowering interface
- Extensible for future lowering strategies
- Clean API boundary between patterns and lowering logic
- Zero code duplication

Test results: 911/911 PASS (+2 new tests)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-11 02:35:31 +09:00

7.7 KiB
Raw Blame History

Phase 120: selfhost Stage-3 ベースライン結果

実行日時

2025-12-04Phase 106-115 完了直後)

環境

  • Rust VM: ./target/release/hakorune
  • LLVM: llvmlite ハーネス(今回は未実行)
  • JoinIR Strict: NYASH_JOINIR_STRICT=1
  • selfhost: NYASH_USE_NY_COMPILER=1 NYASH_PARSER_STAGE3=1 HAKO_PARSER_STAGE3=1

代表パス実行結果

1. peek_expr_block.hako

ファイル: apps/tests/peek_expr_block.hako

項目 結果
実行結果 成功
エラーメッセージ なし
警告メッセージ [deprecate/env] NYASH_PARSER_STAGE3 deprecated
⚠️ [DEPRECATED] builtin ArrayBox deprecated
[selfhost-child] timeout 2000ms
標準出力 found one
RC: 1
備考 match 式が正常に JoinIR If Lowering で処理。ブロック式の評価も正常動作。期待通りの出力を確認。

技術的詳細:

  • match 式が If Lowering で複数の条件分岐に変換された
  • ブロック式({ print("...") 値 })が正しく評価され、最後の値が返却された
  • PHI 命令による各分岐からの値の合流が正常動作

2. loop_min_while.hako

ファイル: apps/tests/loop_min_while.hako

項目 結果
実行結果 成功
エラーメッセージ なし
警告メッセージ [deprecate/env] NYASH_PARSER_STAGE3 deprecated
[selfhost-child] timeout 2000ms
標準出力 0
1
2
RC: 0
デバッグ出力 [ControlForm::Loop] entry=3 preheader=3 header=4 body=5 latch=6 exit=7
備考 loop 構文が正常に JoinIR Loop Lowering で処理。ControlForm 構造が正しく構築。

技術的詳細:

  • ループが JoinIR Loop Lowering で処理され、ControlForm::Loop 構造を構築
  • entry/preheader/header/body/latch/exit の各ブロックが正しく生成
  • ループ変数 i の PHI 命令が正常生成(初期値 0 と更新値の合流)
  • ループ終了条件 i < 3 が正しく評価され、exit ブロックへ遷移

3. esc_dirname_smoke.hako

ファイル: apps/tests/esc_dirname_smoke.hako

項目 結果
実行結果 エラー
エラーメッセージ [ERROR] ❌ [rust-vm] VM error: Invalid instruction: Unknown method 'println' on ConsoleBox
警告メッセージ [deprecate/env] NYASH_PARSER_STAGE3 deprecated
[warn] dev verify: NewBox ConsoleBox not followed by birth()
[warn] dev verify: NewBox Main not followed by birth()
⚠️ [DEPRECATED] builtin ConsoleBox deprecated
[selfhost-child] timeout 2000ms
標準出力 なし(エラーで中断)
デバッグ出力 [ControlForm::Loop] entry=8 preheader=8 header=9 body=10 latch=11 exit=12
備考 esc_json メソッドのループと dirname メソッドの if 文は正常動作。ConsoleBox.println でエラー。

技術的詳細:

  • esc_json メソッド内のループが JoinIR Loop Lowering で正常処理
  • dirname メソッド内の if 文も JoinIR If Lowering で正常処理
  • StringBox メソッドlength, substring, lastIndexOfの呼び出しは正常
  • エラー原因: ConsoleBox の println メソッドが見つからない
    • ConsoleBox の実装に println メソッドがない可能性
    • selfhost コンパイラのメソッド解決に問題がある可能性
  • NewBox→birth 警告: ConsoleBox と Main の生成時に birth() 呼び出しが検出されない
    • birth() が省略可能な設計なので、これは警告レベルの問題

Phase 120 サマリー

実行結果統計

  • 完全成功: 2本peek_expr_block.hako, loop_min_while.hako
  • ⚠️ 警告あり: 2本警告があっても実行成功
  • エラー: 1本esc_dirname_smoke.hako

JoinIR Strict モードでの検証

検証項目 結果 備考
If 文の JoinIR Lowering 正常動作 peek_expr_block.hako, esc_dirname_smoke.hako
Loop の JoinIR Lowering 正常動作 loop_min_while.hako, esc_dirname_smoke.hako
ControlForm 構造生成 正常動作 header/body/latch/exit ブロックが正しく構築
match 式の処理 正常動作 If Lowering で複数条件分岐に変換
ブロック式の評価 正常動作 最後の式が値として返却
PHI 命令生成 正常動作 分岐・ループでの値合流
StringBox メソッド 正常動作 length, substring, lastIndexOf
ConsoleBox.println エラー メソッド解決失敗

重要な発見

  1. JoinIR Lowering は安定動作

    • If/Loop の基本的な JoinIR Lowering は完全に動作している
    • ControlForm 構造が正しく構築され、PHI 命令も正常生成
  2. selfhost コンパイラの動作

    • 2000ms タイムアウト警告が出るが、これはコンパイル時間の警告(正常動作)
    • NYASH_PARSER_STAGE3 の deprecation 警告は環境変数名の変更推奨
  3. ConsoleBox.println 問題

    • ConsoleBox の println メソッドが selfhost 経路で解決できない
    • builtin ConsoleBox の plugin 化が推奨されている
    • これは selfhost 経路特有の問題と思われる(通常の VM 実行では動作するはず)

Phase 122+ への課題

優先度高(エラー)

  • ConsoleBox.println メソッドエラーの解決

    • 原因: selfhost 経路でのメソッド解決失敗
    • 影響: ConsoleBox を使用するプログラムが実行できない
    • 対応: ConsoleBox の実装確認、または selfhost コンパイラのメソッド解決修正
  • NewBox→birth 警告の調査

    • 原因: birth() 呼び出しの検出ロジック
    • 影響: 警告レベル(実行は可能)
    • 対応: birth() 呼び出し検出の改善、または警告条件の緩和

優先度中(警告)

  • NYASH_PARSER_STAGE3 deprecation 警告への対応

    • 原因: 環境変数名の変更推奨
    • 影響: 警告メッセージが出力される
    • 対応: NYASH_FEATURES=stage3 への移行
  • selfhost-child 2000ms タイムアウト警告の改善

    • 原因: selfhost コンパイル時間が長い
    • 影響: 警告メッセージが出力される(実行は成功)
    • 対応: タイムアウト時間の調整、またはコンパイル速度の改善

優先度低(最適化)

  • builtin ArrayBox/ConsoleBox の plugin 化推奨への対応
    • 原因: Phase 15.5 の Everything is Plugin 方針
    • 影響: deprecation 警告が出力される
    • 対応: plugin 化の検討(長期的な対応)

結論

Phase 120 時点での selfhost Stage-3 経路は:

基本動作は良好

  • 2/3 のプログラムが完全に動作
  • JoinIR If/Loop Lowering が安定動作
  • ControlForm 構造とPHI 命令の生成が正常

⚠️ 警告はあるが実行可能

  • deprecation 警告は情報提供レベル
  • selfhost コンパイル時間の警告は既知の挙動

1つの致命的エラー

  • ConsoleBox.println メソッド解決エラー
  • これは Phase 122+ で優先的に修正が必要

📊 Phase 106-115 の成果

  • JoinIR Strict モードでの基本動作が確立
  • If/Loop の Lowering が安定して動作
  • selfhost 経路の基礎が固まった

Phase 122+ で上記課題を段階的に解決し、selfhost Stage-3 経路の完全な安定化を目指す。


作成日: 2025-12-04 Phase: 120selfhost Stage-3 代表パスの安定化) ベースライン確立: Phase 106-115 完了時点 Status: Historical