jolt/docs/libraries.md
Yogthos 3340635714 ^long is a 64-bit long: fast-path-with-fallback ops + logical unsigned shift
Completes the JVM long-compatibility gap so clojure.test.check (and the
property-based suites built on it, e.g. data.codec) run on jolt.

A ^long is 64-bit but a Chez fixnum is only 61-bit, so the backend's fast fx
comparison / quot / min / max / inc / dec ops raised on a full-width long (one
from the PRNG or wrapping arithmetic). They now go through the jolt-l* macros
(host/chez/seq.ss): the fx fast path when the operands ARE fixnums, the generic
op otherwise — so e.g. ((fn [^long a ^long b] (< a b)) Long/MAX 1) is false, not
an error. Arithmetic +/-/* keep the raw fx ops (under *unchecked-math* they're
already the wrapping unchecked-*).

Also fixes unsigned-bit-shift-right: it was an arithmetic (sign-propagating)
shift, now a logical shift over the 64-bit two's-complement window, so
(unsigned-bit-shift-right -1 1) is 2^63-1 like the JVM.

Result: test.check 1.1.3 loads and runs (generators, quick-check, shrinking);
data.codec's base64 property suite passes (12/12 defspecs; the 2 deftests check
clojure.lang.IFn$OLLOL, a JVM primitive-fn interface, N/A). Both added to
docs/libraries.md + the site.

re-mint (backend/seed). make test green (+3 corpus rows, 0 new divergences,
numeric gate updated to the jolt-l* ops), shakesmoke byte-identical.
2026-06-27 16:04:19 -04:00

4.5 KiB

Clojure libraries known to work with Jolt

Libraries confirmed to load and pass their conformance checks on Jolt. A library listed here works. See the examples, e.g. the ring-app example.

  • aero — EDN configuration with tag literals (#ref/#env/#or/#profile/#long/…)
  • config — environment configuration
  • Selmer — Django-style templates
  • medley — collection utilities
  • cuerdas — string manipulation
  • ring-core — via :deps/root "ring-core", on the ring-app example
  • ring-codec — URL/form encoding
  • ring-defaults — the standard middleware stack (params, static resources + content-type, session, security headers); its session/CSRF crypto comes from jolt-lang/jolt-crypto (OpenSSL)
  • reitit-core — data-driven routing; the reitit.Trie Java class is mirrored by jolt-lang/router.
  • integrant — data-driven system configuration (#ig/ref), with its dependency and meta-merge deps
  • honeysql — SQL formatter and helpers
  • clojure.jdbc — as jolt-lang/db's jdbc.core, over the built-in SQLite access (libsqlite3 via Chez's FFI)
  • next.jdbc — a compatibility layer in jolt-lang/db over jdbc.core
  • tools.logging — runs verbatim over a native clojure.tools.logging.impl stderr backend
  • migratus — database migrations over the next.jdbc layer
  • malli — data schema validation, on the malli-app example.
  • markdown-clj — Markdown → HTML, on the markdown-app example
  • hiccup — HTML from Clojure data, on the hiccup-app example
  • clojure.data.json — JSON reading and writing
  • clojure.spec.alpha — data specs
  • core.match — pattern matching.
  • core.cache — caching (Basic/FIFO/LRU/ LU/TTL/Soft + the wrapped atom API), over data.priority-map.
  • core.memoize — function memoization over core.cache.
  • core.async — CSP channels and go blocks (<!/>!/alts!, pipeline, mult/mix/pub/sub) on real OS threads.
  • core.logic — relational logic programming (unification, run/fresh/conde, finite domains).
  • math.combinatorics — permutations, combinations, subsets, selections, cartesian products, partitions.
  • core.contracts — programming by contract (contract/with-constraints/provide), over core.unify.
  • data.zip — zipper navigation, including clojure.data.zip.xml; XML parsing via jolt-lang/xml (which now ships clojure.xml/parse).
  • data.csv — reading and writing CSV.
  • data.codec — base64 encode/decode over byte arrays.
  • test.check — property-based testing (generators, quick-check, shrinking).
  • tick — date/time over Jolt's java.time; #time/… literals via time-literals.
  • transit-jolt — Transit (JSON) read/write