Defect

  • [CLJ-700] - contains? broken for transient collections
  • [CLJ-701] - Primitive return type of loop and try is lost
  • [CLJ-787] - transient blows up when passed a vector created by subvec
  • [CLJ-1029] - ns defmacro allows arbitrary execution of clojure.core fns
  • [CLJ-1074] - Read/print round-trip for +/-Infinity and NaN
  • [CLJ-1152] - PermGen leak in multimethods and protocol fns when evaled
  • [CLJ-1242] - = on sorted collections with different key types incorrectly throws
  • [CLJ-1322] - doseq with several bindings causes "ClassFormatError: Invalid Method Code length"
  • [CLJ-1358] - doc macro does not expand special cases properly
  • [CLJ-1371] - divide(Object, Object) with (NaN, 0) does not return NaN
  • [CLJ-1398] - Update URLs in javadoc.clj
  • [CLJ-1406] - Libs are blindly added into loaded-libs even if an error occurs during loading
  • [CLJ-1423] - Applying a var to an infinite arglist consumes all available memory
  • [CLJ-1620] - Constants are leaked in case of a reentrant eval
  • [CLJ-1630] - Destructuring allows multiple &-params
  • [CLJ-1705] - vector-of throws NullPointerException if given unrecognized type
  • [CLJ-1714] - Some static initialisers still run at compile time if used in type hints
  • [CLJ-1741] - deftype class literals and instances loaded from different classloaders when recompiling namespace
  • [CLJ-1744] - Unused destructured local not cleared, causes memory leak
  • [CLJ-1790] - Error extending protocols to Java arrays
  • [CLJ-1793] - Reducer instances hold onto the head of seqs
  • [CLJ-1841] - core/bean iterator is broken
  • [CLJ-1860] - 0.0 and -0.0 compare equal but have different hash values
  • [CLJ-1870] - Reloading a defmulti nukes metadata on the var
  • [CLJ-1872] - empty? is broken for transient collections
  • [CLJ-1887] - clojure.core.Vec does not fully implement clojure.lang.IPersistentVector
  • [CLJ-1914] - Range realization has a race during concurrent execution
  • [CLJ-1934] - (s/cat) with nonconforming data causes infinite loop in explain-data
  • [CLJ-1935] - clojure.spec/multi-spec ignores the multimethod hierarchy
  • [CLJ-1941] - Instrumentation of fns with primitive type hints fails
  • [CLJ-1962] - fn-spec only works with a fully ns-qualified quoted symbol
  • [CLJ-1970] - instrumented macros never conform valid forms
  • [CLJ-1977] - Printing a Throwable throws if Throwable has no cause / stacktrace
  • [CLJ-1981] - `spec/merge` does not flow conformed values across preds per docstring
  • [CLJ-1985] - with-gen of conformer loses unform fn
  • [CLJ-1988] - collection specs conform to reversed list when used on a sequence
  • [CLJ-2003] - Nesting cat inside ? causes unform to return nested result
  • [CLJ-2004] - s/multi-spec doesn't include :retag in `s/form`
  • [CLJ-2006] - clojure.spec/fdef mentions nonexistent clojure.spec.test/run-tests
  • [CLJ-2008] - clojure.spec.test/check without args tests fns from clojure.core, erroring out with #:clojure.spec{:failure :no-fn}
  • [CLJ-2012] - ns spec breaks gen-class forms that use strings as class names
  • [CLJ-2024] - Check should specize function specs before checking
  • [CLJ-2026] - Transient exceptions thrown in clojure.spec.test/check
  • [CLJ-2027] - bean printing regression from namespace map printing
  • [CLJ-2032] - Confusing error conforming fspec with missing arg spec
  • [CLJ-2035] - Bad s/form for collection specs
  • [CLJ-2036] - Generators for some? and any? only return collections or nil
  • [CLJ-2041] - clojure.spec/keys requires input collections conform to clojure.core/map?
  • [CLJ-2042] - s/form of s/? does not resolve pred
  • [CLJ-2043] - s/form of conformer is broken
  • [CLJ-2048] - java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.StackTraceElement
  • [CLJ-2051] - Typo in clojure.instant/validated docstring
  • [CLJ-2055] - binding-form spec parses symbol-only maps incorrectly
  • [CLJ-2057] - Function spec missing :ret can yield wrong answer for valid?
  • [CLJ-2059] - explain-data problems don't provide resolved symbols under :pred
  • [CLJ-2066] - Reflection on internal classes fails under Java 9
  • [CLJ-2067] - (s/def ::a ::b) throws unable to resolve error if ::b is not defined
  • [CLJ-2068] - s/explain of evaluated predicate yields :s/unknown
  • [CLJ-2076] - s/coll-of and s/map-of do not unform their elements
  • [CLJ-2077] - Clojure can't be loaded from the boot classpath under java 9
  • [CLJ-2079] - Generator overrides for spec aliases are not respected
  • [CLJ-2080] - clojure.spec/every-kv does not work on vectors - improve docs/errors
  • [CLJ-2089] - Sorted colls with default comparator don't check that first element is Comparable
  • [CLJ-2091] - clojure.lang.APersistentVector#hashCode is not thread-safe
  • [CLJ-2098] - autodoc fails to load clojure/spec.clj
  • [CLJ-2100] - s/nilable form should include the original spec, not the resolved spec
  • [CLJ-2103] - s/coll-of and s/every gen is very slow if :kind specified without :into
  • [CLJ-2111] - Clarify s/every docstring for :kind
  • [CLJ-2114] - ::defn-args spec incorrectly parses map body as a prepost rather than function body
  • [CLJ-2128] - spec error during macroexpand no longer throws compiler exception with location
  • [CLJ-2141] - New qualified-* predicates can return true, nil, and false
  • [CLJ-2142] - Namespace map syntax prevents duplicate key check
  • [CLJ-2143] - The result of s/form for s/keys* is different from the original form
  • [CLJ-2152] - clojure.spec: s/& has a broken form
  • [CLJ-2156] - Document char[] input support in clojure.java.io/copy
  • [CLJ-2161] - clojure.spec.alpha fails to reload
  • [CLJ-2167] - int-in-range? throws exception when val not an int
  • [CLJ-2168] - clojure.spec: :pred in explain for coll-of should have resolved symbols
  • [CLJ-2170] - Several top-level forms have improperly-located docstrings
  • [CLJ-2171] - Default explain printer prints root val and spec
  • [CLJ-2174] - Spec generated exceptions/error messages are a regression in terms of the out-of-the-box experience with Clojure.
  • [CLJ-2175] - Some collection specs have inconsistent forms of :pred in their explain data
  • [CLJ-2176] - s/tuple explain-data :pred problems
  • [CLJ-2177] - s/keys explain-data :pred problem
  • [CLJ-2178] - s/& explain-data :pred problem
  • [CLJ-2182] - s/& does not check preds if regex matches empty collection
  • [CLJ-2183] - `cat` specs should verify value is sequential
  • [CLJ-2186] - ::s/map-bindings definition is underspecified
  • [CLJ-2199] - Error attempting to unform unconformed keys (no :conform-keys opt)
  • [CLJ-2202] - coll-of :min-count and :gen-max used together cause collections that are too large to be generated
  • [CLJ-2204] - Clojure classes can be used to craft a serialized object that runs arbitrary code on deserialization
  • [CLJ-2210] - back referential expressions can cause exponential compilation times
  • [CLJ-2219] - Spec for ns :require clause incorrectly allows nested prefix lists
  • [CLJ-2220] - Spec for ns :use clause incorrectly allows nested prefix lists
  • [CLJ-2231] - Remove dep lib exclusions
  • [CLJ-2239] - Link to Google Guava API broken in clojure.java.javadoc/*remote-javadocs*

Enhancement

  • [CLJ-99] - max-key and min-key evaluate k multiple times for arguments
  • [CLJ-401] - Add seqable? predicate
  • [CLJ-1149] - Unhelpful error message from :use (and use function) when arguments are malformed
  • [CLJ-1159] - Improve docstring of clojure.java.io/delete-file to be clearer about intent of silently arg
  • [CLJ-1224] - Records do not cache hash like normal maps
  • [CLJ-1298] - Add more type predicate fns to core
  • [CLJ-1309] - Bindings after :as in list destructuring should throw error
  • [CLJ-1314] - Correct placement of doc string for function bubble-max-key
  • [CLJ-1381] - Improve support for extending protocols to primitive arrays
  • [CLJ-1385] - Docstrings for `conj!` and `assoc!` should suggest using the return value; effect not always in-place
  • [CLJ-1400] - Error "Can't refer to qualified var that doesn't exist" should name the bad symbol
  • [CLJ-1544] - If you AOT protocol call sites, then you will also need to AOT the protocol itself
  • [CLJ-1673] - Improve clojure.repl/dir-fn to work on namespace aliases in addition to canonical namespaces.
  • [CLJ-1719] - Add clojure.core/boolean? predicate
  • [CLJ-1826] - drop-last docstring refers to 'coll' but args refer to 's'
  • [CLJ-1837] - Improve wording of index-of and last-index-of doc strings
  • [CLJ-1859] - Update parameter name to reflect docstring
  • [CLJ-1873] - Docstrings for require and *data-readers* do not mention cljc files
  • [CLJ-1901] - amap calls `alength` at every iteration step
  • [CLJ-1910] - Namespaced maps
  • [CLJ-1917] - internal-reduce extended on StringSeq calls `.length` on every iteration step
  • [CLJ-1918] - Document await that it will never return if shutdown-agents was called
  • [CLJ-1919] - Destructuring support for namespaced keys and syms
  • [CLJ-1932] - Add clojure.spec/explain-str to return explain output as a string
  • [CLJ-1937] - spec/fn-specs should behave the same as s/spec w.r.t not-found
  • [CLJ-1957] - Add gen support for bytes?
  • [CLJ-1958] - Add uri? generator
  • [CLJ-1967] - Enhanced namespaced map pprint support
  • [CLJ-1993] - Print flag to suppress namespace map syntax
  • [CLJ-2028] - Docstring error in clojure.core/filter, remove, and take-while
  • [CLJ-2039] - typo in deftype doc string
  • [CLJ-2046] - generate random subsets of or'd required keys in map specs
  • [CLJ-2060] - Add support for undefining a spec
  • [CLJ-2061] - Better error message when exercise-fn called on fn without :args spec
  • [CLJ-2062] - Spec import and refer-clojure macros
  • [CLJ-2063] - Show longest path explain error first
  • [CLJ-2070] - Faster clojure.core/delay implementation
  • [CLJ-2085] - Add additional info to explain-data to help explain printers
  • [CLJ-2102] - Reduce collection generator default size from 20
  • [CLJ-2104] - Typo in pprint docstring
  • [CLJ-2108] - Loading core specs affects startup time
  • [CLJ-2113] - Update Clojure maven for latest on CI server
  • [CLJ-2132] - Maven pom requires artifact signing to install locally
  • [CLJ-2153] - Documentation for int-in and int-in-range? does not mention that they're limited to fixed precision integers
  • [CLJ-2163] - Add test for var serialization
  • [CLJ-2166] - instrument exception doesn't contain function name in ex-data
  • [CLJ-2179] - s/inst-in and s/int-in generators should have uniform distribution not biased towards min value
  • [CLJ-2184] - propagate metadata in doto forms
  • [CLJ-2188] - clojure.core/slurp does not mark its return type as String
  • [CLJ-2190] - clojure.spec.alpha/exercise-fn should emit a bettor error message when no implementation is found for a symbol
  • [CLJ-2216] - Change *explain-out* to return string, instead of printing output

Feature

  • [CLJ-1454] - Add swap-vals! and reset-vals! (swap! and reset! that return [old new])
  • [CLJ-1951] - bigint? predicate and generator
  • [CLJ-1965] - clojure.spec/def should support an optional doc-string
  • [CLJ-2112] - Add specs for spec forms
  • [CLJ-2123] - Lighter-weight aliasing for keywords
  • [CLJ-2165] - #clojure/var tag for transmitting var identity

Edit/Copy Release Notes

The text area below allows the project release notes to be edited and copied to another document.