Aether 0.463.0
Immutable
release. Only release title and notes can be modified.
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 countparsed 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 tointptr_t,
emitting a-Wformatwarning.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 inreply Name { ... }is a compile error instead of
silently generated nothing. Regression:
tests/regression/test_ask_scalar_reply.ae. - Heap-producing calls in bare
print/printlnargument 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)andstring.replace_all(s, old, new)
(#1331). Non-overlapping left-to-right matches, byte-exact and binary-safe;
newmay be empty (deletion) or longer thanold; emptyoldreturns a
copy unchanged (Go'sstrings.Replaceguard). Single exact-size allocation
regardless of match count; results are heap-tracked likesubstring.
Regression:tests/regression/test_std_string_replace.ae.ae fmtCI gate (#1302).tests/integration/fmt_gate/enforces the
formatter's documented safety properties on every CI run: all checked-in
.aesources understd/,examples/, andtests/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 versionWindows
Extract the .zip archive, then run bin\ae.exe version from the extracted folder.
Documentation: https://github.com/nicolasmd87/aether#readme