📚 Phase 173 前半完了(Task 1-3)! ✅ Task 1: 名前解決経路調査 - UsingResolverBox / CalleeResolverBox 構造把握 - 3つの重大問題発見: 1. 静的 Box が InstanceBox として扱われる 2. JsonParserBox _parse_number 無限ループ 3. new Alias.BoxName() 構文未サポート ✅ Task 2: 仕様固定(docs) - using.md: +179行(静的 Box 使用例) - LANGUAGE_REFERENCE_2025.md: +54行(static box ライブラリ方針) ✅ Task 3: JsonParserBox バグ修正 - MIR Nested-If-in-Loop Bug 発見・回避 - while → loop() 構文統一(10箇所) - ネスト if-else のフラット化 📋 成果物: - phase173_task1_investigation.md(220行) - phase173_using_static_box_resolution.md - phase173-2_using_resolver_mir_lowering.md(後半指示書) - mir-nested-if-loop-bug.md(バグ分析) - json_parser_min.hako(テストファイル) 🎯 次: Task 4-6(using resolver + MIR lowering 統合) 🤖 Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com>
8.1 KiB
8.1 KiB
Phase 173: using + 静的 Box メソッド解決 - 実装サマリー
実装日時
2025-12-04
実装状況
Phase 173 Task 1-2 完了: 調査完了・仕様固定完了
完了タスク
✅ Task 1: 名前解決経路調査
成果物: phase173_task1_investigation.md
調査結果サマリー:
-
現状の名前解決システム確認
.hako側:UsingResolverBox(pipeline_v2/using_resolver_box.hako)- Rust 側:
CalleeResolverBox(src/mir/builder/calls/resolver.rs) - Box 種別分類:
classify_box_kind()(src/mir/builder/calls/call_unified.rs)
-
問題の特定
- using で import した静的 Box が「インスタンス」として扱われる
JsonParserBox.parse()→InstanceBox.parse()として解釈- 内部メソッド
_skip_whitespaceが解決できずエラー
-
AST 構造の確認
using tools.hako_shared.json_parser as JsonParserBox- 静的 Box:
static box JsonParserBox { method parse(...) } - 呼び出し:
JsonParserBox.parse("{...}") - 問題: TypeRef(型参照)と VarRef(変数参照)の区別がない
-
追加の問題発見
- JsonParserBox の
_parse_number()に無限ループバグ new Alias.BoxName()構文が未サポート- VM step budget exceeded エラー
- JsonParserBox の
技術的洞察:
- 名前解決の段階: using 解決 → パーサー → MIR lowering
- 各段階で静的 Box を「型」として扱う仕組みが不足
- Rust VM 自体は変更不要(MIR が正しければ動作する前提)
✅ Task 2: 仕様固定(docs)
成果物:
docs/reference/language/using.md更新(179行追加)docs/reference/language/LANGUAGE_REFERENCE_2025.md更新(54行追加)
追加された仕様:
using.md の新セクション「📦 静的 Box の using(Phase 173+)」
- 基本概念: 静的 Box をライブラリとして using で import
- 呼び出しパターン:
- ✅ Phase 173:
JsonParserBox.parse()静的メソッド直接呼び出し - 🚧 Phase 174+:
new Alias.BoxName()名前空間的アクセス
- ✅ Phase 173:
- 静的 Box vs インスタンス Box の比較表
- 実装の技術的詳細: using 解決 → AST → MIR lowering の流れ
- 使用例: JsonParserBox / ProgramJSONBox の実例
- 制限事項: パーサー制限、名前空間階層、型推論
- Phase 174+ 拡張予定: HIR 層、型システム、明示的スコープ
LANGUAGE_REFERENCE_2025.md の新セクション
- Static Box のライブラリ利用(Phase 173+)
- 基本的な使用例(JsonParserBox)
- 特徴・制限事項の明記
- using.md へのクロスリファレンス
仕様のポイント:
- Phase 173 では
Alias.method()直接呼び出しのみ new Alias.BoxName()は Phase 174+ で対応- 静的 Box = シングルトン・ライブラリ的用途
- インスタンス化不要で直接メソッド呼び出し
残タスク
🔄 Task 3: JsonParserBox バグ修正(高優先度)
問題: _parse_number() の無限ループ
影響: Phase 173 の動作確認が困難
対応:
_parse_number()の実装確認- 無限ループの原因特定
- 修正実装
- 簡単な JSON (
{"x":1}) で動作確認
🔄 Task 4: using resolver 修正
ファイル: lang/src/compiler/pipeline_v2/using_resolver_box.hako
必要な実装:
- 静的 Box 型情報の登録
load_modules_json()で Box 種別も保持to_context_json()に型情報を含める- パーサーに型情報を引き渡す
🔄 Task 5: パーサー修正
ファイル: lang/src/compiler/parser/parser_*.hako
必要な実装:
Alias.method()検出ロジック- AST ノードに
is_static_box_call: trueフラグ追加 - ノード種別追加(必要なら)
- テスト確認
🔄 Task 6: MIR lowering 修正
ファイル: src/mir/builder/calls/resolver.rs, call_unified.rs
必要な実装:
is_static_box_callフラグの確認処理- 静的 Box 呼び出し判別条件追加
Callee::Global("BoxName.method/arity")への変換- または
Callee::Method { box_kind: StaticCompiler }の設定 - テスト確認
🔄 Task 7: 統合テスト
テストファイル: apps/tests/json_parser_min.hako
内容:
using tools.hako_shared.json_parser as JsonParserBox
static box Main {
main() {
local v = JsonParserBox.parse("{\"x\":1}")
return 0
}
}
実行確認:
./target/release/hakorune apps/tests/json_parser_min.hakoが RC 0- Unknown method エラーなし
- hako_check スモーク(HC019/HC020)PASS
🔄 Task 8: ドキュメント更新& git commit
- phase171-2 ドキュメント更新(JsonParserBox 正式化)
- CURRENT_TASK.md 更新(Phase 173 完了記録)
- git commit
推奨実装戦略
戦略A: 最小限の修正(推奨)
- JsonParserBox バグ修正 → Task 3
- using resolver に型登録 → Task 4
- パーサーに最小限のフラグ → Task 5
- MIR lowering で判別処理 → Task 6
- 統合テスト → Task 7
理由:
- 段階的な実装で影響範囲を限定
- 既存コードへの影響最小化
- 各タスクで動作確認可能
戦略B: 包括的な対応(Phase 174+)
- HIR 層の導入
- 型システムの拡張
- 明示的スコープ演算子(
::)
理由: より根本的な解決だが、Phase 173 のスコープを超える
技術的な注意点
箱化モジュール化の原則
- Rust VM コア不変:
.hako/ using 側のみで解決 - 段階的確認: AST → MIR → VM の順で確認
- 既存コード保護: instance call / plugin call の分岐を壊さない
- 仕様先行: まずドキュメントで仕様を固定(Task 2 完了)
デバッグ環境変数
# Callee 解決トレース
NYASH_CALLEE_RESOLVE_TRACE=1
# MIR ダンプ
./target/release/hakorune --dump-mir program.hako
# MIR JSON 出力
./target/release/hakorune --emit-mir-json output.json program.hako
# VM 詳細ログ
NYASH_CLI_VERBOSE=1
リスク評価
高リスク
- JsonParserBox 無限ループ: 動作確認を阻害(Task 3 で対応)
- パーサー変更影響: 既存コードの互換性(慎重な実装必要)
- using resolver 型登録: 互換性問題の可能性
中リスク
- MIR lowering の複雑化
- VM 実行時の予期しないエラー
- テストケース不足
低リスク
- ドキュメント更新のみ(Task 2 完了)
- 段階的実装による影響範囲の限定
成果物チェックリスト
- Task 1: 名前解決経路調査完了
- AST 表現確認
- MIR lowering 確認
- エラー発生箇所特定
- 追加問題発見(JsonParserBox 無限ループ、パーサー構文制限)
- Task 2: 仕様固定完了
- using.md 更新(179行追加)
- LANGUAGE_REFERENCE_2025.md 更新(54行追加)
- Task 3: JsonParserBox バグ修正
- Task 4: using resolver 修正
- Task 5: パーサー修正
- Task 6: MIR lowering 修正
- Task 7: 統合テスト
- Task 8: ドキュメント更新& git commit
次のステップ
immediate: Task 3(JsonParserBox バグ修正)または Task 4(using resolver 修正)
理由:
- Task 3: 動作確認を可能にするための前提条件
- Task 4: 実装の核心部分、他タスクの基盤
推奨: Task 3 → Task 4 → Task 5 → Task 6 → Task 7 → Task 8 の順で実装
関連ドキュメント
- 指示書:
phase173_using_static_box_resolution.md - 調査結果:
phase173_task1_investigation.md - 仕様:
docs/reference/language/using.md,LANGUAGE_REFERENCE_2025.md - Phase 171-2:
phase171-2_hako_check_integration.md - Phase 172:
phase172_implementation_results.md
作成日: 2025-12-04 更新日: 2025-12-04 Phase: 173(using + 静的 Box メソッド解決) 進捗: Task 1-2 完了(25%)/ Task 3-8 残り(75%)