The readme.txt has been updated to include information about how to create and run a local jar.

There is a new Maven profile and Ant target in the build to build an executable Clojure jar with deps included (and test.check). This can be useful for doing dev on Clojure itself or for just cloning the repo and doing a quick build to get something runnable.

CLJ-2254 - add System property clojure.spec.skip-macros (default=false) that can be used to turn off spec checking in macros

CLJ-2108 - (startup time) delay loading of spec and core specs (still more to do on this)

CLJ-99 - (perf) min-key and max-key - evaluate k on each arg at most once

CLJ-1454 - (new) add swap-vals! and reset-vals! that return both old and new values

Can now bind *reader-resolver* to an impl of LispReader$Resolver to control the reader’s use of namespace interactions when resolving autoresolved keywords and maps.

Changing your namespace declarations in namespaces that declare or use specs to:

Updating your Clojure dependency to [org.clojure/clojure "1.9.0-alpha16"] - this will automatically pull in the 2 additional downstream libraries

In most cases, you should be able to update your usage of Clojure 1.9.0-alphaX to Clojure 1.9.0-alpha16 by:

The clojure.core.specs namespace has changed to clojure.core.specs.alpha. All qualified spec names in that namespace follow the same namespace change (most people were not using these directly)

The specs for clojure.core itself in namespace clojure.core.specs have been moved to the external library core.specs.alpha which Clojure now depends on

All keyword constants in clojure.spec (like :clojure.spec/invalid) follow the same namespace change (now :clojure.spec.alpha/invalid)

These namespaces have been changed and now have an appended ".alpha": clojure.spec.alpha, clojure.spec.gen.alpha, clojure.spec.test.alpha

The namespaces clojure.spec, clojure.spec.gen, clojure.spec.test have been moved to the external library spec.alpha which Clojure includes via dependency

We are moving spec out of the Clojure repo/artifact and into a library to make it easier to evolve spec independently from Clojure. While we consider spec to be an essential part of Clojure 1.9, there are a number of design concerns to resolve before it can be finalized. This allows us to move towards a production Clojure release (1.9) that depends on an alpha version of spec. Users can also pick up newer versions of the spec alpha library as desired. Additionally, this is a first step towards increased support for leveraging dependencies within Clojure.

We will be creating two new contrib libraries that will contain the following (renamed) namespaces:

org.clojure/spec.alpha clojure.spec.alpha (previously clojure.spec) clojure.spec.gen.alpha (previously clojure.spec.gen) clojure.spec.test.alpha (previously clojure.spec.test) org.clojure/core.specs.alpha clojure.core.specs.alpha (previously clojure.core.specs)

In most cases, we expect that users have aliased their reference to the spec namespaces and updating to the changed namespaces will only require a single change at the point of the require.

How will ClojureScript’s spec implementation change?

ClojureScript will also change namespace names to match Clojure. Eventually, the ClojureScript implementation may move out of ClojureScript and into the spec.alpha library - this is still under discussion.

Why do the libraries and namespaces end in alpha?

The "alpha" indicates that the spec API and implementation is still subject to change.

What will happen when the spec api is no longer considered alpha?

At that point we expect to release a non-alpha version of the spec library (with non-alpha namespaces). Users may immediately begin to use that version of spec along with whatever version of Clojure it depends on. Clojure itself will depend on it at some later point. Timing of all these actions is TBD.

Will the library support Clojure 1.8 or older versions?