Repository navigation
Releases: lennoxrose/ash
Releases · lennoxrose/ash
Release list
Ash beta-v0.1.4
ashvm. Programs can have up to 4096 functions (was 256): calls and closures past index 255 use new 16-bitOP_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
&pis not kept; a project@Lowernative that only reads (pure template, primitive result) borrows its arguments. New local modifiershared 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)andraw_copy(dst, src, n)(memmove) inashvmandkiln(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
ashvmandkilnbuiltins.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.kilnemits them inline (raw_allocis an anonymousmmapwith a size header,raw_freethe matchingmunmap; r8-r10 are cleared again after each syscall becausesys_waitrelies on r10 being 0). Linux only. Hot paths are untouched, both regression suites are byte-identical.
Ash beta-v0.1.2
- Tooling.
ashvm lsp(diagnostics, hover, go to definition),ashvm fmt(whitespace formatter with a token-equality safety net),ashvm explainwith stable error codesE0101toE0401,--jsondiagnostics, "did you mean" help lines. - Language. Labeled
break/continue(outer: for (...) { ... break outer; }), string interpolation"x = ${x}",String.format/formatted/printf,System.out.print,whenguards onswitchtype patterns, stack traces for uncaught exceptions onashvmandkiln. apm.ash.lockpins commits,apm install --locked,apm update,apm remove, transitive dependencies. Hub packages (owner/repo[@version]) go through the same lockfile; the.apm-sourcefile is gone (apm listreads the commit fromash.lock).- Fixes. Functions with more than 256 constants read the wrong ones (
ashvm); loops inside a lambda inside a loop andcontinueout of a block with locals;finallyonbreak/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
ashvmprogram is cheaper (see the entries below). - The release tarball layout is unchanged (
bin/ashvm,bin/kiln,bin/apm,VERSION).
Ash beta-v0.1.1
apmlogs in to the APMH hub and installs packages byowner/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 | packagesfor release pipelines,apm searchandapm info.github:user/repo[@ref]still works. Details in the entry below.- Hardening. Dependency names from
ash.pkgmust be plain directory names,gitruns without a shell and only over https, a failed fetch leaves no half-made directory. - Everything else is unchanged:
ashvmandkilnare 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
- First packaged release. One tarball per platform,
ash-<os>-<arch>.tar.gz(todayash-linux-x86_64.tar.gz), unpacking into~/.ashasbin/ashvm,bin/kiln,bin/apmand aVERSIONfile, plusSHA256SUMS. Cut withmake release VERSION=<tag>/tools/release.sh(seedocs/RELEASING.md). - What is in it.
ashvm(bytecode VM, REPL,run,check),kiln(native Linux ELF compiler;--target=windowswrites 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-safetydefaults toon, mnemo is linked in statically; no Rust toolchain is needed to run any of it). --versionforashvm,kilnandapmprints the release tag (devin a plainmake); injected at build time withmake ASH_VERSION=<tag>. Nothing else in the tools changed.- Release link flags.
make ASH_STATIC_RT=1links libgcc and libstdc++ intoashvmstatically, so the releaseashvmneeds 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-stdlibpackage (apm add github:<user>/ash-stdlib).kiln --link=sharedneedslibkilnrt.soinstalled 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.