Entonces, sé que Kotlin Native es obviamente nativo y Kotlin JVM no lo es, pero es el código entre Kotlin JVM y Kotlin Native: 1. Compilador diferente y código diferente 2. Compilador diferente y código similar 3. Compilador diferente y el mismo código 4. Ninguno de lo anterior (por favor explique)
Los compiladores Kotlin/JVM y Kotlin/Native comparten el front-end (la parte que realiza el análisis de código, la resolución de nombres, la inferencia de tipos, etc.), pero los back-end del compilador que traducen la representación interna del programa al código de destino (la JVM bytecode y bitcode LLVM, respectivamente) son diferentes.
El lenguaje Kotlin aceptado por los dos compiladores es el mismo, pero algunas de las funciones y comprobaciones son específicas de la plataforma. Además, las bibliotecas estándar para Kotlin/JVM y Kotlin/Native son lo suficientemente diferentes, consulte las API disponibles en cada plataforma aquí: Biblioteca estándar de Kotlin .
Otra gran diferencia es el modelo de memoria: Kotlin/JVM usa el modelo de memoria de Java, mientras que Kotlin/Native ofrece su propio modelo de memoria y concurrencia .
Además, las dependencias que se pueden usar en los proyectos Kotlin/JVM y Kotlin/Native son diferentes. Además de los proyectos creados con el mismo objetivo de Kotlin:
Kotlin/JVM también puede usar cualquier biblioteca creada para JVM (escrita en Java, Scala, etc.)
Kotlin/Native también puede interoperar con bibliotecas nativas escritas en C (o al menos con encabezados de C) utilizando las herramientas de interoperabilidad de C.
Tanto Kotlin/JVM como Kotlin/Native pueden usar bibliotecas multiplataforma de Kotlin. Dado que una dependencia es una biblioteca multiplataforma, se puede reutilizar por completo el código que funciona con ella entre Kotlin/JVM y Kotlin/Native.