Releasing v0.1.5 — Static Linking and Benchmarks

· 2 min read
v0.1.5

I wrote a handful of algorithm examples — sorting, graph traversal, basic data structures — and made the mistake of profiling the generated code instead of assuming it was fine.

Algorithm examples and benchmarks. The profiling turned up constant folding and dead-code elimination gaps that I hadn’t noticed because the test programs were all too small to care. Larger programs made the costs visible. (It wasn’t fine.)

Code audit fixes. PR #20 was a pass through the codebase removing dead code, simplifying overly clever abstractions, and fixing things that worked by accident rather than by design. Hundreds of lines removed, zero behaviour changes — the best kind of diff.

Fixed static linking and Alpine musl packages. The .apk packages for Alpine were silently producing dynamically linked binaries, which defeats the purpose of Alpine. The linker flags were correct for glibc but wrong for musl — musl’s libc.a needs explicit --static passed earlier in the link order than glibc does. The fix also affected anyone building from source on a musl system.

CI now triggers a playground rebuild on release. Previously the playground was running whatever version happened to be deployed last, which could lag behind the latest release by days. Now tagging a release kicks off a rebuild of the playground’s WASM module automatically.

Skip macOS notarization when the APPLE_ID secret is absent. Fork contributors were getting CI failures because they don’t have Apple signing credentials. The notarization step now checks for the secret first and skips gracefully if it’s missing.