Skip to content

Aether 0.463.0

Choose a tag to compare

@github-actions github-actions released this 30 Jul 04:44
Immutable release. Only release title and notes can be modified.
a1e2c55

What's new in 0.463.0

Fixed

  • Actor ? ask answered 0 and leaked a 5s timeout when the handler used
    reply <expression>
    (#1324). reply count parsed but codegen silently
    dropped it (an ERROR comment in the generated C), so the ask waited out its
    timeout and read 0; the fallback also cast the reply pointer to intptr_t,
    emitting a -Wformat warning. reply <expression> is now a first-class
    scalar reply: the handler sends a typed copy through the reply slot, the ask
    site derefs it as that type (int, long, float, bool, ptr, string), and the
    GCC statement-expression path now matches the MSVC helper's deref semantics.
    An unknown message name in reply Name { ... } is a compile error instead of
    silently generated nothing. Regression:
    tests/regression/test_ask_scalar_reply.ae.
  • Heap-producing calls in bare print/println argument position leaked
    per call
    (println(string.concat(a, b))). The interpolation form already
    freed its temporaries; the direct-argument form never did, for every heap
    producer. Both forms now route through owned-print helpers that print and
    free in one step; bound identifiers keep their scope-exit free.

Added

  • string.replace(s, old, new) and string.replace_all(s, old, new)
    (#1331). Non-overlapping left-to-right matches, byte-exact and binary-safe;
    new may be empty (deletion) or longer than old; empty old returns a
    copy unchanged (Go's strings.Replace guard). Single exact-size allocation
    regardless of match count; results are heap-tracked like substring.
    Regression: tests/regression/test_std_string_replace.ae.
  • ae fmt CI gate (#1302). tests/integration/fmt_gate/ enforces the
    formatter's documented safety properties on every CI run: all checked-in
    .ae sources under std/, examples/, and tests/ are canonically
    formatted (ae fmt --check), formatting is idempotent, and a formatted
    file's generated C is byte-identical to the original's (modulo #line).
    The whole tree was formatted in this change (595 files, whitespace-only);
    the IR-preservation property was verified on all 443 compiling program
    files before and after: zero differences.

Downloads

Platform Architecture File Notes
Linux x86_64 aether-0.463.0-linux-x86_64.tar.gz
macOS x86_64 aether-0.463.0-macos-x86_64.tar.gz
macOS arm64 aether-0.463.0-macos-arm64.tar.gz
Windows x86_64 aether-0.463.0-windows-x86_64.zip
FreeBSD x86_64 aether-0.463.0-freebsd-x86_64.tar.gz cross-built, not tested on FreeBSD

Quick install

Linux / macOS

# Download the archive for your platform, then:
tar -xzf aether-0.463.0-<platform>.tar.gz
export PATH="$PWD/bin:$PATH"
ae version

Windows

Extract the .zip archive, then run bin\ae.exe version from the extracted folder.


Documentation: https://github.com/nicolasmd87/aether#readme