Step2実装内容: - FuncBodyBasicLowerBox導入(defs専用下請けモジュール) - _try_lower_local_if_return実装(Local+単純if) - _inline_local_ints実装(軽い正規化) - minimal lowers統合(Return/BinOp/IfCompare/MethodArray系) Fail-Fast体制確立: - MirBuilderBox: defs_onlyでも必ずタグ出力 - [builder/selfhost-first:unsupported:defs_only] - [builder/selfhost-first:unsupported:no_match] Phase構造整備: - Phase 25.1b README新設(Step0-3計画) - Phase 25.2b README新設(次期計画) - UsingResolverBox追加(using system対応準備) スモークテスト: - stage1_launcher_program_to_mir_canary_vm.sh追加 Next: Step3 LoopForm対応 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2.7 KiB
2.7 KiB
Phase 25.2b — Lambda / FunctionBox Semantics (Planning)
Status: planning-only(将来フェーズ用のメモ/実装はまだ行わない)
ゴール
- Phase 25.1b で selfhost builder の Program→MIR パリティが整ったあとに、Hakorune 言語としてのラムダ式(
fn(x, y) { ... }/fn(x) expr)の意味論を Rust VM / MIR / FunctionBox まで一貫させる。 - MirBuilder / selfhost コードから暫定的に排除している
fnベースの helper(norm_ifなど)を、正式なクロージャ意味論の上に戻せるようにする。 - Stage1/Stage0 の責務分離を崩さずに、「lambda を使う Hako コード」が hv1 VM / AOT でも安全に実行できる状態を作る。
現状(Phase 25.1b 前提)
- 構文/AST:
docs/reference/language/LANGUAGE_REFERENCE_2025.mdにfn(x, y) { ... }/fn(x) exprのラムダ構文が記載済み。- Stage‑3 パーサは
fnキーワードを認識し、AST 上では Lambda ノードを持っている(exprs_lambda.rs前提)。
- MIR:
src/mir/instruction.rsにMirInstruction::NewClosure { dst, params, body, captures, me }が定義済み。src/mir/builder/exprs_lambda.rsは AST ラムダをNewClosureに降ろし、captures/me情報を構築する実装がある。
- 実行(VM):
- hv1 VM(
src/backend/mir_interpreter)はNewClosure/Callee::Closureをまだ実装していない(catch-all で InvalidInstruction)。 FunctionBox/ClosureEnvはsrc/boxes/function_box.rsに存在し、手動で FunctionBox を作るテスト経路では動いている。
- hv1 VM(
- selfhost 側:
- Phase 25.1a/b では selfhost builder から
fnを排除し、lambda なしでも Stage1 CLI を扱える Program→MIR ルートに集中する。
- Phase 25.1a/b では selfhost builder から
25.2b のスコープ(案)
- Rust VM:
MirInstruction::NewClosureを実装し、FunctionBox+ClosureEnvを構築する。execute_callee_callにCallee::Closure/Callee::Valueの処理を追加し、第一級関数呼び出しをサポートする。
- Hakorune selfhost:
- selfhost builder (
MirBuilderBox/MirBuilderMinBox) の helper の一部を lambda 版に戻し、NewClosure経路が実際に踏まれるようにする(最初は dev トグル付きでもよい)。 - Stage1 コードでの lambda 利用ポリシー(どの層で許可するか)を docs に明記する。
- selfhost builder (
- テスト:
- AST→MIR→VM で λ を含むケース(単純関数、captures、
me利用など)をカバーする canary を追加する。
- AST→MIR→VM で λ を含むケース(単純関数、captures、
このフェーズは「selfhost builder パリティ(25.1b)」完了後に着手する前提であり、本ドキュメントは計画メモのみとする。***