A partir de Kotlin 1.6.0, para los proyectos de Kotlin/JVM se puede especificar la opción -jvm-target version hasta Java 17 , consulte la documentación general y del complemento de Gradle .
¿Cuáles son los beneficios de hacerlo? No pude encontrar mucho sobre los beneficios de especificar algo que no sea el valor predeterminado de 1.8 .
Las únicas cosas que pude encontrar sobre esto fueron:
Record de Java, consulte elblog de lanzamiento de Kotlin 1.5.0 .Ambos me parecen insignificantes.
Especialmente porque cuando se especifica un objetivo más alto, se pierde la capacidad de usar el artefacto resultante en proyectos atascados con Java 1.8, lo que parece indeseable, especialmente para las bibliotecas.
¿Hay algo que me perdí aquí?
No sé qué usa o apoya Kotlin activamente.
Las siguientes características disponibles en entornos Java posteriores pueden brindar un beneficio a otros lenguajes de programación, incluso si no los está utilizando activamente en el código de su aplicación:
Las construcciones simultáneas de su idioma pueden usar VarHandle internamente incluso si no usa esta API directamente. [JDK 9]
Si su idioma lo necesita, reachabilityFence permite evitar la recolección de basura antes de un punto de ejecución, en lugar de depender de soluciones frágiles o costosas [JDK 9]
Una forma oficial de agregar clases al entorno actual de forma dinámica, en lugar de piratear las partes internas de JRE [JDK 9]
Ya mencionaste la concatenación de cadenas ... [JDK 9]
Cuando crea un módulo que declara las dependencias requeridas, puede crear un JDK personalizado que contenga solo los módulos requeridos, para implementarse con la aplicación (lo que elimina la necesidad de compatibilidad con 1.8 de todos modos). [JDK 9]
Las clases que pertenecen a un nido pueden acceder a los miembros private demás sin necesidad de métodos auxiliares. El compilador de su idioma puede decidir qué clases pertenecen a un nido, no tiene que ser la semántica de las clases anidadas de Java. [JDK 11]
Constantes dinámicas personalizadas . Puede tener constantes arbitrarias cargables mediante una instrucción ldc , que se construye mediante un método de arranque en la primera ejecución y luego se reutiliza. Esto significa que el lenguaje puede usar sus propias constantes de sus propios tipos de la misma manera que las constantes integradas de Java (piense, internamiento de cadenas). [JDK 11]
Cree clases anónimas dinámicas usando una API oficial en lugar de asumir la presencia del propietario sun.misc.Unsafe [JDK 15]
Las clases selladas son compatibles directamente con la JVM, por lo que si el lenguaje tiene ese concepto, puede traducirlo directamente en lugar de emularlo. [JDK 17]
Quizás algo más que sea útil para la implementación del lenguaje en particular pero que no sea obvio para nosotros, no intentar implementar el lenguaje en la JVM