¿Por qué Kotlin necesita agrupar su time de ejecución después de comstackdo?

Solo trato de entender la architecture subyacente, que creo que me estoy equivocando.

Tomando el tutorial aquí como el ejemplo.

Cuando lo hago:

kotlinc-jvm hello.kt -include-runtime -d hello.jar 

¿Por qué es necesario agrupar el time de ejecución de Kotlin en el contenedor si el comstackdor ya convirtió el código en bytecode de Java?

Cuando escribe una aplicación en Java, puede confiar en todas las bibliotecas de classs estándar. El java. las classs (por ejemplo, java.lang.* , java.util.* …) se incluyen con cada JRE, por lo que no es necesario que las empackage usted mismo.

Kotlin incluye su propia biblioteca de classs estándar (el time de ejecución Kotlin ), separada de la biblioteca de classs Java. Para distribuir un file jar que pueda ser ejecutado por cualquier persona con un JRE simple y antiguo, también debe agrupar el time de ejecución de Kotlin.

Si no incluyó el time de ejecución de Kotlin, entonces su usuario debería asegurarse de que el time de ejecución de Kotlin estuviera en el classpath al ejecutar su aplicación. La página que vinculó da un ejemplo de este escenario:

Comstackndo una biblioteca

Si está desarrollando una biblioteca para ser utilizada por otras aplicaciones de Kotlin, puede generar el file .jar sin include el time de ejecución de Kotlin.

 $ kotlinc-jvm hello.kt -d hello.jar 

Si se dirige a otros usuarios de Kotlin, es razonable suponer que ya tendrán disponible el time de ejecución de Kotlin. Sin embargo, si intenta implementar una aplicación para un usuario final, entonces desea include el time de ejecución de Kotlin para que su aplicación sea autónoma.

La respuesta aceptada de Greg Kopff explica el caso general de la necesidad de agrupar algo, pero creo que el punto principal de la pregunta no se cumplió: ¿por qué algo que comstack en código byte de Java (y por lo tanto ya no es Kotlin) requiere un time de ejecución de Kotlin? "¿?"

Mi expectativa (y la del interlocutor, sospecho) es que una vez comstackda, ya no queda rastro de Kotlin, por lo que no debería haber necesidad de un time de ejecución de Kotlin.

Mi expectativa es también que un "time de ejecución" es una especie de binary nativo, como JRE, directamente responsable de ejecutar el código de bytes.

De la reference de lenguaje de Kotlin en packages , sin embargo:

Se importan varios packages en cada file de Kotlin por defecto:

  • kotlin. *
  • kotlin.annotation. *
  • kotlin.collections. *
  • kotlin.comparisons. * (desde 1.1)
  • kotlin.io. *
  • kotlin.ranges. *
  • kotlin.sequences. *
  • kotlin.text. *

Por lo tanto, parece que:

  1. el "time de ejecución de Kotlin" es en realidad solo una "biblioteca de classs de Kotlin" (y no estrictamente un "time de ejecución" separado como JRE);

  2. cuando el código de Kotlin se comstack en código de bytes Java, el Kotlin se ha ido, pero el código de bytes que lo reemplaza necesita acceso a la biblioteca de classs de Kotlin ; y entonces

  3. el time de ejecución de Kotlin debe estar disponible para cualquier código de bytes de Java que originalmente era el código de Kotlin , lo que se puede hacer agrupando el time de ejecución de Kotlin con dicho código.

Para mí, el uso del equipo Kotlin de la palabra "time de ejecución" es lo que desencadenó tanta confusión. Preferiría que lo llamaran "las classs de soporte de Kotlin" en lugar de usar un término de Java con una connotación muy diferente.

Esto no explica por qué son necesarias tantas cosas en el espacio de nombres del package kotlin , o si se pueden escribir files Kotlin que en realidad no se basan en el time de ejecución de Kotlin, pero tal vez estos sean problemas para otra pregunta.

  • ¿Cuál es la diferencia entre Int y Integer en Kotlin?
  • While loop en el lenguaje de progtwigción Kotlin
  • Kotlin Factory en la class anidada interna
  • Clase abstracta de Kotlin con param genérico y methods que usan param de tipo
  • Agregar subscribeOn () está cambiando el tipo de retorno de observable
  • Kotlin-allopen para android
  • Cómo express `Class <? extiende Any> `
  • Android: declara y usa vistas en Kotlin
  • ¿Cómo selecciono qué sobrecarga de Java sobrescribir en una class derivada de Kotlin?
  • Complemento de Jacoco Jenkins con Kotlin
  • No puede detenerse en la exception en IntelliJ IDEA mientras escribe el código de Kotlin