NOTA: Este artículo es una traducción manual de este otro artículo.

Nos alegra anunciar Kotlin 1.1.50, una nueva actualización con corrección de errores y mejoras en las herramientas. Esta actualiación incluye:

  • Introduce un nuevo esquema de versionado: 1.1.5x en vez de 1.1.5-x
  • Mejora el soporte para las anotaciones JSR-305 (los problemas de nulabilidad se pueden reportar como warnings, las comprobaciones funcionan cuando las clases del JSR-305 se encuentran en el classpath)
  • Mejoras de rendimiento en el bytecode generado
  • En el backend de JavaScript, hemos puesto las arrays primitivas con TypedArrays por defecto, añadido source maps a la herramienta de eliminación de código y otras mejoras
  • Un montón de correcciones de errores en el compilador y el IDE
  • Introduce nuevas inspecciones, mejoras de rendimientos y corrección de errores en el plugin de IntelliJ
  • Soporta puntos de extensión para la preview del plugin de serialización de Kotlin
  • La actualización es compatible con todas las versiones de IntelliJ IDEA desde la 2016.3 hasta la 2017.3, así como Android Studio 2.3 y 3.0.

La lista completa de cambios en esta versión está disponible en el changelog.

Nos gustaría agradecer a los contribuyentes externos cuyas PRs se han incluído en esta versión: Andrius Semionovas, Dimach, Kirill Rakhman, Toshiaki Kameyama, scache, André Oriani, Daniil Vodopian, Nagesh Susarla y Knize.

## Cambio del esquema de versionado

Empezando con esta versión, en vez de usar las versiones 1.1.5, 1.1.5-1, 1.1.5-2, etc. empezaremos a usar 1.1.50, 1.1.51, 1.1.52.

Queremos publicar nustros artefactor de JS a NPM con el mismo número de versión que la versión de la release. El problema es que usamos el número tras el guión como número de hotfix, mientras que NPM considera estas versiones como versión preeliminar. Lo que quiere decir que NPM considera Kotlin 1.1.5 más reciente que 1.1.5-1, y lo cierto es que ¡es justo lo contrario! Cambiando el esquema de versionado, arreglamos este problema.

Mejoras en el soporte de las anotaciones del JSR-305

Kotlin 1.1.4 introdujo un soporte inicial para las anotaciones de nulabilidad por defecto, como @ParametersAreNonnullByDefault como una característica a optar. En Kotlin 1.1.50, los problemas de nulabilidad detectados gracias a dichas anotaciones se reportan como warnings por defecto. Para convertirlas en errores, añadid el parámetro de la línea de comandos -Xjsr305=strict. Para deshabilitar los warnings, usad -Xjsr305=ignore. (Nótse que el parámetro de línea de comandos -Xjsr305-annotations=enable, que se usaba para habilitar las anotaciones de nulabilidad por defecto en Kotlin 1.1.4, ahora está deprecado.)

También, desde esta versión, Kotlin ya no requiere tener un .jar con las anotaciones de JSR-305 en las dependencias de una librería para ser capaz de leer la información de nulabilidad de dicha librería.

## Mejoras en el backend de JavaScript

Kotlin 1.1.50 introduce varios cambios que rompen la compatibilidad binaria con el backend de JavaScript. Esto significa que tendréis que actualizar vuestro compilador a la 1.1.50 o superior si queréis usar librerías compiladas con Kotlin/JS 1.1.50. Seguís podiendo utilizar librerías compiladas con versiones más antiguas del compilador de Kotlin.

### Mejoras en el Inliner

La forma en la que las funciones inline se convierten a JS se ha cambiado para evitar usar nombres completamente cualificados en los cuerpos de las funciones inline. Esto reduce el tamaño del archivo JS resultante.

### TypedArrays habilitados por defecto

Las arrays primitivas se transforman en TypedArrays por defecto ahora. Esta caracerística se puede deshabilitar pasando -Xtypedarrays=false al compilador. Este cambio afecta a la compatibilidad hacia alante – usar el compilador viejo con librerías nuevas está desaconsejado.

Nótese que la nueva representación de arrays también puede afectar a llamar JS desde Kotlin. Para llamar a una función JS que espera un Array normal y no un TypedArray, usad la función de extensión toTypedArray para convertir un TypedArray en un Array normal. Las funciones como toIntArray se pueden usar para convertir un Array normal de primitivas en un TypedArray.

val intArray: IntArray = intArrayOf(1, 2, 3) // equivalent to Int32Array.of(1, 2, 3)
val arrayOfInts: Array<Int> = intArray.toTypedArray() // arrayOfInts equals to [1, 2, 3]
val otherIntArray: IntArray = arrayOfInts.toIntArray() // otherIntArray is Int32Array

Este cambio también hace posible distinguir entre Array e IntArray en runtime:

val intArray: Any = intArrayOf(1, 2, 3) // Int32Array.of(1, 2, 3)
intArray is IntArray && intArray !is Array<*> // true
val arrayOfInts: Any = arrayOf(1, 2, 3) // [1, 2, 3]
arrayOfInts !is IntArray && arrayOfInts is Array<*> // true

Soporte de Source maps en DCE

Kotlin 1.1.50 mejora la herramienta de eliminación de código muerto para hacer más fácil depurar su salida. La herramienta detecta sourcemaps existentes y los transforma junto al código. Echad un ojo al tutorial para aprender más sobre la depuración de JS.

Mejoras en el plugin de IntelliJ IDEA

La nueva versión trae muchas mejoras al plugin de IntelliJ IDEA:

  • Mejoras de rendimiento
  • Soporte para completado de código de alias importados
  • Mejor soporte para Gradle Kotlin DSL
  • Inspecciones para verificar que el código sigue con las convenciones de formato y nombres configuradas para el proyecto
  • Muchas otras inspecciones nuevas y quickfixes

¿Cómo actualizar?

Para actualizar el plugin, usad Tools | Kotlin | Configure Kotlin Updates y pulsad el botón Check for updates now. No olvidéis actualizar el compilador y versión de la librería estándar en vuestros build scripts de Maven y de Gradle. Como de costumbre, si os encontráis con cualquier problema con esta versión, os invitamos a pedir ayudar en los foros, en Slack (invitación aquí) o reportar cualquier problema en el issue tracker.

¡A Kotlinear!