Kotlin 1.4.20 Experimental Feature: String Concatenations Compiled into Dynamic Invocations for JDK 9+ Targets
JetBrains has released Kotlin 1.4.20, bringing a suite of updates to its language for the JVM, Android, and the browser. Among the new features, the experimental capability for JVM-based string concatenation via dynamic method invocation stands out. This enhancement aims to improve performance and efficiency in handling string operations.
Since JDK 9, string concatenation on the JVM has utilized the invokedynamic
instruction in bytecode, which is designed to be faster and more memory-efficient compared to earlier methods. This approach allows for future optimizations without necessitating changes to the bytecode itself. Kotlin 1.4.20 integrates this mechanism to further enhance performance for string operations.
With Kotlin 1.4.20, string concatenations can be compiled into dynamic invocations when targeting JDK 9 or later. This feature is still experimental and can be enabled using the -Xstring-concat
option. It covers various use cases, including the String.plus
operator (a + b
), explicit method calls (a.plus(b)
), and references ((a::plus)(b)
). Additionally, it applies to toString
on inline and data classes, and string templates, though templates with a single non-constant argument are excluded.
Developers have the option to invoke dynamic method invocation in different ways. They can use indy-with-constants
for strings involving StringConcatFactory.makeConcatWithConstants()
, indy
for those with StringConcatFactory.makeConcat()
, or inline
to revert to traditional concatenation via StringBuilder.append()
. These options provide flexibility depending on the specific needs of the application.
JetBrains announced Kotlin 1.4.20 on November 23, and developers can download the command line compiler from GitHub. For those using IntelliJ IDEA and Android Studio IDEs, instructions for updating the Kotlin plug-in are available on JetBrains’ website.
Overall, the addition of dynamic method invocation for string concatenation in Kotlin 1.4.20 represents a significant step forward in optimizing string operations, aligning Kotlin with modern JVM capabilities and improving performance for developers working on JVM-based applications.