Skip to content

l0-v1.1.0

Choose a tag to compare

@github-actions github-actions released this 12 Jul 23:54
Immutable release. Only release title and notes can be modified.

Dea/L0 1.1.0

Dea/L0 1.1.0 is a minor release focused on safer control flow, frontend recovery, self-hosting reliability, and clearer
source-language contracts. It keeps the existing command-line and library surface while making _ => the canonical
default arm for case.

Language and source contract

  • case now uses _ => as its canonical default arm, aligning scalar and string dispatch with wildcard arms in
    match.
  • The old case ... else default remains accepted in 1.1.0 but emits the PAR-0242 deprecation warning.
  • The source contract is now explicit: source files are UTF-8, while identifiers, keywords, literal prefixes, and escape
    names use the ASCII language vocabulary. Unicode text remains supported in strings and comments.

Frontend recovery and diagnostics

  • Lexer errors can carry a logical recovery token, allowing parsing to continue after invalid characters without losing
    the surrounding construct.
  • Diagnostic columns now count Unicode code points consistently across compiler stages.
  • Orphaned else and cleanup keywords now receive precise diagnostics, and parser recovery avoids several duplicate
    and cascading errors around blocks, loops, and end of file.
  • Duplicate open imports warn once instead of flooding the output, and Stage 2 no longer reports a false shadowing
    warning for the variable introduced by a for loop.

Control-flow and ownership safety

  • for header parsing and flow analysis now agree across compiler stages, including correct liveness after loop control
    statements and rejection of declarations in the update clause.
  • with cleanup now runs correctly when control leaves inline header expressions, and return-flow analysis accounts for
    cleanup blocks that return or override an earlier return.
  • Invalid loop-control statements no longer poison later unreachable-code analysis.
  • Dropping a stale allocation now fails deterministically before cleanup can inspect or mutate related state.

Stage 2 and portability

  • Stage 2 now surfaces compiler warnings in --build, --run, --gen, --sym, and --type modes.
  • C compiler options are emitted in a portable order so user flags, source inputs, linker options, and output selection
    reach the host compiler correctly.
  • Dea environment activation is stackable, and nested test environments no longer leak into Stage 2 compiler runs.
  • Windows handling is more reliable for Unicode test sources and environment-isolation tests.
  • Triple-bootstrap normalization now handles Apple Silicon Mach-O UUID differences without hiding other binary changes.

Documentation and examples

  • Shared contracts now document the compiler CLI, source encoding, ASCII language vocabulary, diagnostic recovery, and
    code-point column semantics.
  • The project status and compiler architecture documentation have been refreshed to describe the current self-hosted
    implementation.
  • Examples use current language idioms, include multilingual hello programs, and follow the new shared Dea code style
    guide.
  • The Hamurabi example now reports its final result correctly.

Compatibility and migration

  • Prefer _ => for every case default. The deprecated else form still compiles in 1.1.0 but emits PAR-0242.
  • Brace a case value arm whose body contains if ... else, or use a _ => default, when the trailing else would be
    ambiguous; the compiler reports PAR-0243 for this case.
  • Replace a let declaration in a for update clause with a permitted non-declaration simple statement. The compiler
    now reports PAR-0145 for the declaration.
  • Rename non-ASCII identifiers to ASCII. Unicode strings and comments remain valid UTF-8 source text.
  • Tools that consume diagnostics should treat columns as Unicode code-point positions. Improved recovery can also expose
    additional genuine errors later in the same source file.
  • Stage 2 users may now see existing warnings in --build, --run, --gen, --sym, and --type modes where those
    warnings were previously suppressed.

Unchanged public surface

No L0 standard-library implementation changed in this release. No CLI flags or modes were added or removed, and no
public L0 types were added or removed.

See the
full comparison between l0-v1.0.0 and l0-v1.1.0.

Release archives and generated API documentation are attached to this release. Use SHA256SUMS to verify downloaded
assets.