Chi ha async / attende per primo?

1

Python ha aggiunto i costrutti asincrona / attesa in 3.5 nel 2015. La comunità di Javascript ha fatto passi avanti per un anno di splendore e alla fine ha aggiunto un'implementazione molto simile alla bozza in ES8 pubblicata 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 # Nel 2012 sono stati aggiunti metodi asincroni che assomigliano a tutte le altre implementazioni di async / await e si basavano sui flussi di lavoro asincroni simili a F #, che si presentavano allo stesso modo in F # 2.0 nel 2010. Questo è il primo esempio che conosco del linguaggio costruito in programmazione asincrona - C # con la coppia async / await e F # con flussi asincroni.

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

    
posta Ziv 26.08.2018 - 16:13
fonte

2 risposte

5

Accoding a un intervista di Anders Hejlsberg per Canale 9 sulla programmazione asincrona async/await in C # prende ispirazione su worflows asincroni in F #.

Se non lo sai, Anders Hejlsberg è l'architetto principale di C # e ha anche lavorato in altre lingue, incluso TypeScript.

Secondo Don Syme, sul suo blog I flussi di lavoro asincroni F # prendono ispirazione dall'implementazione della monade asincrona per haskell. In particolare articolo di Peng Li e Koen Claessen's Paper" A Poor Man's Concurrency Monad ".

Se non lo sai, Don Syme è l'architetto principale di F #, tra le altre cose.

Il documento di Koen Claessen è la vecchia implementazione di operazioni con un risultato e continuazioni che riesco a trovare, risalente al 1999. Implementa la concorrenza definendo operazioni atomiche, continuazioni e uno schedulatore round-robin. L'approccio monovalente sarebbe la motivazione per passare dal messaggio che passa ai risultati in attesa.

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

Parlando di lavori precedenti, devo menzionare Concurrent Haskell, a cui "La Monade di una povera coppia" è un'alternativa ...

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

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

    
risposta data 27.08.2018 - 15:00
fonte
0

Credo che Microsoft non prenderebbe le parole già esistenti, quindi le parole async e await possono essere attribuite ai tempi a cui si fa riferimento. Tuttavia, le idee di Coroutine e Il multitasking di tipo coverativo è molto vecchio.

    
risposta data 27.08.2018 - 08:01
fonte

Leggi altre domande sui tag