Repository navigation
Releases: tschk/inauguration
Release list
v0.9.322
v0.9.322
Current compiler release for macOS ARM64 and Linux x86_64, replacing the much older v0.9.11 release.
Included
- Native lowering and Linux compiler regression fixes, including executable generation and aggregate storage.
- Linux executable-publication synchronization prevents ETXTBSY when unrelated threads fork during compilation, without retrying execution.
- Linux native string concatenation preserves Unicode and NUL bytes, nested calls, operand effects, and empty strings.
- Generated x86 ELF objects explicitly request a non-executable stack.
- Rust frontend improvements: configuration filtering, lexical item-macro expansion, source-owned recursive
Boxstorage, borrowed aggregates, and callable bounds. - Bare-metal verifier support for
mem-fill64andmem-copy64.
Verification
- The tagged source passed 2,996 Cargo tests on macOS and 2,936 on Linux, with one existing ignored test on each platform. Strict Clippy, formatting, protocol regeneration, and all 119 conformance cases passed on both platforms.
- The executable-publication regression passed ten additional runs. Removing only the lock handoff reproduced ETXTBSY while preserving executable permissions.
- Release packaging passed checksum, single-member tarball, and version checks on both platforms. Each extracted compiler generated a native executable that exited 42.
- Linux native-object linking emitted no GNU-stack warnings, and all four linked harnesses had non-executable stacks.
- The release workflow requires formatting, strict Clippy, the full Cargo suite, protocol generation, and conformance on both platforms. Linux conformance is now blocking.
- The complete two-platform, non-publishing release rehearsal passed. All four non-self-host CI jobs passed at the same commit.
Known limitations
Self-host is still failing. The compiler cannot yet compile its complete Rust source and dependencies. Both platforms stop at an unresolved generic trait contract in compact_rust_tokens<syn::Path>. The experimental self-host release check remains nonblocking. This is not a self-hosting compiler release.
For compile --json, automation must inspect success and the artifact. Compilation failures can return success: false with exit status 0.
Binary assets are provided for aarch64-apple-darwin and x86_64-unknown-linux-gnu, each with a .sha256 checksum file.
Full changes: v0.9.11...v0.9.322
v0.9.11
Bug fixes for dynamic linking surfaces:
- owned-compile: SCI images keep every declared function (export tables are dynamic-linking surfaces, not entry-reachable subtrees); shared libraries whose entry the loader never calls no longer lose their exports.
- boot emit: the kernel boot export table keeps export-only leaves (e.g. ticks-now, mem-heap-free) so dynamically linked apps resolve all their imports.
Full test suite: 1212 passed.
v0.9.10
Dynamic linking for Space
- SCI v2 binary emitter:
--emit scinow produces the 64-byte-manifest v2 format — export table (all defined functions), import table (externcall rel32 0call sites), and a shared NUL-terminated name pool. A Space-style loader can bind imports at load time and register providers per domain. - Boot export table:
--emit bootappends a kernel export table after the code and stores its address in boot-header[40..48], letting the running kernel register itself as a symbol provider for dynamically linked components. - Freestanding string ABI: SCI and boot artifacts now emit NUL-terminated C strings (value address = first byte); hosted JIT keeps the length-prefixed instring ABI.
Fixed
- x86_64 ELF static-lib objects are lowered for real: the object backend previously emitted a canned
mov eax, exit_code; retstub and ignored the module. It now lowers the actual function bodies (entry exported globally, siblings omitted from the symbol table to avoid host link collisions), and extern calls carryR_X86_64_PLT32relocations through the new.rela.textsection. Modules requiring absolute globals/strings are refused rather than emitted with baked load addresses.
check-native-linkable-objects (link a C harness against a compiled .in object and assert the exit value) now passes.
v0.9.9
Language
- Compound assignment operators
+= -= *= /= %=now parse and desugar to plain assignments (scalar, index, and field targets). Previously they silently parsed as expression statements, so loop counters never updated.
Fixes
- Array codegen on the owned x86 path: array-literal locals now allocate one stack slot per element, element reads and writes address those slots, and dynamically indexed literals materialize at the use site. Constant propagation no longer inlines array literals (which produced unexecutable
[1,2,3][i]forms) and countsarr[i] = v/s.f = vas mutations of their base. in executepropagates nonzero JIT exit statuses instead of always exiting 0.- JIT runtime maps a data section and rebases global reference sites, so executed globals and struct-field globals hold real state.
Packaging
- Crate metadata cleanup; CLI
--aboutno longer hardcodes a stale version.
v0.9.8
v0.9.6
v0.9.5
v0.9.4
v0.9.3
v0.9.3 - update tree-sitter-holyc and lockfile
v0.9.2
v0.9.2 - fix nested index parsing in .in