github unisonweb/unison trunk-build
Development Build (trunk)

pre-release6 days ago

Commits

  • a541bc5: benchmarks/2026-11-06-eager-reentry.md: the merge-queue run that merged PR 6330, 64 min in all, the eager transcript step in 3 to 6 min on the five platforms and the matrix rows in 22 to 41 min. (Paul Chiusano) #6331
  • 0ed594a: Merge remote-tracking branch 'origin/trunk' into jit (Paul Chiusano) #6331
  • feea1b9: The non-moving collector's write barrier (+RTS -xn): before every pointer store into bstk or an array, when the RTS's barrier flag was set at entry, generated code hands the old value to the update remembered set (unison_jit_push_old); the exit routine, unison_jit_enter, Ref.write and Ref.cas do the same in C. Generated only when the process runs under -xn (a new runtime fact), so the default build's code is unchanged; measured within noise under both collectors (benchmarks/2026-11-06-nonmoving-barrier.md). Before it, the library suite under -xn crashed in the marker in two runs out of two. jit-nonmoving.md is the stress: two old arrays swapped both ways while a third keeps promoting, a checksum at the end; its control (UNISON_JIT_DEBUG=1 UNISON_JIT_DISABLE=nmbarrier, which now turns the C pushes off too) fails three runs out of three. copyCaptured's loop got a latch block so the barrier's branch keeps the phi's predecessors right. design.md, usage.md, development.md (the recipe and a lesson on controls) updated. (Paul Chiusano) #6331
  • 2a0aac2: Attestations at feea1b9: tests (scripts/proofs/tests.sh, every suite and the CLI integration tests passing), transcripts partial (jit-tests.md, off and on) and formatting; migration cached. Every --check verdict: tests pass, transcripts partial, formatting pass, migration pass. (Paul Chiusano) #6331
  • ddb9093: No runtime test of the barrier flag on a hot path (Paul's review of the overview, 2026-11-06): the Ref write and cas get their push from generated code before the helper call, under -xn only, so unison_jit_write_mutvar and unison_jit_ref_cas are what they were before the barrier; the exit routine reads the flag once per exit into a register; the C callers in jit_rt.c use an inline copy of the push. Under the default collector the generated code and the helpers are byte-for-byte what they were before the barrier. jit-nonmoving.md: the barrier passes, the control crashes; jit-tests.md eager identical under both collectors. design.md updated. (Paul Chiusano) #6331
  • 04083ca: design.md's write-barrier section after Paul's review (2026-11-06): the non-moving collector's barrier in three short paragraphs (why a different barrier, the remembered set and what the marker does with it, what native code does and where, with links to the code), the marker named as a thread of its own, "marking" for the process; the generational part broken into paragraphs, a re-entry function called that, and the history cut (the low-water mark's past, the 9.10.3 check, the introduction date). usage.md: compaction doesn't need it. (Paul Chiusano) #6331
  • a796d2a: The cas push reaches the MutVar# through the Ref's wrappers (refFields), as a read does: the first version treated the slot's pointer register as an integer, invalid IR that the verifier reports and an unverified build answers by rejecting the module, so the Ref.cas row ran interpreted at 0.12x. With the fix 0.98x; jit-tests under UNISON_JIT_DEBUG=1 clean under both collectors; the stress pair passes and fails as it must. development.md: run the verifier under every collector after a generator change. (Paul Chiusano) #6331
  • 6823a78: jit_exit.ll and jit_helpers.ll regenerated with Apple clang 17, the compiler trunk's files name, so that CI's macOS runners can regenerate and diff them: the previous regeneration had used Homebrew's clang 23 and churned the text of both files. (Paul Chiusano) #6331
  • 5ce8a98: benchmarks/2026-11-06-nonmoving-barrier.md: the committed form measured (jitSuite under the default collector 0.98x to 1.03x on every row, two runs each, both Ref rows 1.00x; under -xn within the run-to-run spread), the first form's 0.88x Ref row that moved the pushes into generated code, and the cas row the verifier was there to catch. (Paul Chiusano) #6331
  • 8070f75: Attestations at 5ce8a98: tests (scripts/proofs/tests.sh, every suite and the CLI integration tests passing), transcripts partial (jit-tests.md, off and on) and formatting; migration cached. Every --check verdict: tests pass, transcripts partial, formatting pass, migration pass. (Paul Chiusano) #6331
  • 4bdfa88: Transcripts attestation at 5ce8a98 under the hash CI computes (3df9fca69): the previous one was hashed with untracked .output.md files under unison-src/, which the local hash includes and CI's tree does not. (Paul Chiusano) #6331
  • ae86547: The proof checks refuse to hash while untracked files their hash would include sit in the tree (a transcript run's leftover .output.md under unison-src/): the working tree's hash included them and CI's hash of the commit did not, so an attestation made that way was one CI never found, twice on 2026-11-06. PROOFS_ALLOW_UNTRACKED=1 hashes them anyway. development.md says so. (Paul Chiusano) #6331
  • ce74424: The JIT transcripts' .output.md files are gitignored: transcript.fork writes them next to the transcript, they are never committed, and untracked they went into the proof hashes. (Paul Chiusano) #6331

Don't miss a new unison release

NewReleases is sending notifications on new releases.