This release fixes a major issue with transit analysis caching where
files were leaked. It also includes a very significant compiler
enhancement thanks to Antonio Monteiro - you can now create
ClojureScript files without declaring a namespace. This opens the door
to making a much larger class of Clojure programs portable to
ClojureScript. require
and other ns related macros are now available
granted that they appear at the top of the file. Please take careful
note that they are not functions and cannot be used in dynamic
situations. Still this eases writing simple scripts and the door is
now open to finally support data literals in a comprehensive way.
We also bumped the Google Closure compiler dependency. Please note that Closure Compiler has made breaking changes around JS module processing so this version of ClojureScript is pinned to this latest release.
A huge thanks to the many people old and new that contributed to this release.
As always, feedback is most welcome!
Enhancements
- CLJS-1346: Support require outside of ns
Changes
- CLJS-1762: Bump Closure Compiler, refactor module support
- CLJS-1658: testing for protocol membership may return false positives
- CLJS-1536: REPL def symbol init collision
- CLJS-1805: Source map should take false
- CLJS-1804: Self-host: process namespace side-effects for new require without NS
- CLJS-1803: Use new require capability in REPLs
- CLJS-1796: Measure Google Closure specific optimization time
- CLJS-1782: Self-host: allow namespaces to require their own macros
- CLJS-1563: :source-map option to cljs.build.api/build should take nil
- CLJS-1785: Warn on reference to js/foo shadowed by local binding
Fixes
- make String an implicit ns like Math. revert char? and clarify docstring. add unit tests for char?
- fix cljs.spec.test/check docstring
- CLJS-1826: Self-host: load-deps doesn't honor
:reload
andreload-all
- CLJS-1825: :source-map error when passing
false
under simple optimizations - CLJS-1821:
add-preloads
should only touch sources if:preloads
option specified - CLJS-1814: Move docstrings for require, etc. from
cljs.repl
to their new definitions incljs.core
- CLJS-1809: Add 0/1 arity to
into
- CLJS-1824: transit cache feature leaks files
- CLJS-1294: Let macroexpand(-1) accept any quoted argument.
- CLJS-1818: (hash false) returns different value from Clojure
- CLJS-1817: Strange result when assoc'ing 0 to persistent hash map
- CLJS-1815: Fix failing analyzer tests
- follow-up on CLJS-460 defmulti ignores optional :hierarchy argument
- CLJS-1807: Better error messages for
ns*
calls - CLJS-1802: Generated namespaces should be of the form
cljs.user.fileXXXX
- CLJ-1935: Use multimethod dispatch value method lookup to take hierarchies into account in multi-spec
- CLJS-1682 :foreign-libs with module conversion does not works properly if it is used form deps.cljs
- CLJS-1710: spec/double-in not implemented
- CLJS-1787: Make cljs.spec explain pluggable
- CLJS-1781: Add cljs.hash-map-test to self-parity tests
- CLJS-1788: Port CLJ-2004: include retag in multi-spec form
- CLJS-1765: Empty iterator for hash maps with nil key
- CLJS-1784: nth doesn't throw on strings or arrays
- CLJS-1773: Self-host: Don't resolve unqualified symbols / keywords with $macros
- CLJS-1770: goog-defines broken for integers
- CLJS-1600: Destructuring defprotocol fn args causes defrecord impls to silently fail
- CLJS-1335: resolve-macro-var: information missing for macros
- CLJS-1633: Improve error associated with invalid foreign-libs :file path
- CLJS-1775:
get
withnil
returns as ifget
with0
- CLJS-1780: Records without extmaps fail to iterate
- CLJS-1774: Self-host: Report filenames in warns in test-self-parity
- CLJS-1779: keyword 2-arity constructor accepts anything for both parameters which leads to different hashing