cljgo 0.3.0
Changelog
- 046c0e3: ADR 0036: reader features stay :cljgo+:default; class names intern as opaque class refs (#38) (@muthuishere)
- 66cedcb: ADR 0039: real type ancestry — our types' protocols/interfaces, munged class-name resolution, flattened Object super for class refs (#42) (@muthuishere)
- d24f4a7: ADR 0048: richer, LLM-friendly error rendering (records the spike s28 decision) (#75) (@muthuishere)
- f0e3aa4: ADR 0068: .cljc joins the accepted extensions; REPL resolves against cwd (@muthuishere)
- 34a249b: ADRs 0056-0062 (Bun-of-Clojure batteries) + validation spikes S37-S41 (#97) (@muthuishere)
- 7f7da25: AOT-core piece 2: pure Go builtins move to pkg/corelib, out of the interpreter (ADR 0043) (#51) (@muthuishere)
- db3a211: AOT-core piece 3: compiled binaries link the compiled core, not the interpreter (ADR 0046) (#53) (@muthuishere)
- 5f4edd2: Agent error state (agent-error/restart-agent) + 2-arity into-array (#44) (@muthuishere)
- 36439fc: Apply ADR 0032 follow-on: with-precision + format %f/%e/%g on BigDecimal (#36) (@muthuishere)
- c1bd46e: Apply ADR 0045: reduce/map/filter/mapv/comp are native Go builtins (#48) (@muthuishere)
- 69fa54d: CI: give go test a 30m timeout for the growing conformance suite (#83) (@muthuishere)
- 5d23e87: Deep leftovers: record dot-ctors, doseq modifiers, vec aliasing, STM-lite refs/agents, future-cancel, reader meta scope (ADR 0038) (#39) (@muthuishere)
- 60479ed: Document the targeted core.async version (1.6.681) (#71) (@muthuishere)
- ac1d92e: Error enrich batch 1: compiled arity == interpreted + 5 coded runtime errors (ADR 0048) (#77) (@muthuishere)
- b9f672f: Error enrich batch 2: name types like the JVM + G5006/G5007 codes (ADR 0048) (#80) (@muthuishere)
- c92a45a: Fix stale hash cache on array-map assoc (the PR #30 aliasing defect) (#37) (@muthuishere)
- 11c69f9: Fix: integer divide-by-zero threw Go panics / wrong text / wrong result (#76) (@muthuishere)
- 9757545: Fundamentals A1: stdio, CLI args, atom ops, runtime essentials (#105) (@muthuishere)
- f3d39a4: Fundamentals A2: print-method/print-dup, reader surface, data readers, clojure.test/report (#106) (@muthuishere)
- 6af39c2: Fundamentals A3: 1.11/1.12 seq fns + sequence multi-coll fix + Inst/uri?/arrays (#101) (@muthuishere)
- bb10230: Fundamentals A4: namespace ops, pmap family, chunk API shims (#103) (@muthuishere)
- 37906fb: Fundamentals audit: classify clojure.core (+ friends) gaps against real Clojure 1.12.5 (docs/fundamentals-audit-2026-07.md) (#57) (@muthuishere)
- 58cc6d3: Fundamentals batch 1: declare/defn-/defonce/letfn/lazy-cat/time/locking/with-open/with-redefs(-fn)/memfn/io!/sync/amap/areduce (#61) (@muthuishere)
- e0f0116: Fundamentals batch 2: 10 missing clojure.core functions + read-string (#62) (@muthuishere)
- c505cf2: Fundamentals batch 3: clojure.pprint + clojure.repl, and fix ^:private loss in compiled binaries (#63) (@muthuishere)
- 443c224: Fundamentals batch 4: complete clojure.test, fix syntax-quoted binding, unbreak Windows CI (#64) (@muthuishere)
- a38f7d0: Fundamentals: JVM-compatible hasheq + the clojure.core hash surface (ADR 0051) (#81) (@muthuishere)
- 4746b4d: Fundamentals: add the
..chained-member macro; freeze deep print-readably nesting (#98) (@muthuishere) - fccc51a: Fundamentals: assert-expr extension point + agent/ref lifecycle vars (#68) (@muthuishere)
- 1eb44a0: Fundamentals: clojure.walk + clojure.data (whole namespaces), clojure.edn/read, clojure.string/re-quote-replacement (#59) (@muthuishere)
- abf781e: Fundamentals: fix two REPL-vs-binary divergences (named arity errors, ns-map parity) (#100) (@muthuishere)
- 39e9526: Fundamentals: print/println strip string quotes at every depth, matching JVM (#70) (@muthuishere)
- 9c43bdf: Fundamentals: tagged-literal + reader-conditional value types & fns (ADR 0050) (#79) (@muthuishere)
- fded5cc: Macro arity errors hide &form/&env; diagnose 4 load-path suite files as upstream (#41) (@muthuishere)
- 2663542: Multi-namespace emission: one Go package per ns, registry-triggered loading (ADR 0042) (#46) (@muthuishere)
- 084a6e0: Perf campaign evidence: spikes S22-S24, ADR 0037 (AOT-core), debt audit, README/site benchmark truth (#49) (@muthuishere)
- 71bb262: Perf: <=/>= join the ADR 0067 comparison intrinsics — corpus fib 739 -> 31 ms (#96) (@muthuishere)
- 25a5b47: Perf: chunk-aware count/keep + IFn2 reduce fast path (stacked on #90) (#92) (@muthuishere)
- ea7503b: Perf: chunk-aware map/filter (ADR 0063) + map/filter perf gate (#90) (@muthuishere)
- 41f5f09: Perf: claw back AOT-binary startup — bulk boot refer + boot GC deferral (9.0 -> 4.4 ms) (#95) (@muthuishere)
- 7699827: Perf: direct-call emission for statically-known local fns (ADR 0064) (#91) (@muthuishere)
- 9befcac: Perf: parallelize the compiled conformance harness (dual-harness gate intact) (#85) (@muthuishere)
- 6d9ef08: Perf: sealed-core dirty-flag guard elision (ADR 0066) (#93) (@muthuishere)
- cab4234: Perf: the clojure.core-mediated CI gate ADR 0037 #5 mandated, and a chunked reduce fast path (#66) (@muthuishere)
- 28de763: README overhaul: sync with post-campaign reality (re-measured 2026-07-23) (@muthuishere)
- 0fdb9f9: README: clojure.core is complete — 632/679 (93%), 47 documented-JVM, no third bucket (@muthuishere)
- a133ebd: Reader conditionals: full guide verification, read-string opts protocol, :preserve wiring (#104) (@muthuishere)
- bf46d94: Rename app framework keel -> bri (owner) (#56) (@muthuishere)
- 0abb22d: Renumber toolkit ADRs 0048-0051 -> 0052-0055, resolve number collision on main (#86) (@muthuishere)
- 35e613b: Spike S19 + ADR 0040 (proposed) + OpenSpec: core.async first-class on Go channels (#45) (@muthuishere)
- 687e81e: Spike S20 + ADR 0041 (proposed): keel — the batteries-included application framework (#47) (@muthuishere)
- 30c71ad: Spike S21 + ADR 0044 (proposed) + OpenSpec: C FFI via purego, for real (#50) (@muthuishere)
- 6d31f76: Spike s28: richer, LLM-friendly error rendering (prototype + VERDICT) (#74) (@muthuishere)
- ae4ce20: Spike s42: emitter numeric type inference (unboxed int64) (#94) (@muthuishere)
- 28e9a20: Tail wave: every remaining implementable clojure.core var (632/679, 93%) (#107) (@muthuishere)
- bd5322f: Toolkit: dependency resolution + publish, citizen of both ecosystems (ADRs 0048/0049/0050) (#84) (@muthuishere)
- c4c687a: Typed builtin exception classes are catchable with real JVM ancestry (ADR 0039 addendum) (#99) (@muthuishere)
- 0237239:
cljgo newis a language scaffolder, not a web-framework scaffolder (ADR 0047) (#55) (@muthuishere) - 1e98cd6: benchmark/: a reproducible two-leg suite, and honest numbers in README (#65) (@muthuishere)
- 24b7505: benchmark: re-measure after the 2026-07-23 perf campaign (ADRs 0063-0067) (@muthuishere)
- ac58f18: benchmark: round-2 re-measure — startup clawback + le/ge lift (#95/#96) (@muthuishere)
- 90ff5da: big-int? shim: wire the real predicate — bigints were already distinct (#35) (@muthuishere)
- 7395a97: bri: API-first security tier — JWT auth, Compojure router, observability (ADR 0069) (#108) (@muthuishere)
- 38ddde5: ci: sync release.yml go-test budgets with ci.yml (#111) (@muthuishere)
- 5ca58d1: clojure.zip: the whole namespace, all 28 publics (fundamentals audit 2026-07) (#58) (@muthuishere)
- 7982f4f: core.async T1: done-chan close, wrapper channels, clojure.core.async ns, alts/alt!, T1 stragglers, perf budget (ADR 0040) (#60) (@muthuishere)
- b563224: core.async T2: distribution/composition pumps (ADR 0040 §2) (#69) (@muthuishere)
- edf930e: core.async T3: pipeline / pipeline-blocking / pipeline-async (ADR 0040) (#78) (@muthuishere)
- fc77f8b: core.async audit 2026-07: implement map + thread-call, hide go*, confirm sync (#72) (@muthuishere)
- a4bde79: docs(site): dependency resolution, publish, core.async + refreshed benchmarks (#87) (@muthuishere)
- 9d3db1a: docs(site): footprint & density, bri + roadmap, honest benchmark modes, no ADR numbers (#89) (@muthuishere)
- 70ebe44: docs(site): simple install (brew + go install) + full quickstart (#88) (@muthuishere)
- 8d611ee: edn read-string strictness + clojure.string/escape (#43) (@muthuishere)
- ee8d19f: examples: web-api — a full JWT-secured JSON API + CI-gated suite (#109) (@muthuishere)
- b16a655: keel T0+T1: cljgo new/dev/test/config/routes + keel.http/html/config (ADR 0041) (#52) (@muthuishere)
- a4034ef: keel:
cljgo new's app becomes a real, runnable, CI-tested template (ADR 0041 T0) (#54) (@muthuishere) - 5b4e228: reify: anonymous protocol-satisfying instances (spike s29 -> ADR 0049) (#82) (@muthuishere)
- 2a98e9d: site: docs overhaul — Starlight docs with giscus comments + llms.txt (#102) (@muthuishere)
- 4601a6a: site: sync landing page with post-campaign reality (round-2 numbers, 2026-07-23) (@muthuishere)
- ca2bfb2: site: sync landing page with the 2026-07-23 perf campaign (ADRs 0063-0067) (@muthuishere)
- 81f5ba0: spikes S25/S26/S27: bri data layer, jobs, cache (closed, ADR 0027) (#67) (@muthuishere)
Install
go install github.com/muthuishere/cljgo/cmd/cljgo@v0.3.0Or download a binary above and put it on your PATH.
cljgo repl, cljgo run and Go interop work from the binary alone, with
no Go toolchain installed. cljgo build additionally needs the Go
toolchain and a checkout of this repo — the generated module replaces
the runtime to a local source tree, so set CLJGO_SRC to your clone or run
inside it. Known v0 limitation (ADR 0013); publishing the runtime as a real
Go module retires it.
cljgo's own code is MIT. The vendored runtime under pkg/lang/ is
EPL-1.0, from Glojure — see
NOTICE.