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

Nos complace anunciar la liberación de Kotlin/Native v0.2, una actualización con características y correcciones a la preview técnica. Esta actualización añade soporte para corrutinas y soporte para funciones inline cross-módulo, así como correcciones y mejoras por todas partes.

Esta versión incluye muestras sobre cómo usar corrutinas para hacer IO no bloqueante, una aplicación GUI usando GTK así como un cliente del framework de machine learning TensorFlow aportado por Julius Kunze.

Por ejemplo, el código es tan fácil como:

var connectionId = 0
acceptClientsAndRun(listenFd) {
  memScoped {
    val bufferLength = 100L
    val buffer = allocArray<ByteVar>(bufferLength)
    val connectionIdString = "#${++connectionId}: ".cstr
    val connectionIdBytes = connectionIdString.getPointer(this)
    try {
      while (true) {
        val length = read(buffer, bufferLength)
        if (length == 0L) break
        write(connectionIdBytes, connectionIdString.size.toLong())
        write(buffer, length)
      }
    } catch (e: IOException) {
      println("I/O error occurred: ${e.message}")
    }
  }
}

que se puede usar para procesar múltiples sockets de forma concurrente con courruticorrutinas y servir cada cliente individual y concurrentemente.

Y para crear un botón GTK y un event listener, basta con:

val button = gtk_button_new_with_label("Click me!")!!
g_signal_connect(button, "clicked",
   staticCFunction { _: CPointer<GtkWidget>?, _: gpointer? -> println("Hi from Kotlin") }
)

Así que la versión 0.2, permite crear aplicaciones nativas, ligeras y completamente funcionales escritas en Kotlin.

Tanto el rendimiento de la compilación como del runtime ha mejorado significativamente, y también ha disminuido el tamaño de los redistribuibles.

La lista completa de cambios en esta versión se puede encontrar en el changelog.

Y hay disponible binarios precompilados tanto para Linux como para MacOS.