Phase 20.19 — Bridge‑B強化と脱Rust前進(P0/P1)
Status: Completed (2025‑10‑30)
目的
- Bridge‑B(Ny/Core 直行)をファイル入力まで完成(execute_via_bridge_b)。
- Core 側の Fail‑Fast を戻り値(last_error_tag)へ寄せ、Runner 整形を薄くする。
- Gate‑C(Core) の file/pipe の対称性を維持しつつ、TTL を計画的に撤去。
- 次フェーズ以降に向け、自給自足ライン(Hakorune compiler → Koarune をコンパイル)へ道を開く。
背景(前フェーズの到達点)
- Core dispatcher canary(opt‑in)4/4 緑。タグ/rc整形の安定化済み。
- Bridge‑B は include 方式で安定。タグ行優先・数値→rc=(val&0xFF)。
- SSOT(Array/Map/String)を docs に集約し、Gate‑C/Core と Runner 整形の役割分担を明確化。
スコープ(本フェーズ)
- 実装(P0)
- execute_via_bridge_b(file_path): .hako → selfhost emit(JSON) → try_lang_core_dispatch_json | .json → try_lang_core_dispatch_json
- Core: last_error_tag の適用拡大(Array/Map のFail系)。
- Runner: Bridge‑B フォールバックのタグ合成ヒューリスティックを段階撤退(last_error_tag が揃い次第)。
- テスト/ドキュメント
- Bridge‑B(file/pipe)canary 2本(成功時 rc/出力とタグの整合)。
- SSOT に追補(clear()/delete() の振る舞い、構文制限注記)。
- CURRENT_TASK/CHECKLIST の更新と TTL 明記。
除外(本フェーズではやらない)
- Rust Parser/AST の即時撤去(段階撤退方針を維持)。
- Optimizer 大規模移行 / LLVM 外部化(計画のみ)。
受入れ基準
- Bridge‑B: .hako 入力 → emit(JSON) → Core 実行が file/pipe の両方で PASS。
- last_error_tag: String/Array/Map の代表Fail系が戻り値にタグを載せ、Runner 側がヒューリスティック無しでも整形可能(段階)。
- quick(opt‑in)で Bridge‑B 追加 canary 緑。既存Coreカナリア(4本)は引き続き緑。
Koarune 自給自足ライン(位置づけ)
- 目標: 「GoがGoをコンパイル」にならい、Hakorune compiler で Koarune をコンパイルする構図へ段階移行。
- 進め方: まずは Ny/Hakorune compiler をSSOT化(Core/Emit/Bridge‑Bを安定化)。Koaruneは言語面の最小サブセットからMIR(JSON)出力を得て、Gate‑C/Core で実行確認。以降、文法・型・標準ライブラリを薄く拡張。
- ガード: 既定挙動や公的仕様は揺らさず、常に opt‑in で進める。
関連資料
- docs/development/architecture/collection_semantics.md(SSOT)
- docs/development/architecture/core_diagnostics.md(安定タグ/rc整形)
- docs/development/architecture/self_hosting_roadmap.md(Koarune 方向性)
実績(ハイライト)
- Gate‑C(Core) 直行の Fail‑Fast 化(Bridge‑B 無応答時は静かなフォールバックを禁止し、安定タグで失敗)
- Bridge‑B タイムアウト既定を 8s に調整(
HAKO_BRIDGE_B_TIMEOUT_MSで上書き可能) - Core mir_call に ArrayBox.clear/0(ModuleFunction エイリアス)を追加(メタデータのみクリア)
- quick プロファイルはグリーン維持(Core カナリアはオプトイン化)
- Bridge‑B カナリアはオプトイン継続(デフォルトの緑を崩さない方針)
メモ(今後の扱い)
- Bridge‑B は TTL 的に維持(需要を見て緑化を後追い)。Core 直行(JSON→Interpreter)を主経路とする。
- last_error_tag は代表 Fail 系をカバー済み(String.indexOf bang / Array.set OOB / Map.set invalid 等)。不足があればケース追加で拡張する。