= Clojure Deref (Apr 19, 2024)
Alex Miller
2024-04-19
:jbake-type: post

ifdef::env-github,env-browser[:outfilesuffix: .adoc]

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

== From the core

We have three big chunks of work remaining for 1.12. The first one, reworking the symbolic array type representation is complete and captured in https://clojure.atlassian.net/browse/CLJ-2807[CLJ-2807]. That will roll back the previous implementation added in alpha6 and replace it with a new representation. Array symbols will have the syntax `ComponentType/dimension`, eg `String/1` or `long/2`. More to say on that when we release.

The second piece is reworking the method value, qualified methods, and param-tags implementation. The big picture is that qualified methods withparam-tags must resolve to a single method (no change there), and that qualified methods without param-tags will otherwise support fully reflective invocation (as method values, in all arities).

Additionally, we're going to alter the syntax of qualified instance methods (Classname/.method) to make them distinct from static methods (Classname/method, as always), and constructors will continue to be Classname/new. There are existing cases in the JDK (Double.isNaN() for example) that have both static and instance methods that overlap in effective arity (instance methods take the instance object as first "arg"). Method values without param-tags have no way to differentiate between these and that was causing a lot of pain in the implementation. This work is nearing completion.

The final piece is functional interface conversion. While the hard parts are mostly done, there are some gnarly bits in optimizing method values passed as FIs (avoiding intermediate thunks or converters) but also getting close on this. At an interim point this week I ran some wide regression testing against community projects and found a few interesting cases, some were actual latent bugs, some drove some refinments. This is critical work in making this a clean release that does not break existing code, but it takes time.

Have been working on Clojure/Conj stuff too, hoping to get info about CFP, tickets, and sponsorship out in the next month.

== Podcasts and videos

* https://www.therepl.net/episodes/52/[52: Coding in YAML with Ingy döt Net] - The REPL
* https://www.youtube.com/watch?v=J2ae-ttSCjs[What's That Function? clojure.core - conj peek and pop] - What's That Function
* https://www.youtube.com/watch?v=8VsMCk8J8EE[Learn Clojure – Starting with Clojure spec] - Clojure Diary

== Blogs, articles, and projects

* https://humanscode.com/columns-for-tablecloth-launch[Launching Columns for Tablecloth] - Ethan Miller
* https://gaiwan.co/blog/heart-of-clojure-2-0/[Heart of Clojure 2.0] - Arne Brasseur (Gaiwan)
* https://scicloj.github.io/blog/clojurists-together-project-scicloj-community-building-march-2024-update/[Clojurists Together project - Scicloj community building - March 2024 update] - Daniel Slutsky
* https://yamlscript.org/posts/apr-16-2024/[YAMLScript Spring Update] - Ingy döt Net
* https://sagarvrajalal.com/blog/composing-caches[Composing Caches] - Sagar Vrajalal


== Libraries and Tools

New releases and tools this week:

* https://github.com/kurtharriger/clj-mergetool[clj-mergetool] https://github.com/kurtharriger/clj-mergetool/blob/main/CHANGELOG.md[0.4.3] - smarter git mergetool for clojure and edn
* https://github.com/constacts/milvus-clj[milvus-clj] 0.2.1 - Clojure libraray for Milvus
* https://github.com/stefanvstein/testify[testify] 0.4.0 - Running clojure code comments
* https://github.com/metosin/oksa[oksa] https://github.com/metosin/oksa/blob/main/CHANGELOG.md[0.1.0] - Generate GraphQL queries using Clojure data structures
* https://github.com/frenchy64/fully-satisfies[fully-satisfies] https://github.com/frenchy64/fully-satisfies/blob/main/CHANGELOG.md[1.10.4] - Utility functions for Clojure
* https://github.com/igrishaev/pg2[pg2] https://github.com/igrishaev/pg2/blob/master/CHANGELOG.md[0.1.11] - A fast PostgreSQL driver for Clojure
* https://github.com/onionpancakes/chassis[chassis] https://github.com/onionpancakes/chassis/releases/tag/v1.0.365[1.0.365] - Fast HTML5 serialization for Clojure
* https://github.com/guillerglez88/hl7v2[hl7v2] 0.0.1-SNAPSHOT - Hl7v2 Clojure lib
* https://github.com/tonsky/clj-reload[clj-reload] https://github.com/tonsky/clj-reload/blob/main/CHANGELOG.md[0.5.0] - Smarter way to reload Clojure code
* https://github.com/flow-storm/flow-storm-debugger[flow-storm-debugger] https://github.com/flow-storm/flow-storm-debugger/blob/master/CHANGELOG.md[3.15.2] - A debugger for Clojure and ClojureScript with some unique features
* https://github.com/raystubbs/zero[zero] 0.1.7 - Build web components in ClojureScript
* https://github.com/BetterThanTomorrow/calva[calva] https://github.com/BetterThanTomorrow/calva/blob/published/CHANGELOG.md[2.0.443] - Clojure & ClojureScript Interactive Programming for VS Code
* https://github.com/nubank/k8s-api[k8s-api] https://github.com/nubank/k8s-api/releases/tag/1.0.0[1.0.0] - Kubernetes client, data driven
* https://github.com/scicloj/tablecloth[tablecloth] 7.029.2 - Dataset manipulation library built on the top of tech.ml.dataset
* https://github.com/taoensso/telemere[telemere] https://github.com/taoensso/telemere/releases/tag/v1.0.0-beta1[v1.0.0-beta1] - Structured telemetry library for Clojure/Script
* https://github.com/abogoyavlensky/automigrate[automigrate] https://github.com/abogoyavlensky/automigrate/releases/tag/0.3.3[0.3.3] - 🤖 Auto-generated database migrations for Clojure
* https://github.com/squint-cljs/squint[squint] https://github.com/squint-cljs/squint/blob/main/CHANGELOG.md[0.7.105] - Light-weight ClojureScript dialect
* https://github.com/squint-cljs/cherry[cherry] https://github.com/squint-cljs/cherry/blob/main/CHANGELOG.md[0.1.17] - Experimental ClojureScript to ES6 module compiler
* https://github.com/soulspace-org/overarch[overarch] https://github.com/soulspace-org/overarch/blob/main/Changelog.md[0.15.1] - A data driven description of software architecture based on UML and the C4 model
* https://github.com/nextjournal/clojure-mode[clojure-mode] https://github.com/nextjournal/clojure-mode/blob/main/CHANGELOG.md[0.3.2] - Clojure/Script mode for CodeMirror 6
* https://github.com/babashka/nbb[nbb] https://github.com/babashka/nbb/blob/main/CHANGELOG.md[1.2.188] - Scripting in Clojure on Node.js using SCI
* https://github.com/babashka/babashka[babashka] https://github.com/babashka/babashka/blob/master/CHANGELOG.md[1.3.190] - Native, fast starting Clojure interpreter for scripting
* https://github.com/juji-io/datalevin[datalevin] https://github.com/juji-io/datalevin/blob/master/CHANGELOG.md[0.9.5] - A simple, fast and versatile Datalog database
* https://github.com/babashka/http-client[http-client] https://github.com/babashka/http-client/blob/main/CHANGELOG.md[0.4.18] - HTTP client for Clojure and Babashka built on java.net.http
* https://github.com/babashka/instaparse-bb[instaparse-bb] https://github.com/babashka/instaparse-bb/blob/main/CHANGELOG.md[0.0.4] - Use instaparse from babashka
