27 June 2017
Several exciting performance enhancements are in the ClojureScript 1.9.660 release. Some improvements speed up the compiler itself, others optimize the code generated by the compiler, and yet others fine tune data structures and common operations upon them.
With two small changes the compiler now compiles ClojureScript code much faster. Users have reported 20–40% faster compile times.
Don’t forget to try
:parallel-build, which is not enabled by default. This can
further cut your compile times in half.
:^const Var values are now inlined
shuffle is now 30-40% faster (thanks to
apply is 200-400% faster
defmulti is now much faster in the case of a miss (200-1000%)
set and map equivalence is 100-200% faster
reduce on sets and maps is now ~100% faster
Many correctness fixes have been made, several of them bringing ClojureScript more in line with Clojure behavior. Other important fixes were made with respect to compilation caching; notably code defining Specs now works properly when caching is enabled.
NOTE: that this release introduces a new warning for incorrect code which employs variadic signatures in protocol method implementations. Such code will continue to work with this release. Be sure to update any code or libraries that make use of this construct so that protocol implementations match some existing signature.
resolve macro - like Clojure’s but at compile-time
Modules support wildcard namespaces
New Closure language options
A new compiler option
:fn-invoke-direct (a futher optimization extension to
You can use
js/Promise and many more ES features and have Google Closure Compiler generate polyfills (
:rewrite-polyfills compiler option)
You should definitely give this release a try on your code to see how it performs! We hope you enjoy this release!
For a complete list of updates in ClojureScript 1.9.660 see Changes.