Clojure 1.11.0 release

Clojure 1.11.0 release

22 March 2022
Alex Miller

Clojure 1.11 provides new syntax for keyword argument invocation, namespace aliasing without loading, a new clojure.math namespace, and many additional bug fixes and enhancements.

Keyword arguments are optional trailing variadic arguments of the form (f akey aval bkey bval …​). Invoking functions with keyword arguments is convenient for people to write, but keyword args are not collections so they are hard to flow between functions. In Clojure 1.11, functions taking keyword arguments can now be passed a trailing map instead of or in addition to and following the key/value pairs. When a lone map is passed, it is used for destructuring, else the trailing map is added to the key/value pair map by conj. This change makes keyword arg functions more convenient for programmatic use.

Spec (and other libs) rely on qualified keywords as spec names. Namespace aliasing in ns makes long names shorter but required namespaces to exist and be loaded. In Clojure 1.11, require adds a new option :as-alias, which is like :as but does not require the namespace to exist or load.

The JDK package java.lang.Math provides access to many useful math functions. Clojure previously relied on using these via interop, but this had issues with discoverability, primitive performance, higher order application, and portability. The new clojure.math namespace provides wrapper functions for the methods available in java.lang.Math for long and double overloads with fast primitive invocation.

Additionally, a number of functions have been added to clojure.core: abs NaN? infinite? parse-double parse-long parse-boolean parse-uuid random-uuid update-keys update-vals and iteration.

Detailed changelog

See the change log for a complete list of all changes in Clojure 1.11.0.


Thanks to all the community members who contributed patches to Clojure 1.11:

  • Alexander Yakushev

  • Ambrose Bonnaire-Sergeant

  • Arne Brasseur

  • Ghadi Shayban

  • Howard Lewis Ship

  • Hugo Duncan

  • Jonathan Johnston

  • Keyhan Vakil

  • Marc O’Morain

  • Michiel Borkent

  • Nikita Prokopov

  • Paula Gearon

  • Steve Miner