Clojure Deref (Feb 26, 2024)

Clojure Deref (Feb 26, 2024)

26 February 2024
Alex Miller

Welcome to the Clojure Deref! This is a weekly link/news roundup for the Clojure ecosystem (feed: RSS). Thanks to Anton Fonarev for link aggregation.

From the core

This week we released Clojure 1.12.0-alpha8 which is a minor update, mainly to revert CLJ-1162 which caused problems for some cases where a type implemented both IDeref and Future. This release also contains an updated fix for CLJ-2783 which we reverted in alpha7 and caused problems with (at least) instaparse. The change for CLJ-2568 is one of the highest questions in Ask Clojure - we thought it was ready for alpha6 but it caused a test failure in our test suite when direct linking was turned off and we wanted to understand that better before we released. In light of several regression failures seen in alpha6, we’ve created a new regression test suite that checks a lot of community projects and will be using this more proactively in the future to reduce this kind of churn.

In new work, we’ve been reconsidering the design work on array class symbols, qualified methods, and method values based on some of the things we saw from the community. With array class symbols, we in particular saw both questions and concerns that indicated we had at least one invalid assumption baked into the design. The array class symbol design was based on an assumption that Foo* names were invalid class names, which is true in Java, but not on the JVM (or in Clojure via deftype)! This drove us way back to the beginning of the design process and I think we will end up changing this syntax, more on that to come.

There was a lot of feedback on qualified methods and method values with respect to the relationship of these features to reflection. Using reflection is valuable, especially in the context of exploratory programming at the REPL. This has caused us to re-think some of our approach here, design work still ongoing, but I expect there will be some changes in this area.

Podcasts and videos

Libraries and Tools

New releases and tools this week:

  • clojure 1.12.0-alpha8 - The Clojure programming language

  • polylith 0.2.19 - A tool used to develop Polylith based architectures in Clojure

  • guardrails 1.2.3 - Efficient, hassle-free function call validation with a concise inline syntax for clojure.spec and Malli

  • mesalog 0.2.253 - CSV data loader for Datalog databases

  • cli 0.4.24 - Opinionated command line argument handling, with excellent support for subcommands

  • deep-diff2 2.11.216 - Deep diff Clojure data structures and pretty print the result

  • clj-reload 0.1.3 - Smarter way to reload Clojure code

  • pg2 0.1.3 - A fast PostgreSQL driver for Clojure

  • flint 0.3.0 - SPARQL DSL library for Clojure(Script)

  • flint-jena 0.1.3 - Library to compile Flint queries and updates into Apache Jena objects

  • c4k-forgejo 3.2.1 - Provision forgejo on k8s with c4k

  • bosquet 2024.02.22 - Tooling to build LLM applications

  • neanderthal 0.48.0 - Fast Clojure Matrix Library

  • babashka 1.3.189 - Native, fast starting Clojure interpreter for scripting

  • squint 0.6.94 - Light-weight ClojureScript dialect

  • clojure-cli-config 2024-02-16 - User aliases and Clojure CLI configuration for deps.edn based projects

  • clay 2-alpha80 - A tiny Clojure tool for dynamic workflow of data visualization and literate programming

  • tools-deps-native 0.1.6 - Run tools.deps as a native binary

  • clj-jwt 0.5.98 - A Clojure library to handle validation of JWTs and signing claims using JSON Web Keys

  • splint 1.14.0 - A Clojure linter focused on style and code shape

  • nrepl 1.1.1 - A Clojure network REPL that provides a server and client, along with some common APIs of use to IDEs and other tools that may need to evaluate Clojure code in remote environments

  • calva 2.0.413 - Clojure & ClojureScript Interactive Programming for VS Code

  • guardrails 1.2.3 - Efficient, hassle-free function call validation with a concise inline syntax for clojure.spec and Malli

  • cli 0.8.57 - Turn Clojure functions into CLIs