¿Quién async / esperar primero?


21

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?


3
Si solo está buscando el uso de las palabras async awaiten un lenguaje de programación, eso es bastante reciente. Pero la programación asincrónica del tipo practicado por async awaitha existido durante mucho tiempo.
Robert Harvey

Respuestas:


27

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.


Esta es una muy buena respuesta. Me alegra que hayas mencionado a Haskell & ML (de los cuales F # se inspira). Yo que usted oirá gente Haskell que hablan de “estilo de continuación”. async / await es solo un compilador de magia / sintaxis de azúcar sobre ese concepto
RubberDuck

1

Creo que Microsoft no tomaría palabras ya existentes, por lo que las palabras asyncy awaitse pueden atribuir a los tiempos a los que se refiere. Sin embargo, las ideas de Coroutines y Multitarea Cooperativa son muy antiguas.


2
No creo que sea correcto comparar las rutinas y la programación asincrónica: ofrecen un tipo de abstracción muy diferente.
wondra

3
"Creo que Microsoft no tomaría palabras ya existentes" - ¿Tiene alguna base para esa creencia? Los diseñadores de lenguajes exitosos suelen ser más pragmáticos que eso.
Sebastian Redl
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.