Three days and five releases in — the pace is unsustainable and also kind of the point, because the early releases are burning through the obvious issues fast so the later ones can be about actual features.
Eliminated false “function is never called” warnings. If your actor had a receive handler that called helper functions, every helper got a warning. Exactly wrong. The dead-code analysis wasn’t following actor message dispatch or trait method resolution paths, so anything only reachable through those looked unused. The fix was expanding reachability analysis to walk actor receive blocks and trait impl methods.
Simplified over-engineering in the parser, runtime, and standard libraries. This one’s harder to summarize because it was fifty small changes, not one big one. The parser had abstraction layers for theoretical extensibility that made the actual code harder to read, the runtime had three different scheduling strategies (two of which were never selected), and the std libraries had generic interfaces wrapping things that only had one implementation. I deleted the layers, the unused strategies, and the premature abstractions. (Every removed abstraction felt like admitting I’d been wrong. Every one made the code better.)
Statically linked MLIR/LLVM in hew-codegen release builds. The release binary was dynamically linking against LLVM, meaning you needed the exact matching shared libraries on the target system — which nobody outside of CI had. Now they’re statically linked. The binary is larger but actually portable.
Resolved remaining codegen test failures and WASM build warnings. Continuation of the cleanup from v0.1.3, mostly around type coercion edge cases in the C++ backend.
Fixed Windows test compatibility and the end-to-end build pipeline. Path separators, line endings, and a tmpdir assumption that only held on Unix. The Windows build now passes reliably enough to remove its continue-on-error — for the moment.