Classes and data types now accept primary constructors. Functions can declare contracts with in/out/old(), and test blocks use the new observe keyword instead of the old expect builtins. Other syntax additions: triple-quoted strings, raw string literals, if-expressions, the Never type, ok/err with ?else for result handling, and defer for cleanup. The standard library has a declarative CLI system, HTTP serving, process execution, file watching, and YAML/Markdown/template/time builtins. Mutation testing now classifies survivors as LIE or GAP, with a leverage analyzer that explains why mutants survived in plain language. The website generator was rewritten from Python to Vary.
| Change | Description |
|---|---|
| Primary constructors | Classes and data types accept constructor parameters directly in the declaration, with init blocks for validation. |
| Contracts | in {}, out {}, and old() expressions for preconditions and postconditions on functions. |
| observe keyword | Replaces expect_* builtins in test blocks with a single observe keyword for oracle-boundary semantics. |
| throws expression | observe throws { expr } for asserting that an expression raises an error. |
| Named arguments | All function, method, and constructor calls support named arguments. |
| Triple-quoted strings | Multi-line string literals with escape sequences and automatic dedent. |
| Raw string literals | r"..." and r'...' for strings without escape processing. |
| if-expressions | Use if/elif/else as expressions that return values. |
| Never type | Bottom type for functions that never return normally. |
| ok/err and ?else | Result-style error handling with ok(), err(), and the ?else unwrap operator. |
| defer | Deferred cleanup blocks that run when the enclosing scope exits. |
| Tuples 6-8 arity | Extended tuple support from 5-element to 8-element tuples. |
| Set literals | set{} literal prefix and empty typed collection expressions. |
| Declarative CLI system | stdlib/cli/ module for declarative command-line argument parsing. |
| HTTP server builtin | serve() builtin for static HTTP file serving. |
| Process execution | run() and cmd() builtins for structured subprocess execution. |
| File watching | watch() and watch_once() builtins for filesystem change monitoring. |
| Yaml, Markdown, Template, Time | New runtime builtins for YAML parsing, Markdown rendering, template engines, and time operations. |
| vary install/uninstall | Package install and uninstall commands for dependency management. |
| argv() fix | Fixed argv() returning an empty list. |
| Match/case return fix | Fixed codegen bug where match/case expressions did not return values correctly. |
| Elif/if-expr null narrowing | Null safety narrowing now works inside elif branches and if-expressions. |
| Mutation semantic pillars | Eight mutation testing pillars: oracle graph, contract mutation, effect classification, stable signatures, manifest, expression IDs, oracle validation, and integrity scoring. |
| Lie detector | LIE vs GAP classification with proof mutations for mutation survivor analysis. |
| Mutation UX 2.0 | Leverage analyzer, human-readable survivor explanations, and structured output for mutation results. |
| Website generator rewrite | Website build tool rewritten from Python to Vary (programs/wg). |
| SHA256 download verification | All binary downloads verified with SHA256 checksums. |
| varyup Go 1.26.1 | Upgraded varyup toolchain manager to Go 1.26.1 to fix stdlib CVEs. |