Chi asincrona / attende prima?


21

Python ha aggiunto i costrutti asincroni / wait in 3.5 nel 2015. La community di Javascript ha fatto passi avanti per esso per un bazzillion di anni e infine ha aggiunto un'implementazione molto simile alla bozza in ES8 rilasciata nel 2017 (Dalla mia comprensione). Typescript ha anche aggiunto metodi asincroni nel 2015 nella versione 1.7 che all'occhio non allenato sembrano esattamente come i metodi asincroni js.

C # Aggiunti metodi asincroni nel 2012 che assomigliano a tutte le altre implementazioni di asincrono / attendono e si basavano su flussi di lavoro asincroni che si comportano in modo simile, ma con aspetto diverso, introdotti in F # 2.0 nel 2010. Questo è il primo esempio che conosco del linguaggio incorporato nella programmazione asincrona - C # con la coppia asincrona / wait e F # con flussi asincroni.

Esistono esempi precedenti delle parole chiave utilizzate in questo contesto come costrutti di linguaggio (o libreria)? Dalle mie informazioni limitate sembra che tutti abbiano imitato le parti positive dell'implementazione di C #, ma C # l'ha copiato da qualcun altro?


3
Se stai solo cercando l'uso delle parole async awaitin un linguaggio di programmazione, è abbastanza recente. Ma la programmazione asincrona del tipo praticato esiste da async awaitmolto tempo.
Robert Harvey,

Risposte:


27

Accodando a un'intervista di Anders Hejlsberg per Channel 9 sulla programmazione asincrona async/await in C # prende ispirazione dai worflow asincroni in F #.

Nel caso in cui non lo sapessi, Anders Hejlsberg è l'architetto capo di C # e ha anche lavorato in altre lingue, incluso TypeScript.

Secondo Don Syme, sul suo blog , i flussi di lavoro asincroni di F # si ispirano all'implementazione della monade asincrona per haskell. In particolare il documento di Peng Li e quello di Koen Claessen "A Poor Man's Concurrency Monad" .

Nel caso in cui non lo sapessi, Don Syme è l'architetto capo di F #, tra le altre cose.

L'articolo di Koen Claessen è la più vecchia implementazione di operazioni con un risultato e continuazioni che posso trovare, risalente al 1999. Implementa la concorrenza definendo operazioni atomiche, continuazioni e un pianificatore round robin. L'approccio monaid sarebbe la motivazione per il passaggio dal passaggio del messaggio all'attesa dei risultati.

Il lavoro precedente per la concorrenza in Haskell utilizza una qualche forma di canali o passaggio di messaggi per la comunicazione.


A proposito di lavori precedenti, devo menzionare Concurrent Haskell, a cui "A Poor Man's Concurrency Monad" è un'alternativa ...

E l'articolo "Programmazione parallela implicita ed esplicita in Haskell" di Mark P. Jones e Paul Hudak. Questo documento ha gettato le basi per il documento di Koen Claessen.

Nel documento "Programmazione parallela implicita ed esplicita in Haskell" Mark e Paul analizzano, tra le altre cose, le proprietà di "fork" e il problema degli effetti collaterali in concorrenza. Fanno riferimento al documento "Una semantica per le primitive di concorrenza ML" che seleziona un insieme di primitive simultanee basate su Concurrent ML e fornisce una prova che mantengono le proprietà di esecuzione sequenziale.


Questa è davvero una buona risposta Sono contento che tu abbia menzionato Haskell & ML (entrambi i quali F # trae ispirazione). Io so che sentirete gente Haskell parlare di “stile continuazione”. async / waitit è solo zucchero per sintassi / sintassi in cima a quel concetto.
RubberDuck,

1

Credo che Microsoft non prenderebbe parole già esistenti, quindi le parole asynce awaitpossono essere attribuite ai tempi a cui ti riferisci. Tuttavia, le idee di Coroutines e Cooperative Multitasking sono molto antiche.


2
Non credo sia corretto confrontare le coroutine e la programmazione asincrona: offrono un tipo di astrazione molto diverso.
Wondra,

3
"Credo che Microsoft non prenderebbe parole già esistenti" - Hai qualche base per questa convinzione? I progettisti di linguaggi di successo sono generalmente più pragmatici di così.
Sebastian Redl
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.