Files
hakorune/docs/reference/language/quick-reference.md
nyash-codex 510f4cf523 builder/vm: stabilize json_lint_vm under unified calls
- Fix condition_fn resolution: Value call path + dev safety + stub injection
- VM bridge: handle Method::birth via BoxCall; ArrayBox push/get/length/set direct bridge
- Receiver safety: pin receiver in method_call_handlers to avoid undefined use across blocks
- Local vars: materialize on declaration (use init ValueId; void for uninit)
- Prefer legacy BoxCall for Array/Map/String/user boxes in emit_box_or_plugin_call (stability-first)
- Test runner: update LLVM hint to llvmlite harness (remove LLVM_SYS_180_PREFIX guidance)
- Docs/roadmap: update CURRENT_TASK with unified default-ON + guards

Note: NYASH_DEV_BIRTH_INJECT_BUILTINS=1 can re-enable builtin birth() injection during migration.
2025-09-28 12:19:49 +09:00

3.2 KiB
Raw Blame History

Nyash Quick Reference (MVP)

Purpose

  • Onepage practical summary for writing and implementing Nyash.
  • Keep grammar minimal; clarify rules that often cause confusion.

Keywords (reserved)

  • control: if, else, loop, match, case, break, continue, return
  • decl: static, box, local, using, as
  • lit: true, false, null, void

Expressions and Calls

  • Function call: f(a, b)
  • Method call: obj.m(a, b) — internally rewritten to function form: Class.m(me: obj, a, b)
    • Rewrite is defaultON; backends (VM/LLVM/Ny) receive the unified call shape.
  • Member: obj.field or obj.m

Display & Conversion

  • Humanreadable display: str(x)(推奨)/ x.str()
    • 既存の toString()str() に正規化Builder早期リライト
    • 互換: 既存の stringify() は当面エイリアス(内部で str() 相当へ誘導)。
  • Debug表示構造的・安定: repr(x)将来導入、devのみ
  • JSONシリアライズ: toJson(x)(文字列)/ toJsonNode(x)(構造)

Operators (precedence high→low)

  • Unary: ! ~ -
  • Multiplicative: * / %
  • Additive: + -
  • Compare: == != < <= > >=
  • Logical: && || (shortcircuit, sideeffect aware)

Semicolons and ASI (Automatic Semicolon Insertion)

  • Allowed to omit semicolon at:
    • End of line, before } or at EOF, when the statement is syntactically complete.
  • Not allowed:
    • Line break immediately after a binary operator (e.g., 1 +\n2)
    • Ambiguous continuations; parser must FailFast with a clear message.

Truthiness (boolean context)

  • Bool → itself
  • Integer0 is false; nonzero is true
  • String → empty string is false; otherwise true
  • Array/Map → nonnull is true (size is not consulted)
  • null/void → false

Equality and Comparison

  • == and != compare primitive values (Integer/Bool/String). No implicit crosstype coercion.
  • Box/Instance comparisons should use explicit methods (equals), or be normalized by the builder.
  • Compare operators < <= > >= are defined on integers (MVP).

String and Numeric +

  • If either side is String, + is string concatenation.
  • If both sides are numeric, + is addition.
  • Other mixes are errors (dev: warn; prod: error) — keep it explicit必要なら str(x) を使う)。

Blocks and Control

  • if (cond) { ... } [else { ... }]
  • loop (cond) { ... } — minimal loop form
  • match (expr) { case ... } — MVP (literals and simple type patterns)

Using / SSOT

  • Dev/CI: filebased using allowed for convenience.
  • Prod: nyash.toml only. Duplicate imports or alias rebinding is an error.

Errors (format)

  • Always: Error at line X, column Y: <message>
  • For tokenizer errors, add the reason and show one nearby line if possible.

Dev/Prod toggles (indicative)

  • NYASH_DEV=1 — developer defaults (diagnostics, tracing; behavior unchanged)
  • NYASH_ENABLE_USING=1 — enable using resolver
  • NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1 — allow main as toplevel entry

Notes

  • Keep the language small. Prefer explicit conversions (int(x), str(x), bool(x)) in standard helpers over implicit coercions.
  • Builder rewrites method calls to keep runtime dispatch simple and consistent across backends.