Lyric
A statically typed application language with a bytecode VM — standalone, and embeddable in a host with a capability-based sandbox.
What changed in v1.16.0 — 2026-08-19
The language has a specification: lyriclang/lyric-spec holds twelve chapters and a
conformance suite, non-normative until 2.0 — and from this release on the semantics are
FROZEN. Two toolchain fixes came out of writing it. The bytecode format stays 3.2.
Fixed
{{and}}in f-strings produce a literal brace — promised by the grammar since 1.0, honored by the lexer since this release:f"json: {{\"k\": {n}}}"renders braces instead of a parse error. A lone}in the text stays ordinary text. Found by the spec audit.catch (e: Throwable)catches now. It compiled — the exception analysis treats an interface catch as handling — and then never caught: the handler carried the interface's type id and the runtime compared it against the thrown CLASS, so the exception flew past a clause the compiler had accepted. Found by the conformance suite on its first run. The explicitThrowablecatch is the catch-all now, identical tocatch (e); a catch naming any OTHER interface is refused with a diagnostic until the handler table can express a conformance test — the alternative was a clause that silently caught nothing.