Clojure Deref (Apr 14, 2022)

Clojure Deref (Apr 14, 2022)

14 April 2022
Alex Miller

Welcome to the Clojure Deref! This is a weekly link/news roundup for the Clojure ecosystem. (@ClojureDeref RSS)

From the core

I mentioned back in the April 1st Deref that we’d had a couple reports with 1.11 where Clojure code compiled with a prior version of Clojure with functions overlapping newly added functions in 1.11 had failed when run without recompilation on 1.11. (Notably, this is not a new issue, just one we are seeing now by adding a function name abs in clojure.core that is relatively common.) Recompiling is sufficient to get past the issue, but we want to actually fix this problem for future releases. Fogus has spent a couple weeks now diving into the details and it mostly centers around refer and some subtle differences in ordering behavior between AOT compiled Clojure and loaded Clojure source. There have been several changes over the life of Clojure trying to address these differences, but I’m convinced we did not truly understand the problem in most of those cases and created workarounds instead of actual fixes. Anyhow, Fogus is continuing to work on this.

Among other things, I’ve been most recently looking into the reducibility and iterability of seqs over persistent collections. In most cases, these (unnecessarily) lose the context of their original (immutable) source. I’ve done an exhaustive review of this and I’m working towards a tidy set of improvements that should benefit reduce (and things built on reduce like into, transduce, etc) in a lot of cases. Hope to have a public ticket and patch for this work soon.

Libraries and Tools

New releases and tools this week:

  • charred 1.002 - zero dependency efficient read/write of json and csv data

  • http-cron 0.2.1 - Service / Clojure library to POST to HTTP endpoints at regular intervals

  • plusinia 1.23 - Solution to N+1 problem in Lacinia

  • clj-fast 0.0.11 - Unpredictably faster Clojure

  • clojure-deps-edn - User level aliases and Clojure CLI configuration for deps.edn based projects

  • nbb 0.3.5 - ad-hoc scripting for Clojure on Node.js

  • matcho 0.1.1 - Simpliest pattern matching you’ve ever seen

  • hermes 0.10.533 - terminology tools to support SNOMED CT, cross-maps, inference, fast full-text search, autocompletion, compositional grammar and the expression constraint language

  • clarktown 1.1 - An extensible and modular zero-dependency, pure-Clojure Markdown parser

  • lsp4clj 0.0.1 - LSP base support for any LSP that is implemented in Clojure

  • byte-streams 0.3.0 - A simple way to handle the menagerie of Java byte representations

  • tools.project 0.1.71 - A project management tool

  • macrocss 0.1.0 - Macro-driven atomic CSS library for Clojure(Script)

  • clj-otel 0.1.2 - An idiomatic Clojure API for adding telemetry to your libraries and applications using OpenTelemetry

  • fulcro 3.5.18 - A library for development of single-page full-stack web applications in clj/cljs

  • Calva 2.0.267 - Clojure & ClojureScript Interactive Programming for VS Code

  • jet 0.1.1 - CLI to transform between JSON, EDN and Transit, powered with a minimal query language

  • rewrite-edn 0.2.0 - Utility lib on top of rewrite-clj with common operations to update EDN while preserving whitespace and comments