Nuevo Kotlin User Group en Valencia y event "Estado de Machine Learning en Kotlin"
¡Se acaba de inaugurar el nuevo Kotlin Valencia User Group! Inicialmente organizado por Carlos Cáceres
Nos complace anunciar la liberación de Kotlin/Native v0.5, ¡edición navideña! Esta versión añade soporte para usar código de Kotlin/Native desde C, Objective-C y Swift, soporta desarrollo usando el simulador de iOS, junto a soporte de LLVM 5 así como crear WebAssembly desde hosts Linux y Windows.
En las versiones anteriores de Kotlin/Native añadimos soporte para llamar a los frameworks de Apple desde Kotlin/Native, siempre y cuando proporcionasen cabeceras de Objective-C. Ahora vamos un paso más allá y añadimos soporte para llamar a código Kotlin desde Swift y Objective-C. Para ello, hemos implementado una nueva opción de compilación. <code class="EnlighterJSRAW" data-enlighter-language="null">-produce framework
. Genera un framework autocontenido, que se puede usar desde otras partes de vuestra aplicación, como si estuviese escrito en swift. Echemos un ojo al ejemplo de calculadora. Su UI está escrita en Swift, mientras que la lógica está escrita en Kotlin. El código Swift se entremezcla con el de Kotlin de forma transparente. Por ejemplo, esta línea de código Swift:
private let parser = KAPPartialParser(composer: KAPCalculator(), partialComposer: PartialRenderer())
crea una instancia de la clase Kotlin PartialParser, y le proporciona una instancia de la clase de Swift PartialRenderer que implementa una interfaz Kotlin ExpressionComposer.
Nótese que los tipos básicos como los números y las cadenas se mapean de forma transparente entre los mundos de Swift y Kotlin.
Para construir el proyecto, tenéis que abrirlo con XCode y compilarlo bien sea en un dispositivo real, o en el simulador. Echad un ojo al README.md para más detalles.
Y el código Kotlin en IntelliJ IDEA:
Para otras plataformas también hemos añadido soporte inverso de interoperabilidad, permitiendo llamar a código de Kotlin/Native desde el mundo exterior. El común denominador de los lenguajes modernos es C, así que ese ha sido el lenguaje con el que interoperamos. La opción de compilación <code class="EnlighterJSRAW" data-enlighter-language="null">-produce dynamic
produce una librería dinámica (<code class="EnlighterJSRAW" data-enlighter-language="null">.dylib
en macOS, <code class="EnlighterJSRAW" data-enlighter-language="null">.so
en linux y <code class="EnlighterJSRAW" data-enlighter-language="null">.dll
en Windows) que contiene todo lo necesario para trabajar con código Kotlin/Native. Para demostrar todo esto y hacerlo más fantástico, hemos creado una extensión de Python. Python llama a la implementación de C y desde C se llama a Kotlin tal que así:
if (PyArg_ParseTuple(args, "Lss", &session_arg, &string_arg1, &string_arg2)) { T_(Server) server = getServer(); T_(Session) session = { (void*)(uintptr_t)session_arg }; const char* string = __ kotlin.demo.Server.concat(server, session, string_arg1, string_arg2); result = Py_BuildValue("s", string); __ DisposeString(string); } else { result = Py_BuildValue("s", NULL); }
El compilador de Kotlin/Native produce una librería dinámica, y la herramienta de construcción de Python distutils produce otra librería dinámica que depende de esa otra. De esa forma el código launcher de Python llama a los objetos de Kotlin/Native via un puente en C y tanto los tipos primitivos como ambos objetos se convierten de forma correcta. ¡Estupendo!
<code class="EnlighterJSRAW" data-enlighter-language="null">kotlin.math
a la librería estándar. Con Kotlin/Native v0.5 también soportamos dichas operaciones<code class="EnlighterJSRAW" data-enlighter-language="null">-target wasm32
) desde Linux y Windows (antes únicamente soportábamos hosts macOS)Los binarios se pueden descargar desde:
Por favor, informad sobre bigs y problemas en el bug tracker de Kotlin. Y cualquier pregunta es bienvenida en el canal de Slack#kotlin-native (invitación aquí).