spinner

Kotlin Native ayer, hoy y… ¿mañana?

Kotlin ha experimentado un gran crecimiento gracias a la máquina virtual de Java (JVM). Casi con un 100% de interoperabilidad con Java, permite seguir trabajando sin tener que desprenderse de un rico ecosistema de librerías y herramientas.

Meme-Kotlin-Native

Kotlin Native está diseñado con el objetivo de permitir la compilación para plataformas donde no se disponga o no se desee una máquina virtual. Concretamente, estamos hablando, por ejemplo, de dispositivos empotrados o iOS. Esta propuesta se enfoca en dar solución a situaciones en las que un desarrollador necesita liberar un programa autocontenido que no requiera runtime o máquinas virtuales adicionales.

Como consecuencia de esta premisa, no sólo los desarrolladores Java pueden obtener beneficios de este lenguaje.

¿Qué es Kotlin Native?

Se trata de una tecnología que permite compilar el código escrito en Kotlin directamente a binarios nativos, esto indica que ese código puede ser ejecutado sin la necesidad de una máquina virtual. Es, en esencia, un backend basado en LLVM para el compilador de Kotlin y la implementación nativa de la librería estándar de Kotlin. Actualmente ofrece soporte para plataformas como iOS, MacOS, Android, Windows, Linux y WebAssembly.

Con este conjunto de plataformas disponibles se puede decir que Kotlin puede gestionar cualquiera de los componentes que forman parte de una aplicación moderna. En conjunto con esta característica, viene de la mano el indiscutible beneficio de la reutilización de código, permitiendo centrar esfuerzos en las tareas importantes en lugar de implementar tareas en múltiples ocasiones para las diferentes plataformas.

Modelo de interoperabilidad

Kotlin Native es una tecnología que estamos analizando en nuestro día a día, realizando pequeñas pruebas de concepto. Existen dos aplicaciones: una desarrollada en Android y otra en iOS, por lo que los esfuerzos del análisis y las sucesivas pruebas, se enfocan en conocer alcance de la solución, así como su estado de madurez. El objetivo es minimizar el trabajo de desarrollo, tratando de incluir toda la lógica posible en un código base, que pueda ser consumido por las dos plataformas anteriormente citadas.

Actualmente, existen dos formas en las que Kotlin Native ofrece soporte para interoperar con el mundo nativo. En primer lugar, el compilador genera:

  • Ejecutable para las plataformas anteriormente citadas.
  • Un framework de Apple, para proyectos Swift y Objective-C.
  • Una librería estática o dinámica con cabeceras en C para proyectos implementados en C/C++.

Por otro lado, la interoperabilidad de Kotlin Native permite hacer un uso directo de librerías existentes como las citadas a continuación:

  • Librerías estáticas y dinámicas escritas en C.
  • Frameworks implementados en C, Swift, y Objective-C.

Este enfoque favorece las tareas, tanto a la hora de incluir código de Kotlin compilado en proyectos escritos en C, C++, Swift, Objective-C, etc., como a la hora de hacer uso de código nativo, como pueden ser librerías estáticas o dinámicas de C, frameworks de Swift/Objective-C directamente desde Kotlin/Native.

Las librerías de Kotlin/Native están orientadas a compartir código entre proyectos. POSIX, gzip, OpenGL, Metal, Foundation, y un gran número de librerías populares, así como frameworks de Apple que se encuentran disponibles como librerías de Kotlin Native.

¿Cómo compartir código entre plataformas?

El concepto multiplataforma no está basado en compilar todo el código para todas las plataformas en las que se quiera disponibilizar. Este modelo trae consigo limitaciones, dado que las aplicaciones modernas necesitan acceder a características únicas inherentes a la plataforma sobre la que son ejecutadas.

Kotlin, en este aspecto, no limita este caso de uso. Cada componente puede compartir tanto código como sea necesario con otros, pero puede acceder a las API de la plataforma en cualquier momento a través del mecanismo de expected / result proporcionado por el lenguaje.

Un proyecto multiplataforma ofrece compatibilidad entre los diferentes targets de Kotlin y Kotlin Native. A su vez, las librerías multiplataforma proveen las APIs necesarias para el código Kotlin compartido entre plataformas. De esta forma se permite desarrollar partes compartidas del proyecto una sóla vez en Kotlin y así poder compartirlo entre las diferentes plataformas.

Kotlin Native trae consigo un API para la plataforma iOS, esto significa que los desarrolladores tienen acceso a prácticamente todos los Cocoa Touch Frameworks. Así, los desarrolladores de Kotlin pueden utilizar sus habilidades para crear aplicaciones iOS siempre y cuando cuenten con el equipo necesario.

Diagrama de Kotlin Native

Actualmente se puede hacer uso de un conjunto de librerías de código común que dan solución a tareas del día a día como HTTP, serialización y gestión de co-rutinas. Además se dispone de una extensa librería estándar disponible para todas las plataformas.

También puedes crear tu propia librería que provea un API común y llevar a cabo la implementación particular de cada plataforma. Echa un vistazo a los diferentes proyectos open-source que se están llevando a cabo con Kotlin Native.

Un proyecto experimental y en constante cambio

Actualmente, el proyecto Kotlin Multiplatform es experimental y se encuentra en un estado prematuro de constante cambio. Dada esta premisa, la oportunidad de poder trabajar con esta tecnología, nos ha permitido dentro de un modelo de aplicación sencillo, poder compartir entre plataformas un código base a excepción de las vistas, cuya implementación será particular de cada plataforma.

En contraposición, saca a la luz una serie de inconvenientes como:

  • Problemas con la generación framework de iOS en términos de compatibilidad.
  • Pérdida de tipos genéricos en la conversión de modelos de datos.
  • Escasez actual de librerías multiplataforma, para poder compartir el código para resolver ciertos escenarios.
  • El sistema de construcción cambia prácticamente cada nueva versión que se disponibiliza y esto implica tener que refactorizar y reescribir el proyecto para adaptarlo a la nueva configuración.

A pesar de no ser algo productivo a día de hoy, se trata de un enfoque de desarrollo de aplicaciones muy interesante, al cual no se debería quitar ojo ya que podría ser algo relevante en un futuro próximo.

¿Quieres saber que más cosas hacemos en BBVA Next Technologies?

Utilizamos cookies propias y de terceros para mejorar nuestros servicios, brindarle una grata experiencia y mostrar a los usuarios publicidad relacionada con sus preferencias mediante el análisis de sus hábitos de navegación. Si continúa navegando por este sitio web, consideramos que acepta su uso. Puede cambiar la configuración u obtener más información accediendo a nuestra política de cookies aquí.