Skip to content

Releases: lennoxrose/ash

Ash beta-v0.1.4

Choose a tag to compare

@lennoxrose lennoxrose released this 21 Oct 04:31
  • ashvm. Programs can have up to 4096 functions (was 256): calls and closures past index 255 use new 16-bit OP_CALL_WIDE / OP_MAKE_CLOSURE_WIDE, the one-byte forms and the hot path are unchanged. The ceiling is measured: the table is static, and at 16384 entries every start-up got ~5% slower.
  • Ownership checker. A parameter passed to the method itself is no longer "kept" by that (the fixed point starts from "only read" and a parameter loses it on a real store, return or escape); a parameter lent with &p is not kept; a project @Lower native that only reads (pure template, primitive result) borrows its arguments. New local modifier shared T x = ...: a shared local is not moved when stored and stays usable (never freed by the compiler). See docs/MEMORY_SAFETY.md.
  • Builtins. raw_fill(addr, value32, count) and raw_copy(dst, src, n) (memmove) in ashvm and kiln (rep stosd / rep movsb).
  • Library. Math.ceil, List.clear().
  • Tests: functions/ManyFunctions, ownership/OwnRecursion, OwnRecursionKeeps, OwnShared, OwnSharedNot, OwnNativeRead, collections/ListClearCeil, raw/RawMem (fill / copy).

Ash beta-v0.1.3

Choose a tag to compare

@lennoxrose lennoxrose released this 21 Oct 03:27
  • ashvm and kiln builtins. raw_syscall(n, a1..a6), raw_alloc(n), raw_free(p), raw_peek(p, width), raw_poke(p, width, v): raw Linux syscalls and byte buffers, so a library written in Ash can talk to a device or a socket itself. No checking (a bad address crashes the process). Reached from a library with @Lower("raw_...") native methods. kiln emits them inline (raw_alloc is an anonymous mmap with a size header, raw_free the matching munmap; r8-r10 are cleared again after each syscall because sys_wait relies on r10 being 0). Linux only. Hot paths are untouched, both regression suites are byte-identical.

Ash beta-v0.1.2

Choose a tag to compare

@lennoxrose lennoxrose released this 20 Oct 22:43
  • Tooling. ashvm lsp (diagnostics, hover, go to definition), ashvm fmt (whitespace formatter with a token-equality safety net), ashvm explain with stable error codes E0101 to E0401, --json diagnostics, "did you mean" help lines.
  • Language. Labeled break / continue (outer: for (...) { ... break outer; }), string interpolation "x = ${x}", String.format / formatted / printf, System.out.print, when guards on switch type patterns, stack traces for uncaught exceptions on ashvm and kiln.
  • apm. ash.lock pins commits, apm install --locked, apm update, apm remove, transitive dependencies. Hub packages (owner/repo[@version]) go through the same lockfile; the .apm-source file is gone (apm list reads the commit from ash.lock).
  • Fixes. Functions with more than 256 constants read the wrong ones (ashvm); loops inside a lambda inside a loop and continue out of a block with locals; finally on break / continue; loop nesting limit per function body; use-after-move errors point at the move and suggest a fix.
  • Performance. No regression against the beta-v0.1.1 code; start-up of every ashvm program is cheaper (see the entries below).
  • The release tarball layout is unchanged (bin/ashvm, bin/kiln, bin/apm, VERSION).

Ash beta-v0.1.1

Choose a tag to compare

@lennoxrose lennoxrose released this 20 Oct 21:37
  • apm logs in to the APMH hub and installs packages by owner/repo. apm auth login | status | logout | token (browser device flow or a token), apm add <owner>/<repo>[@version] resolved through hub.ash-project.org to an exact commit, apm link | sync | unlink | packages for release pipelines, apm search and apm info. github:user/repo[@ref] still works. Details in the entry below.
  • Hardening. Dependency names from ash.pkg must be plain directory names, git runs without a shell and only over https, a failed fetch leaves no half-made directory.
  • Everything else is unchanged: ashvm and kiln are the beta-v0.1.0 code. The release tarball layout is the same (bin/ashvm, bin/kiln, bin/apm, VERSION).

Ash beta-v0.1.0

Choose a tag to compare

@lennoxrose lennoxrose released this 19 Oct 02:41
  • First packaged release. One tarball per platform, ash-<os>-<arch>.tar.gz (today ash-linux-x86_64.tar.gz), unpacking into ~/.ash as bin/ashvm, bin/kiln, bin/apm and a VERSION file, plus SHA256SUMS. Cut with make release VERSION=<tag> / tools/release.sh (see docs/RELEASING.md).
  • What is in it. ashvm (bytecode VM, REPL, run, check), kiln (native Linux ELF compiler; --target=windows writes a PE, not tested on a real Windows machine for this release), apm (new, check, init, add, install, list, license, run), all on the one shared front end, with the ownership / memory-safety pass (memory-safety defaults to on, mnemo is linked in statically; no Rust toolchain is needed to run any of it).
  • --version for ashvm, kiln and apm prints the release tag (dev in a plain make); injected at build time with make ASH_VERSION=<tag>. Nothing else in the tools changed.
  • Release link flags. make ASH_STATIC_RT=1 links libgcc and libstdc++ into ashvm statically, so the release ashvm needs only libc, libm, libgomp (libgomp.so.1) and the Vulkan loader (libvulkan.so.1). The default build is unchanged.
  • Not in this release. The standard library is the separate ash-stdlib package (apm add github:<user>/ash-stdlib). kiln --link=shared needs libkilnrt.so installed under /usr/local/lib/kiln, so it is not part of the tarball (static builds, the default, need nothing). No macOS, aarch64 or Windows tarball.