From 84d63ac11b5cf6f801f9845b96fcc7ddc69f948c Mon Sep 17 00:00:00 2001 From: nyash-codex Date: Thu, 18 Dec 2025 04:03:50 +0900 Subject: [PATCH] docs: Phase 119 StepTree cond SSOT (AST handle) --- .../current/main/design/control-tree.md | 25 ++++++++++++++----- 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/docs/development/current/main/design/control-tree.md b/docs/development/current/main/design/control-tree.md index fe843133..f4ea0758 100644 --- a/docs/development/current/main/design/control-tree.md +++ b/docs/development/current/main/design/control-tree.md @@ -44,13 +44,26 @@ lowering/PHI/CFG の判断にはまだ使わない(dev-only)だが、再解 - `required_caps`: capability 宣言(例: `NestedLoop`, `TryCatch`, `Throw`, `Lambda` など) - `cond_sig`: if/loop 条件式の要約(下記) -### cond_sig の方針(SSOT) +### cond の SSOT(Phase 119) -- cond_sig は **ASTNode 参照を保持しない**(巨大化・ライフタイム・clone コストの問題を避ける)。 -- cond_sig は **summary(要約)SSOT** とし、`AstSummary` 相当の安定表現に固定する。 - - 目的は「構造分類/契約の固定」であり、式同値(完全な等価判定)は非対象。 -- StepTree は当面 **観測/分類の SSOT(dev-only)** として運用する。 - - 将来 StepTree→Normalized(env+継続)を “本番導線” にする場合は、cond の lowering 用に `AstExprId` 等を保持する **別SSOT**(例: `StepTreeRef`)を追加し、cond_sig は署名/ログ用途として維持する。 +**SSOT**: `cond` は **AST 参照(ID/ハンドル)** を保持する。 +- `StepNode::If` / `StepNode::Loop` に `cond_ast: Option` を追加。 +- `AstNodeHandle` は AST 参照の軽量表現(将来的に `AstExprId` 等に移行可能)。 +- **Phase 119**: `&ASTNode` 直接参照(ライフタイム制約あり)として実装。 + - dev-only 用途なので、将来の ID 化は別 Phase で対応可能。 + +**派生**: `cond_sig` は署名/ログ/差分検知用の派生表現。 +- `AstSummary` から計算される要約文字列(比較・統計・ログ用)。 +- `StepTreeSignature` の `signature_basis_string()` に含まれる。 +- **Span は含めない**(決定性保証)。 + +**不変条件**: +- `cond_ast` を `signature_basis_string()` に混ぜない(既存の署名安定性を維持)。 +- `AstSummary` は `cond_ast` から計算され、構造分類/契約固定の責務を持つ。 + +**将来計画**(Phase 119 以降): +- StepTree→Normalized 変換箱を実装する際は、`cond_ast` を lowering 入力として活用する。 +- `cond_sig` は表示/署名用途として維持される。 ## StepTreeSignature(構造署名)