Chez concurrency pt.2: clojure.core.async on real-thread blocking channels
No mature Chez fibers library exists and this is a threaded Chez build, so a go block is an OS thread and a channel is a mutex+condition blocking queue: <! / >! are the blocking <!! / >!! and work anywhere (no CPS transform), like the Janet stackful-fiber model but with real parallelism and a shared heap. host/chez/async.ss provides chan (unbuffered rendezvous / fixed / dropping / sliding), <! >! <!! >!! close! alts! timeout put! take! buffer ctors, channel transducers, and go-spawn, all def-var!'d into clojure.core.async; go/go-loop/ thread are macros (mark-macro!) expanding to go-spawn, mirroring src/jolt/ async.janet. Binding conveyance rides the thread-parameter binding stack from pt.1. alts! polls with a 1ms backoff (no cross-channel wait-set yet) and is take-only, matching the Janet impl. (require '[clojure.core.async ...]) resolves it with no file load — the vars are resident and require just registers the :as/:refer. cli-test covers go/buffered-drain/nested-<!/alts!/transducer/timeout/binding- conveyance (43/43). core.async isn't in the conformance corpus (feature-gated :async/core-async), so coverage is the Chez cli-test plus the existing Janet core-async-spec. Seed unchanged (no .clj touched). Prelude corpus 2534->2559, zero-Janet 2569, 0 new divergences on either; Janet gate + JVM cert green. jolt-byjr
This commit is contained in:
parent
ec30c9e405
commit
48ed72974f
4 changed files with 233 additions and 2 deletions
|
|
@ -303,8 +303,10 @@
|
|||
# into the prelude as an expander fn + mark-macro!, so syntax-quote VALUE forms
|
||||
# (`(...)/`[...]/`{...}/`#{...} via __sqcat/__sqvec/__sqmap/__sqset) run at runtime.
|
||||
# 2280->2295, 0 new divergences.
|
||||
# jolt-byjr (real-thread futures/pmap on Chez): future-call resolves, so the
|
||||
# future/deref/pmap cases run instead of crashing. 2534->2559, 0 new divergences.
|
||||
# Strided runs scale down.
|
||||
(def base-floor (scan-number (or (os/getenv "JOLT_CHEZ_PRELUDE_FLOOR") "2534")))
|
||||
(def base-floor (scan-number (or (os/getenv "JOLT_CHEZ_PRELUDE_FLOOR") "2559")))
|
||||
(def floor (if (os/getenv "JOLT_CORPUS_LIMIT") 0 base-floor))
|
||||
(when (or (> (length diverged) 0) (< pass floor))
|
||||
(printf "REGRESSION: pass %d < floor %d or %d new divergence(s)" pass floor (length diverged)))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue