Kotlin 1.2.70 significantly improves incremental compilation for Kotlin/JS
Kotlin 1.2.70, the newest bugfix and tooling update for Kotlin 1.2 brings a lot of goodies, including standalone Kotlin compiler native binaries and a bunch of IntelliJ IDEA support improvements. Let’s take a look at what’s in this update.
Kotlin 1.2.70 arrives with exciting changes in tow, including incremental compilation improvements for Kotlin/JS, native binaries built with Excelsior JET for the standalone Kotlin compiler, as well as new refactorings, inspections, and intentions to the IntelliJ IDEA plugin.
As usual, you’ll find the complete list of changes in the changelog.
Kotlin 1.2.70 highlights
Incremental compilation improvements for Kotlin/JS
We talked about Kotlin/JS in a previous article but it gets even better as the team has greatly improved incremental compilation for Kotlin/JS, according to the blog post announcing Kotlin 1.2.70. What does that mean exactly? It depends on the project structure, of course, but it can speed up development builds up to seven times, perhaps even more.
Furthermore, Kotlin/JS Gradle builds now support cross-module incremental compilation. You should, however, keep in mind that since it is still experimental, it is disabled by default. Here’s how you can enable it:
- In a Gradle project, add
Multiplatform projects update
kotlin-stdlib-common received a bunch of platform-specific annotations that are marked with the
@OptionalExpectation annotation [introduced in the previous update]. In short, “the compiler will ignore these annotations on common declarations during compilation of platform modules that have no corresponding actual annotation class,” as JetBrains’ Sergey Igushkin explained in the blog post.
You can use some JVM-specific annotations such as
SEE ALSO: Contracts are coming to Kotlin 1.3
IntelliJ IDEA support improvements
This update brings a new inspection with a quick fix for converting a non-lazy collection transformations chain into a sequence equivalent. The main benefits of this improvement are that it
- helps avoid unnecessary temporary allocations overhead
- may significantly improve performance of complex processing pipelines
The list of improvements also includes:
- Intentions to replace an
?.letand the other way around
- Inspection to detect unnecessary
- Intention to convert a property getter to initializer
- Inspection and quickfix to replace
assertTrue(a == b)with
- “Redundant return label” inspection
- Quick-fix for default parameter value removal
forEachparameter unused” inspection
- Lots of bug fixes and performance improvements
Standalone Kotlin compiler native binaries
The JVM version of the standalone Kotlin compiler has company! The Github releases now contain a native, system-dependent version for every major platform (Linux, macOS, and Windows). The binaries are built with the Excelsior JET AOT compiler; if you wish to build small files or scripts, you should know that these binaries have faster startup times.
The Excelsior JET runtime supports some JVM and specific options that you may pass with
kotlinc wrapper script. You’ll find all recognized options in the Excelsior JET documentation.
Check out Sergey Igushkin’s blog post for the complete list of highlights.