Clojure
Clojure Deref (Dec 2, 2021)

Clojure Deref (Dec 2, 2021)

02 December 2021
Alex Miller

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

Highlights

We have had way too few Clojure conferences of late, but the next 2 days (Dec 3-4) is your chance to attend re:Clojure 2021 online! You can find the full schedule at https://www.reclojure.org and there will be keynotes from Stephen Wolfram, designer of the Wolfram Language and author of "A New Kind of Science", and from Gerald Jay Sussman, co-creator of the Scheme programming language, co-author of the legendary "Structure and Interpretation of Computer Programs" and most recently "Software Design for Flexibility". Be sure to check out the speaker interview series too.

Also, check out the Clojure Data Science Special on Sunday Dec 5th: https://www.meetup.com/London-Clojurians/events/282409187

In the core

Post 1.11.0-alpha3, we’ve had several questions about clojure.java.math and have prepped some follow-ups, which include a docstring fix and some reflective calls when a few functions were used as higher-order functions (otherwise, they’re inlined so this isn’t an issue). For the latter, we’ll be removing min and max as they are better served by the existing variadic and polymorphic impls in clojure.core. For abs, we’re going to move that to clojure.core and include it into one of the core numeric functions with support across all the Clojure numeric types (long, double, bigint, bigdec, ratio) - those impls will use Math.abs() where appropriate for best performance.

And finally, there were immediate questions about why clojure.java.math and not clojure.math with a portable impl in ClojureScript. Thanks to the work of Paula Gearon, that seems viable so we’re also planning to make that change for the next alpha. Thanks for the feedback on this - that’s why we do these alphas!

Thanks to a suggestion from Ghadi Shayban, we also looked into using the java.lang.Math.addExact() etc methods in lieu of the existing Clojure checked non-overflowing math ops (the default when you use +, -, *, inc, dec, etc). The benefit here is that these methods are "intrinsics" in Hotspot and the Java compiler will replace these calls with hand-crafted assembly or IR code. Still needs some more eval, but looks like a nice little boost in default Clojure math.

Big picture, I think we’ll do one more chunk of new feature / bug work and then start the rampdown into a 1.11 GA release, probably within a month.

Fogus has been working on transit-clj issue #47 off and on and I think that’s getting close to a fix, probably mostly in transit-java. Also, it’s his birthday today - happy birthday Fogus!

Libraries and Tools

New releases and tools this week:

  • Calva v2.0.228 - Calva is an integrated REPL powered environment for enjoyable and productive Clojure and ClojureScript development in Visual Studio Code. However…​ Peter requested that if you are interested in helping to debug the new Parinfer support, you can use version 2.0.227 - read more here.

  • clj-kondo 2021.12.01 - A linter for Clojure code that sparks joy

  • setup-clojure 3.6 - GitHub Action to provision clojure’s most popular build tools for Linux, Mac OS X and Windows

  • Clojure CLI 1.10.3.1040 - Command line tools for Clojure

  • clojure-lsp 2021.12.01-12.28.16 - A Language Server for Clojure(script)

  • witchcraft 0.6.150 - Clojure API for manipulating Minecraft, based on Bukkit

  • c4k-nextcloud - c4k-nextcloud provides a k8s deployment for nextcloud

  • test-doc-blocks v1.0.166-alpha - Test AsciiDoc and CommonMark code blocks found in articles and docstrings

  • clip 0.26.0 - Light structure and support for dependency injection

  • honeysql 2.1.829 - Turn Clojure data structures into SQL

  • tools-deps-native v0.0.4 - Run tools-deps-alpha as a native binary

  • fs v0.1.2 - File system utility library

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

  • omni-trace 0.2.2 - Omnipotent/omniscient tracing core for debugging clojure(script)

  • guardrails 1.1.9 - A middle ground between unguarded functions and enforced spec instrumentation

  • fulcro-rad 1.1.0-RC8 - Fulcro Rapid Application Development

  • deps-new 0.4.3 - A new, simpler alternative to clj-new

  • clojure-site-org-mode - The documentation of https://clojure.org/ converted into a single org-mode file

  • clojurescript-site-org-mode - The documentation of https://clojurescript.org/ converted into a single org-mode file