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

231 lines
8.1 KiB
Markdown
Raw Normal View History

# Phase 173: using + 静的 Box メソッド解決 - 実装サマリー
## 実装日時
2025-12-04
## 実装状況
**Phase 173 Task 1-2 完了**: 調査完了・仕様固定完了
## 完了タスク
### ✅ Task 1: 名前解決経路調査
**成果物**: `phase173_task1_investigation.md`
**調査結果サマリー**:
1. **現状の名前解決システム確認**
- `.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)
2. **問題の特定**
- using で import した静的 Box が「インスタンス」として扱われる
- `JsonParserBox.parse()``InstanceBox.parse()` として解釈
- 内部メソッド `_skip_whitespace` が解決できずエラー
3. **AST 構造の確認**
- `using tools.hako_shared.json_parser as JsonParserBox`
- 静的 Box: `static box JsonParserBox { method parse(...) }`
- 呼び出し: `JsonParserBox.parse("{...}")`
- 問題: TypeRef型参照と VarRef変数参照の区別がない
4. **追加の問題発見**
- JsonParserBox の `_parse_number()` に無限ループバグ
- `new Alias.BoxName()` 構文が未サポート
- VM step budget exceeded エラー
**技術的洞察**:
- 名前解決の段階: 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 の usingPhase 173+)」
- **基本概念**: 静的 Box をライブラリとして using で import
- **呼び出しパターン**:
- ✅ Phase 173: `JsonParserBox.parse()` 静的メソッド直接呼び出し
- 🚧 Phase 174+: `new Alias.BoxName()` 名前空間的アクセス
- **静的 Box vs インスタンス Box の比較表**
- **実装の技術的詳細**: using 解決 → AST → MIR lowering の流れ
- **使用例**: JsonParserBox / ProgramJSONBox の実例
- **制限事項**: パーサー制限、名前空間階層、型推論
- **Phase 174+ 拡張予定**: HIR 層、型システム、明示的スコープ
#### LANGUAGE_REFERENCE_2025.md の新セクション
- **Static Box のライブラリ利用Phase 173+**
- 基本的な使用例JsonParserBox
- 特徴・制限事項の明記
- using.md へのクロスリファレンス
**仕様のポイント**:
1. Phase 173 では `Alias.method()` 直接呼び出しのみ
2. `new Alias.BoxName()` は Phase 174+ で対応
3. 静的 Box = シングルトン・ライブラリ的用途
4. インスタンス化不要で直接メソッド呼び出し
## 残タスク
### 🔄 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`
**内容**:
```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/HC020PASS
### 🔄 Task 8: ドキュメント更新& git commit
- [ ] phase171-2 ドキュメント更新JsonParserBox 正式化)
- [ ] CURRENT_TASK.md 更新Phase 173 完了記録)
- [ ] git commit
## 推奨実装戦略
### 戦略A: 最小限の修正(推奨)
1. **JsonParserBox バグ修正** → Task 3
2. **using resolver に型登録** → Task 4
3. **パーサーに最小限のフラグ** → Task 5
4. **MIR lowering で判別処理** → Task 6
5. **統合テスト** → Task 7
**理由**:
- 段階的な実装で影響範囲を限定
- 既存コードへの影響最小化
- 各タスクで動作確認可能
### 戦略B: 包括的な対応Phase 174+
1. HIR 層の導入
2. 型システムの拡張
3. 明示的スコープ演算子(`::`
**理由**: より根本的な解決だが、Phase 173 のスコープを超える
## 技術的な注意点
### 箱化モジュール化の原則
1. **Rust VM コア不変**: `.hako` / using 側のみで解決
2. **段階的確認**: AST → MIR → VM の順で確認
3. **既存コード保護**: instance call / plugin call の分岐を壊さない
4. **仕様先行**: まずドキュメントで仕様を固定Task 2 完了)
### デバッグ環境変数
```bash
# 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 完了)
- 段階的実装による影響範囲の限定
## 成果物チェックリスト
- [x] Task 1: 名前解決経路調査完了
- [x] AST 表現確認
- [x] MIR lowering 確認
- [x] エラー発生箇所特定
- [x] 追加問題発見JsonParserBox 無限ループ、パーサー構文制限)
- [x] Task 2: 仕様固定完了
- [x] using.md 更新179行追加
- [x] 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 3JsonParserBox バグ修正)または Task 4using 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**: 173using + 静的 Box メソッド解決)
**進捗**: Task 1-2 完了25%/ Task 3-8 残り75%