¡Kotlin 1.2.50 liberado!

Nos complace anunciar la liberación de Kotlin 1.2.50, una actualización de Kotlin 1.2 con corrección de errores y herramientas. En esta actualización:

  • Se actualiza el soporte de Kotlin en el plugin del IDE de Eclipse
  • Añade nuevas funciones en la librería estándar común y JavaScript
  • Incluye soporte para JUnit 5 a kotlin.test
  • Mejora el soporte experimental de scripting
  • Introduce archivos scratch ejecutables de Kotlin en IntelliJ IDEA
  • Mejora la velocidad de construcción de proyectos Android multi-módulo con Gradle
  • Actualiza el soporte experimental de @JvmDefault con un modo de compatibilidad binaria
  • Introduce un modo de compilador progresivo
  • Corrige un montón de problemas conocidos en el compilador y el plugin del IDE y proporciona mejoras de rendimiento

La actualización es compatible con todas las versiones de IntelliJ IDEA desde la 2017.2 hasta la 2018.2 EAP, así como Android Studio 3.0, 3.1, y 3.2 Canary.

Nos gustaría agradecer a nuestros contribuyentes externos cuyas pull requests se han incluído en esta versión: Toshiaki KameyamaMikaël PeltierRaluca SauciucmeztihnIvan GavrilovicDenis VnukovDerekFlorian SteitzJim SEvgeny ZakharovAaron NwabuokuAlexey BelkovClaus HolstElifarley CFelix GuoGabryel MonteiroGilkesonJuan ChenMon_chiValeriy ZhirnovSteven SpunginSwapnil SanklaTakuyaKodama, y Kenji Tomita

La lista completa de cambios se puede encontrar en el changelog. Seguid leyendo para más información sobre algunas cosas destacables.

Actualización del plugin del IDE Eclipse

Nos complace presentar la nueva versión 0.8.5 de nuestro plugin para el IDE Eclipse. Junto al soporte para el compilador de Kotlin 1.2.50, esta actualización trae diversas características y mejoras como:

  • Soporte para los plugins de compilador como kotlin-allopen y kotlin-spring
  • Configuración para elegir la versión de bytecode generado de la JVM
  • Correcciones de errores en el depurador y el conversor de J2K

Preferencias del compilador de Kotlin para todo el Workspace, que permiten configurar los plugins de compilación y otras opciones de compilación, se pueden encontrar en Preferences | Kotlin | Compiler. También es posible configurar únicamente preferencias a nivel de proyecto.

El plugin de Kotlin de Eclipse actualizado se puede encontrar en el Marketplace de Eclipse . Echad un ojo a los tutoriales Getting Started’ para más detalles.

Actualización de librerías

En esta actualización, hemos añadido un conjunto de extensiones toString(radix: Int) para los tipos ByteShortInt y Long que están disponibles tanto en la librería estándar de los proyectos comunes como en Kotlin/JSm gracias a nuestro colaborador Florian Steitz. Están disponibles en los proyectos multiplataforma experimentales así como en proyectos que targetean a JavaScript.

Otra adición a la librería estándar en proyectos comunes y Kotlin/JS son dos nuevos constructores, String(chars: CharArray) y String(chars: CharArray, offset: Int, length: Int). Su uso sirve para hacer una conversión eficiente de CharArray a String. Valeriy Zhirnov se ha encargado de esta mejora.

Además la librería kotlin.test ahora soporta testear con el framework JUnit 5 con el módulo separado kotlin-test-junit5, que proporciona una implementación del Asserter que funciona encima de JUnit 5 y mapea las anotaciones de test dekotlin-test-annotations-common a las anotaciones de test de JUnit 5.

Mejorado el soporte de scripting experimental

Esta versión introduce soporte un nuevo soporte experimental de scripting que permite personalizar de forma más fácil los scripts de Kotlin, un uso más sencillo  de los scripts con el compilador estándar y el plugin de IDEA, y una creación y embebido de host de scripting más sencillo. La propuesta completa de scripting de Kotlin junto con el estado actual de la implementación se puede encontrar en el KEEP (inglés) correspondiente. Algunas cosas a destacar incluyen:

  • Ahora es posible crear un JAR definiendo un script y si ese JAR se añade al classpath del compilador, los scripts de este tipo se soportarán de forma automática por el compilador y el plugin de IDEA
  • Ahora es posible posible pasar variables tipadas externas a la compilación del script, de forma que estarán disponibles como si fuesen variables globales definidas fuera del script
  • La estructura del soporte de scripting es ahora mucho más sencilla y proporciona helpers para implementar y embeber un host de scripting personalizado de una forma mucho más sencilla que antes

Mejoras dele plugin de IntelliJ IDEA

Archivos ejecutables scratch de Kotlin y scripts Kotlin

La actualización del plugin de Kotlin de IntelliJ IDEA soporta archivos scratch ejecutables. Éstos scripts también pueden usar declaraciones del proyecto:

Además, hemos mejorado el soporte del IDE para los archivos de script de Kotlin (*.kts). Ahora podéis crear scripts desde el la vista de proyecto y ejecutarlos dentro del módulo donde han sido declarados.

Entrada de cadenas Raw e indentación

La actualización del plugin del IDE hace más sencillo escribir literales raw de cadena, ya que ahora inserta el par de """ de forma automática y proporciona una intención para indentar los literales (gracias a nuestro colaborador Toshiaki Kameyama). Esto es útil cuando pegas una cadena multilínea:

Otras mejoras en el plugin de IntelliJ IDEA

  • Una cuentas inspecciones e intenciones adicionales para ayudar con kotlinx.coroutines – éstas detectan resultados Deferred y async sin utilizar y convierten de async(ctx) { }.await() a withContext(ctx) { }.
  • Una intención para convertir comentarios de final de línea en bloques y al revés.
  • Un montón de correciones, mejoras de estabilidad y de rendimiento.

Builds de Gradle más rápidas

A partir de Kotlin 1.2.50, Kotlin hace seguimiento de los cambios de forma incremental a través de módulos en los proyectos Android multimódulo. Esto resulta en builds incrmentales significantemente más r´paidas para proyectos Android grandes con multiples módulos interdependientes.

Cambios en el compilador

La actualización de Kotlin 1.2.50 corrige un montón de problemas con el compilador, trae mejoras de rendimiento y estabilidad, y añade nuevas características:

Modo progresivo del compilador

Mientras que corregimos tan pronto como podemos la mayoría de los bugs e inconsistencias  del compilador, algunas correcciones pueden no ser retrocompatibles. La política de compatibilidad de Kotlin nos fuerza a introducir dichos cambios únicamente en versiones mayores (como la 1.1 y 1.2) y pasar por ciclos de migración largos. Nosotros, sin embargo, creemos que muchos usuarios se podrían beneficiar de esas correciones de forma más rápida, haciendo su código más seguro y claro.

En esta versión, introducimos un modo de compilador progresivo, que están pensadas para bases de código muy activas cuyos mantenedores actualizan de forma regular a la última versión del compilador de Kotlin y las herramientas. En este modo, algunas de las deprecaciones y correcciones de errores para código inestable se aplican de forma inmediata. Y por ello, es posible que parte del código pueda romperse habilitando este modo o actualizando Kotlin a una futura versión mientras se mantiene el modo progresivo habilitado.

Las correcciones elegidas para ser habilitadas en el modo progresivo no deberían afectar a muchos sitios en las bases de código, aunque no funcionarán sin más, y requerirán que los mantenedores arreglen el código erróneo. Por poner algunos ejemplos del tipo de correciones aplicadas al modo progresivo, echad un ojo a KT-9580KT-16681, o KT-17981.

Podéis habilitar el modo progresivo por módulo, añadiendo el flag -Xprogressive a los argumentos pasados al compilador de Kotlin.

Modo de compatibilidad binaria de @JvmDefault

Hemos actualizado el soporte experimental para la generación de métodos por defecto para las interfaces de la JVM con @JvmDefault de forma que preserva la compatibilidad binaria con la implementación estándar de métodos por por defecto en interfaces en Kotlin. Para elegir este modo, usad el flag de compilación -Xjvm-default=compatibility .

Nótese que hemos dejado de soportar el flag de compilación -Xenable-jvm-default que introdujimos en Kotlin 1.2.40. Por favor, usad -Xjvm-default=enable en su lugar.

Archivos de argumentos

Kotlin 1.2.50 soporta pasar argumentos al compilador desde un archivo con la opción de línea de comandos -Xargfile=args.txt, que ayuda a llamar al compilador de la línea de comandos con rutas largas evitando así los límites de argumentos impuestos por los sistemas operativos.

Cómo actualizar

Para actualizar el plugin de IntelliJ IDEA o Android Studio, usad Tools | Kotlin | Configure Kotlin Plugin Updates y haced click en el botón ‘Check for updates now’. El plugin de Eclipse se puede instalar o actualizar desde el Eclipse Marketplace (Help | Eclipse Marketplace y buscad el plugin de Kotlin).

Y por supuesto, no olvidéis actualizar las versiones del compilador y de la biblioteca estándar en vuestros buildscript de Maven y Gradle.

Como de costumbre, si os encontráis con cualquier problema con esta nueva versión, sois bienvenidos a pedir ayudar en los foros, en Slack (podéis obtener una invitación aquí), o informar de las incidencias en el gestor de incidencias.

¡A Kotlinear!