runner: promote @local expansion to first-class (default ON) across vm & selfhost; docs updated to reflect standard sugar

This commit is contained in:
nyash-codex
2025-09-28 02:05:41 +09:00
parent 1994990f47
commit c409aa6ad1
5 changed files with 16 additions and 2 deletions

View File

@ -15,7 +15,7 @@ Status Snapshot — 20250927
Decision — Variables (Option A; 20250927) Decision — Variables (Option A; 20250927)
- 方針: var/let は導入しない。ローカルは常に `local` で明示宣言。 - 方針: var/let は導入しない。ローカルは常に `local` で明示宣言。
- 目的: SSA/LoopForm と Known/Union 解析の単純さを維持し、未宣言代入の混入を防ぐ。 - 目的: SSA/LoopForm と Known/Union 解析の単純さを維持し、未宣言代入の混入を防ぐ。
- 補足: 開発用の糖衣(行頭 `@name = expr` `local name = expr`)はランナー前処理で提供既定OFF)。言語仕様には含めない - 補足: 行頭 `@name[:T] = expr` は標準ランナーで `local name[:T] = expr` へ自動展開既定ON)。言語意味は不変
- Docs 更新: quick-reference, language reference, tutorials に「var/let 不採用」を明記。 - Docs 更新: quick-reference, language reference, tutorials に「var/let 不採用」を明記。
- Tokenizer/Parser デバッグ導線devトレースを追加 - Tokenizer/Parser デバッグ導線devトレースを追加
- json_lint_vm: fastpathの誤判定を除去未終端ガードを追加PASS - json_lint_vm: fastpathの誤判定を除去未終端ガードを追加PASS
@ -79,6 +79,10 @@ Work Queue (Next)
6) Router 観測ログの軽追加dev-only, 既定OFF: class-reroute / special-reroute を DebugHub に emitサンプル制御対応 6) Router 観測ログの軽追加dev-only, 既定OFF: class-reroute / special-reroute を DebugHub に emitサンプル制御対応
7) LLVM ハーネスの MIR ダンプに certainty 表示(挙動不変の診断整合) 7) LLVM ハーネスの MIR ダンプに certainty 表示(挙動不変の診断整合)
Update — @local expansion promotion (20250927)
- すべてのランナーモードに `preexpand_at_local` を適用common/llvm/pyvm に加え vm/selfhost へも導入)。
- Docs を更新し、構文糖衣が標準で有効であることを明記。
Runbook抜粋 Runbook抜粋
- VM quick: `tools/smokes/v2/run.sh --profile quick` - VM quick: `tools/smokes/v2/run.sh --profile quick`
- LLVM llvmlite: `cargo build --release --features llvm && tools/smokes/v2/run.sh --profile integration` - LLVM llvmlite: `cargo build --release --features llvm && tools/smokes/v2/run.sh --profile integration`

View File

@ -11,6 +11,7 @@ local x = 10, y = 20, z # 混合初期化
``` ```
注意: Nyash は `var`/`let` を採用していません。常に `local` で明示宣言してください(未宣言名への代入はエラー)。 注意: Nyash は `var`/`let` を採用していません。常に `local` で明示宣言してください(未宣言名への代入はエラー)。
補足: 行頭 `@name[:T] = expr` は標準ランナーで `local name[:T] = expr` に自動展開されます(意味は不変)。
### Box定義クラス ### Box定義クラス
```nyash ```nyash

View File

@ -165,7 +165,7 @@ x = 42 # RuntimeError: 未宣言変数 + 修正提案表示
#### **設計方針var/let について)** #### **設計方針var/let について)**
- Nyash は `var`/`let` を導入しません。ローカル変数は常に `local` で明示宣言します。 - Nyash は `var`/`let` を導入しません。ローカル変数は常に `local` で明示宣言します。
- 目的: 代入点と定義点を一致させ、LoopForm/SSA と解析Known/Unionを簡潔に保つためです。 - 目的: 代入点と定義点を一致させ、LoopForm/SSA と解析Known/Unionを簡潔に保つためです。
- 補足: 開発用の糖衣として行頭 `@name = expr` `local name = expr`前処理で展開する仕組みがありますランナー側、既定OFF。言語仕様の一部ではありません - 補足: 行頭 `@name[:T] = expr` は標準ランナーで `local name[:T] = expr`自動展開されます(構文糖衣、言語意味は不変)
### **2.3 制御構文** ### **2.3 制御構文**

View File

@ -116,6 +116,9 @@ impl NyashRunner {
} }
} else { code }; } else { code };
// Pre-expand '@name[:T] = expr' sugar at line-head (same as common/llvm/pyvm paths)
let code = crate::runner::modes::common_util::resolve::preexpand_at_local(&code);
// Parse to AST // Parse to AST
let ast = match NyashParser::parse_from_string(&code) { let ast = match NyashParser::parse_from_string(&code) {
Ok(ast) => ast, Ok(ast) => ast,

View File

@ -38,6 +38,12 @@ impl NyashRunner {
} }
} }
// Promote dev sugar to standard: pre-expand line-head '@name[:T] = expr' to 'local name[:T] = expr'
{
let expanded = crate::runner::modes::common_util::resolve::preexpand_at_local(code_ref.as_ref());
code_ref = std::borrow::Cow::Owned(expanded);
}
// Write to tmp/ny_parser_input.ny (as expected by Ny parser v0), unless forced to reuse existing tmp // Write to tmp/ny_parser_input.ny (as expected by Ny parser v0), unless forced to reuse existing tmp
let use_tmp_only = crate::config::env::ny_compiler_use_tmp_only(); let use_tmp_only = crate::config::env::ny_compiler_use_tmp_only();
let tmp_dir = std::path::Path::new("tmp"); let tmp_dir = std::path::Path::new("tmp");