Skip to content

Releases: leifericf/mino

v0.149.1

13 May 08:05

Choose a tag to compare

release: cut v0.149.1

Bug-fix roll-up over v0.149.0. Highlights: sequential hash now
satisfies equal-implies-equal-hash across vector / list / chunked
seq / realized lazy; sorted-map and sorted-set hashes match their
hash-map / hash-set cross-type-equal counterparts; sorted dissoc
of an absent key no longer corrupts count; ex-info accepts the
3-arity cause form; catch preserves the thrown value's metadata;
fmt_ensure and (sh ...) no longer leak buffers on realloc OOM;
(sh ...) detects pclose's -1 sentinel; safepoint header comment
matches the should_yield-setting STW path. See CHANGELOG.md for
the full set.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

v0.149.0

12 May 18:14

Choose a tag to compare

v0.149.0 — clojure-test-suite conformance pass: 220/220 files, 5340/5…

v0.148.0

12 May 15:18

Choose a tag to compare

release: bump version to 0.148.0 and refresh CHANGELOG

Releases the recent C ports as v0.148.0 and rewrites the v0.146.0 /
v0.147.0 entries to drop internal phase / cycle planning vocabulary
and describe each change user-facingly.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

v0.145.0

12 May 06:04

Choose a tag to compare

release: ship 0.145.0 fusion cycle

Six phases shipped; each commit kept its own bench delta and parity
tests. Top wins: sum-1-to-1M reduce + range 180x via the wrapper
fix, vec-1M reduce 1.9x, map-10k reduce 1.6x, assoc-noop HAMT 2.0x.

v0.144.6

12 May 04:37

Choose a tag to compare

release: ship 0.144.6 with bc adversarial fixes

Single-version cover for four bc bug fixes landed under this tag:
- IC cache shadowed closure free vars
- catch landing leaked dyn frames
- arity mismatch returned silent NULL
- OP_PUSHCATCH at MAX_TRY_DEPTH returned silent NULL

Each fix has its own commit and regression test; this commit ships
the user-facing version bump and a consolidated CHANGELOG entry.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

v0.144.5

11 May 21:18

Choose a tag to compare

v0.144.5: read OP_PUSHCATCH td from catch-stack, not stack-local

The longjmp-return branch of OP_PUSHCATCH was reading
try_stack[td].exception where td was a stack local captured
before setjmp. C99 does not promise that distinct case-scope
locals occupy distinct stack slots, and gcc with -O2 reuses
the slot for a sibling PUSHCATCH. When inner PUSHCATCH ran,
inner's td overwrote outer's td. On longjmp back to outer,
outer's td read inner's value, indexing the wrong try_stack
slot and returning the inner-thrown exception instead of the
re-thrown one. Apple clang's codegen happened to keep the
slots distinct, so the bug only surfaced on Linux gcc.

The fix reads try_depth_at_push from bc_catch_stack[d] -- a
heap-backed field already populated at PUSHCATCH arm time --
instead of from the stack local. Same value, but it survives
longjmp regardless of compiler slot-sharing choices.

Regression test bc-try-finally / "finally runs on re-throw
from handler" now passes on Linux gcc as well as Apple clang.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

v0.104.0

10 May 21:44

Choose a tag to compare

Bump version to v0.104.0 and finalize CHANGELOG

The eval-floor performance cycle: alloc profiler, var registry
hash indices, monomorphic inline call cache with version-counter
invalidation, argv/argc calling convention for hot prims plus
variadic + - * / and the comparison ops, closure-shape pre-compile,
binary numeric int+int fast lane, reduce/range fast paths, multi-
arity recur env reuse, cached symbol hash on the val, inline
truthiness for branch dispatch, and a fix for ns-unmap missing
the IC invalidation.

Microbenchmark gate: average per-op cost reduced about 24 percent
across 15 benches; allocation per op unchanged. Tight integer
loop/recur bench dropped from 941 ms to 375 ms.

v0.101.1

10 May 10:27

Choose a tag to compare

v0.101.1: STM and agent hardening pass

Bump MINO_VERSION_PATCH to 1; finalize CHANGELOG header for
v0.101.1.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

v0.101.0

10 May 05:52

Choose a tag to compare

v0.101.0: STM, agents, var watches

v0.100.34

09 May 07:48

Choose a tag to compare

Add aset for host arrays; tighten vec bad-shape rejection

aset on MINO_HOST_ARRAY mutates vals[i] in place. This is the
only mutation path outside MINO_ATOM / MINO_VOLATILE; it exists
because the host-array tier mirrors JVM array semantics.

seq_iter_init / done / val now handle MINO_HOST_ARRAY and
MINO_MAP_ENTRY so into / mapv / etc. iterate uniformly.

vec in src/core.clj rejects bad shapes (numbers, booleans, chars,
keywords, symbols, regexes, transients) up front.

vec.cljc 13/15 errors -> 19/20. The remaining failure is the
(aset arr 0 -1) (= [-1 2 3] (vec arr)) storage-aliasing
assertion -- JVM's LazilyPersistentVector.createOwning reuses
small Object[] arrays as the persistent vector's tail, which is
incompatible with mino's persistent-trie vec that genuinely
copies its input. JVM-internal optimization, not portable.

Internal 1476 / 7091 / 0.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>