Rename src/jolt -> stdlib (the runtime-loaded layer; jolt-core stays the seed-baked layer) and update the loader / emit-image / doc paths. Drop dead code: the spike/ experiments, the duplicate clojuredocs-export.edn (json moves to tools/), the Janet-era jolt.http binding, and the orphaned persistent_vector.clj whose ns/path didn't even match. Strip porting residue from comments and docstrings across host/chez, jolt-core, stdlib, tests, and docs: internal issue ids, "Phase N" markers, and the "vs Janet" historical exposition, leaving present-tense descriptions and the real JVM-Clojure semantic contrasts. Same pass over the corpus suite labels. The seed is unchanged (docstrings/comments aren't emitted), so the self-host fixpoint and corpus are untouched. Port tools/spec_coverage.py off the dead janet probe to bin/joltc and regenerate coverage.md; drop the dead :host/janet rule from certify.clj and regenerate the conformance profile. Add docs/host-interop.md (the JVM shims and how to register your own host class from a library) and a writing-style note in CLAUDE.md. Stabilize the four racy concurrency corpus cases (future-cancel and agent send/send-off): give the future a sleeping body and the agent a slow action, so cancel reliably catches an in-flight future and deref reliably reads the pre-update snapshot. They certify deterministically now, so drop their :flaky allowlist entries and the orphaned legend.
28 lines
1.5 KiB
Scheme
28 lines
1.5 KiB
Scheme
;; Collection constructors + rand — host-coupled natives the overlay assumes as
|
|
;; bare clojure.core vars. The persistent-collection constructors already exist
|
|
;; in collections.ss (jolt-hash-map / jolt-hash-set / jolt-vector); this just
|
|
;; binds the public clojure.core names to them. Loaded after def-var! (rt.ss) +
|
|
;; the collections + seq tiers. hash-map/array-map/hash-set/set/rand semantics.
|
|
|
|
;; hash-map / hash-set: variadic kvs / elems straight onto the existing ctors.
|
|
;; array-map: Clojure preserves insertion order, but jolt's `=` is structural and
|
|
;; the parity corpus compares by value, so a pmap is observationally equal for
|
|
;; the tested cases; keys-ordering is a separate (untested-here) concern.
|
|
(define (jolt-array-map . kvs) (apply jolt-hash-map kvs))
|
|
|
|
;; set: realize any seqable to a list, then dedup through the set ctor. nil -> #{}.
|
|
(define (jolt-set coll)
|
|
(if (jolt-nil? coll) (jolt-hash-set) (apply jolt-hash-set (seq->list coll))))
|
|
|
|
;; rand: a flonum in [0, n) (n defaults to 1.0) — jolt is all-flonum, so the
|
|
;; result is a double like every other number.
|
|
(define (jolt-rand . n)
|
|
(let ((r (random 1.0)))
|
|
(if (null? n) r (* r (exact->inexact (car n))))))
|
|
|
|
(def-var! "clojure.core" "hash-map" jolt-hash-map)
|
|
(def-var! "clojure.core" "hash-set" jolt-hash-set)
|
|
(def-var! "clojure.core" "array-map" jolt-array-map)
|
|
(def-var! "clojure.core" "set" jolt-set)
|
|
(def-var! "clojure.core" "rand" jolt-rand)
|
|
(def-var! "clojure.core" "map-entry?" jolt-map-entry?)
|