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

Hoy liberamos Kotlin 1.1. Es un gran avance que habilita nuevos escenarios, y esperamos que lo disfrutéis mucho.

Nuestra visión de Kotlin es permitir el uso de un único lenguaje, expresivo, con buen rendimiento, y fuertemente tipado en todos los componentes de una aplicación moderna. Kotlin 1.1 da dos pasos en esta dirección.

El primero, es que el target de JavaScript deja de ser experimental y soporta todas las características del lenguaje, una gran parte de la librería estándar, así como interoperabilidad con JavaScript. Esto permite migrar el frontend de navegador de tus aplicaciones a Kotlin, manteniendo la posibilidad de usar frameworks modernos JavaScript como React.

Lo segundo, es que introducimos soporte para corrutinas. Como alternativa ligera a los threads, las corrutinas permiten hacer backends más escalables, soportando cargas masivas en una sola instancia de la JVM. Además de eso, las corrutinas son una herramienta muy expresiva para implementar comportamiento asíncrono, que es importante para construir interfaces de usuario responsive en todas las plataformas.

Más abajo describimos estas dos cosas en detalle. Y en otros aspectos: hemos añadido alias de tipo (type aliases), referencias llamables ligadas (bound callable references), destructuración en lambdas (destructuring in lambdas) y más. Los detalles en la página What’s new (¡echad un ojo a los ejemplos ejecutables!).

Corrutinas (Coroutines)

Las corrutinas en Kotlin hacen que el código asíncrono no bloqueante sea tan directo como el código síncrono normal.

La programación asíncrona está conquistando el mundo, y lo único que nos retenía era que el código no bloqueando añade una complejidad considerable a nuestros sistemas. Ahora Kotlin ofrece un medio para contener esta complejidad haciendo convirtiendo las corrutinas en ciudadanos de primera clase en el lenguaje, a través de una sola primitiva: funciones suspendibles (suspending functions). Dichas funciones (o lambdas) representan un cómputo que se puede suspender (sin bloquear ningún thread) y que puede ser retomado luego.

Técnicamente, las corrutinas son un mecanismo para la multitarea cooperativa (muy similar a los fibers). En otras palabras, son mucho mejor hilos: prácticamente gratis de iniciar y de mantener, muy baratas de suspender (la suspensión es para una corrutina lo que bloquear es para un thread), muy fáciles de componer y personalizar.

Hemos diseñado las corrutinas para una flexibilidad máxima: muy poco está fijo en el lenguaje, y se puede hacer mucho desde librerías. El proyecto de kotlinx.coroutines contiene librerías montadas encima de Rx, CompletableFuture, NIO, JavaFX y Swing. Se pueden escribir librerías similares para Android y JavaScript. Incluso muchas construcciones disponibles en otros lenguajes se pueden expresar ahora como librerías de Kotlin. Esto incluye generadores/yield de Python, canales/selecciones de Go y async/await de C#:

// ejecuta el código en el thread pool de fondo
fun asyncOverlay() = async(CommonPool) {
    // empieza dos operaciones asíncronas
    val original = asyncLoadImage("original")
    val overlay = asyncLoadImage("overlay")
    // y después aplica un overlay a ambos resultados
    applyOverlay(original.await(), overlay.await())
}

// lanza una nueva corrutina en el contexto de la UI
launch(UI) {
    // espera que el overlay asíncrono se complete
    val image = asyncOverlay().await()
    // y se muestra en la UI
    showImage(image)
}

Leer más en nuestra documentación.

Una nota importante: Con todos los beneficios que trae, las corrutinas de Kotlin son un diseño relativamente nuevo que necesita un testeo extensivo antes de estar seguros al 100% de que está correcto y completo. Por eso, lo vamos a liberar con un flag opcional “experimental”. No esperamos cambios en las reglas del lenguaje, pero las APIs pueden requerir algunos ajustes en Kotlin 1.2.

Soporte JavaScript

Como mencionamos arriba, todas las características del lenguaje de Kotlin 1.1, incluyendo corrutinas, funcionan tanto en la JVM/Android como en JavaScript. (La reflexión no está disponible en JavaScript, pero lo estamos mirando). Esto significa que se pueden escribir aplicaciones web completamente en Kotlin, y nosotros ya tenemos algo de experiencia con eso aquí en JetBrains. Publicaremos tutoriales y otro material en relación a esto pronto.

Kotlin para JavaScript tiene tipos dinámicos para interoperar con código “nativo” JavaScript, y usa cabeceras de tipo de DefinitelyTyped para facilitar el uso de librerías populares.

Soportamos tanto Node.JS como el navegador. Y la librería estándar de Kotlin está disponible para usar a través de npm.

Leer más en nuestra documentación.

Herramientas

Kotlin 1.1 no es una versión mayor en cuanto a las herramientas: preferimos liberar las características para las herramientas sin afectar al lenguaje tan pronto como están disponibles, así que muchas de estas ya las habéis visto en las versionese 1.0.x de Kotlin. Algunas a destacar:

  • Plugins de Kotlin para los tres IDEs más populares: IntelliJ IDEA, Android Studio, Eclipse y NetBeans.
  • Compilación incremental tanto en IntelliJ IDEA como Gradle.
  • Plugins de compilador para Spring, JPA y Mockito (haciendo clases abiertas y generando constructores sin argumentos)
  • Kapt para procesado de anotaciones
  • Soporte Lint para proyectos Android
  • Numerosas intenciones de IDE, inspecciones, quick fixes, refactorizaciones y mejoras en el autocompletado

Seguiremos trabajando en mejorar las herramientas aún más y actualizaciones en versiones 1.1.x.

Primer año de Kotlin: Adopción y Comunidad

Resumiendo: Kotlin está creciendo. Hemos visto más de 160.000 personas usándolo en el último año. Los proyectos opensource en github, crecieron de 2.4M a 10M líneas de código Kotlin (4x cuatro veces más). Se han organizado encuentros y grupos de usuarios por la comunidad arededor del mundo. Estamos viendo como se publican más y más libros de Kotlin y cursos online.

Kotlin es igual de potente en el lado del servidor, como en desarrollo Android (con una repartición de cerca del 50/50). El framework de Spring 5.0 ha introducido soporte para Kotlin, igual que vert.x 3.4. Gradle y TeamCity están usando Kotlin para sus scripts de construcción. Se pueden encontrar más proyectos usando Kotlin en kotlin.link.

Muchas compañías populares están usando Kotlin: Amazon Web Services, Pinterest, Coursera, Netflix, Uber, Square, Trello, Basecamp entre otros.

Corda, un libro mayor distribuido desarrollado por un consorcio de bancos conocidos (como Goldman Sachs, Wells fargo, J.P. Morgan, Deutsche Bank, UBS, HSBC, BNP Paribas, Société Générale), tiene más de un 90% de su base de código escrita en Kotlin.

Estamos muy agradecidos con todos nuestros usuarios, contribuyentes y prescriptores de todo el mundo. ¡Vuestro apoyo es muy importante para nostros!

Organiza tu propio evento de Kotlin 1.1

Kotlin 1.1 es un buen motivo para una reunión o charla con vuestro grupo local o de amigos. Hemos preparado algunos materiales para ayudaros a organizar dicho evento. El 23 de marzo, haremos sesiones de streaming en vivo con los miembros del equipo de Kotlin, además de que hay un pack de organizadores que incluye algún botón y una encuesta de futuras características. Para obtener más información y registrar vuestro evento: aquí.

¿Qué es lo siguiente?

Para hacer de Kotlin un lenguaje realmente full-stack, vamos a proporcionar herramientas y soporte del lenguaje para compilar el mismo código en múltiples plataformas. Esto facilitará compartir módulos entre cliente y servidor. Vamos a seguir trabajando en mejorar las herramientas de JavaScript y el soporte de las librerías. Entre otras cosas, ya estamos preparando la compilación incremental de JavaScript. Permaneced atentos a actualizaciones para la 1.1.x.

Java 9 se acerca, y vamos a soportar sus características nuevas antes de que salga.

Esperamos mucho feedback sobre las corrutinas en los próximos meses, y mejorar este área del lenguaje (tanto en lo que respecta al rendimiento como a funcionalidad) está en nuestras prioridades.

A parte de estom nuestra siguiente versión se centrará en mantenimiento, mejoras de rendimiento, infraestructura y corrección de errores.

PD: Ejecutar en múltiples plataformas es una dirección estratégica para Kotlin. Con la 1.1 ya podemos ejecutar en servidores, escritorio, dispositivos Android y navegadores, pero en el futuro vamos a compilar Kotlin a código nativo para poder ejecutar en más plataformas (incluyendo, por ejemplo, iOS y dispositivos embebidos). Un gran equipo en JetBrains está trabajando en dicho proyecto y esperamos poder enseñaros algo interesante muy pronto. Aunque no tenemos en mente ninguna versión en específico para liberar esto.

Instrucciones de instalación

Como siempre, podéis probar Kotlin online en try.kotlinlang.org.

En Maven/Gradle: Usad 1.1.0 como número de versión para el compilador y la librería estándar. Documentación aquí.

En IntelliJ IDEA: 2017.1 tiene Kotlin 1.1 integrado, en versiones anteriores instalad o actualizar el plugin de Kotlin a la versión 1.1.

En Android Studio: Instalad o actualizad el plugin a través del Plugin Manager.

En Eclipse: instalad el plugin usando el Marketplace.

El compilador de la línea de comandos se puede descargar de la página de versiones de Github.

Compatibilidad: En Kotlin 1.1 el lenguaje y la librería estándar son compatibles hacia atrás (menos bugs): si algo compilaba y ejecutaba en 1.0, seguirá funcionando en 1.1. Para ayudar a equipos grandes a actualizar gradualmente, hemos proporcionado un switch de compilador que deshabilita nuevas características. Aquí hay un documento cubriendo los posibles problemas.

¡Que tengáis un excelente Kotlin!