¿Las corutinas son solo azúcar sintáctico para los manipuladores de finalización?

¿Las corutinas son solo azúcar sintáctico alnetworkingedor de los bloques de terminación y se crearán bloques de terminación debajo del capó? ¿O el concepto de corutinas es mucho más complejo y amplio que el truco del comstackdor, también conocido como azúcar sintáctica?

No es solo azúcar sintáctico, en absoluto. Las corutinas no bloquean los hilos, simplemente suspenden la ejecución, por lo tanto fomentan la progtwigción concurrente sin locking .

Las corutinas no dependen de las características del sistema operativo o la JVM (p. Ej., No están asignadas a Threads nativas). En cambio, las corutinas y las funciones de suspend particular son transformadas por el comstackdor que produce una máquina de estados capaz de manejar suspensiones en general y que pasan suspendiendo corutinas manteniendo su estado. Esto está habilitado por Continuaciones , que se agregan como un parámetro para cada function suspendida por el comstackdor; esta técnica se llama "estilo de continuación de la continuidad".

Para más detalles, consulte https://github.com/Kotlin/kotlin-coroutines/blob/master/kotlin-coroutines-informal.md

No, las corutinas no son azúcar sintáctico. Puedes pensar en corrutinas como en funciones que pueden interactuar con la persona que llama. Cuando llamas a una function normal, di que pasas el control a foo y tienes que esperar hasta que foo complete o arroje una exception. Las corutinas son funciones que pueden transferir el control a la persona que llama, y ​​la persona que llama puede decidir si la coroutine debe continuar y cuándo y cómo debe continuar la coroutine. Esto le da la oportunidad de implementar cosas que son construcciones de lenguaje especiales en otros idiomas:

  • Generadores (también conocidos como yield palabra key) como en C # y JavaScript. La persona que llama continúa la ejecución de coroutine cuando un usuario quiere un nuevo valor del iterador. Coroutine vuelve al llamador llamando a la function yield() , que también le transfiere cierto valor a la persona que llama.
  • Async / await como en C # y JavaScript. La persona que llama continúa la ejecución cuando se resuelve Futuro (similar a Tarea o Protable). Coroutine vuelve al llamador llamando a la function await await() . La persona que llama pasa el valor a coroutine cuando Future se resuelve y corutina observa este valor como resultado de la llamada await await() .
  • Goroutines / canales en Go.

A diferencia de C #, JavaScript o Go, Kotlin no implementa ninguna de estas características en la syntax especial. En cambio, Kotlin proporciona solo la syntax de suspend fun , y luego usted mismo puede implementar estas características (u get una existente de la biblioteca correspondiente llamada kotlinx.coroutines ).

Te aconsejo que escuches lo que Chris Lattner (creador de Swift) count sobre los futuros models Swift Concurrency. Enlace: https://spec.fm/podcasts/swift-unwrapped/84323

a las 11:30 él dice:

Puedes pensar en async / await como azúcar sintáctico solo para los manejadores de finalización

  • ¿Por qué no está myDayForecast.map vacío?
  • Kotlin Propiedad Genérica
  • Android con Kotlin - Cómo usar HttpUrlConnection
  • Android Kotlin: no se puede progtwigr la notificación para una date futura con el administrador de alarmas
  • Android - Error al convertir Bytecode en Dex con la versión min SDK
  • Readaptación con kotlin, incapaz de crear @Body
  • Conversión de proyecto de Android con data binding de Java a Kotlin
  • Error en la validation de la expresión regular de la matrícula del automobile
  • ¿Puedo usar kotlin.reflect para get un valor de un campo
  • comstackdor de command-line kotlin
  • El file de class Kotlin no se puede ejecutar en IntelliJ para JUnit