Python agregó las construcciones async / await en 3.5 en 2015. La comunidad de Javascript dio pasos hacia adelante por un deslumbrante año y finalmente agregó una implementación muy similar al borrador en ES8 lanzado en 2017 (según tengo entendido). Mecanografiado también agregó métodos asincrónicos en 2015 en la versión 1.7 que para el ojo inexperto se ven exactamente como los métodos asíncronos js.
C # Se agregaron métodos asincrónicos en 2012 que se parecen a todas las demás implementaciones de async / await y se basaron en flujos de trabajo asincrónicos de comportamiento similar pero de aspecto diferente de F # que se introdujeron en F # 2.0 en 2010. Este es el primer ejemplo que conozco del lenguaje integrado en la programación asincrónica - C # con el par asíncrono / espera y F # con flujos asíncronos.
¿Existen ejemplos anteriores de las palabras clave que se utilizan en este contexto como construcciones de lenguaje (o biblioteca)? Según mi información limitada, parece que todos imitaron las partes buenas de la implementación de C #, pero ¿C # lo copió de otra persona?
async
await
en un lenguaje de programación, eso es bastante reciente. Pero la programación asincrónica del tipo practicado porasync
await
ha existido durante mucho tiempo.Respuestas:
De acuerdo con una entrevista de Anders Hejlsberg para el Canal 9 sobre la programación asincrónica
async/await
en C #, se inspira en los flujos de trabajo asíncronos en F #.En caso de que no lo sepa, Anders Hejlsberg es el arquitecto principal de C #, y también ha trabajado en otros lenguajes, incluido TypeScript.
Según Don Syme, en su blog , los flujos de trabajo asíncronos de F # se inspiran en la implementación de la mónada asincrónica para Haskell. En particular, el artículo de Li Peng y el papel "de un hombre pobre concurrencia mónada" de Koen Claessen .
En caso de que no lo sepas, Don Syme es el arquitecto principal de F #, entre otras cosas.
El artículo de Koen Claessen es la implementación más antigua de operaciones con un resultado y continuaciones que puedo encontrar, que data de 1999. Implementa la concurrencia definiendo operaciones atómicas, continuaciones y un programador de turnos. El enfoque monaid sería la motivación para pasar del mensaje a esperar resultados.
El trabajo previo para la concurrencia en Haskell usa alguna forma de canales o mensajes que pasan para la comunicación.
Hablando de trabajos anteriores, tengo que mencionar a Concurrent Haskell, para lo cual "A Poor Man's Concurrency Monad" es una alternativa ...
Y el artículo "Programación paralela implícita y explícita en Haskell" de Mark P. Jones y Paul Hudak. Este documento sentó las bases para el documento de Koen Claessen.
En el documento "Programación paralela implícita y explícita en Haskell", Mark y Paul analizan las propiedades de la "bifurcación" y el problema de los efectos secundarios en la concurrencia, entre otras cosas. Hacen referencia al documento "Una semántica para primitivas de concurrencia de ML" que selecciona un conjunto de primitivas concurrentes basadas en ML concurrente y proporciona una prueba de que conservan las propiedades de ejecución secuencial.
fuente
Creo que Microsoft no tomaría palabras ya existentes, por lo que las palabras
async
yawait
se pueden atribuir a los tiempos a los que se refiere. Sin embargo, las ideas de Coroutines y Multitarea Cooperativa son muy antiguas.fuente