web-dev-qa-db-fra.com

Qui a fait asynchroniser / attendre en premier?

Python a ajouté les constructions asynchrones/attendues en 3.5 en 2015. La communauté Javascript a fait des pas vers elle pendant un bazzillion d'années et a finalement ajouté une implémentation très similaire au projet dans ES8 publié en 2017 (à ma connaissance). TypeScript a également ajouté des méthodes asynchrones en 2015 dans la version 1.7 qui, à l'œil non averti, ressemblent exactement aux méthodes asynchrones js.

C # Ajout de méthodes asynchrones en 2012 qui ressemblent à toutes les autres implémentations asynchrones/attendues et étaient basées sur des flux de travail asynchrones de comportement similaire mais différents, introduits dans F # 2.0 en 2010. C'est le premier exemple que je connaisse de langage intégré à la programmation asynchrone. - C # avec la paire asynchrone/attente et F # avec les flux asynchrones.

Y a-t-il des exemples antérieurs des mots-clés utilisés dans ce contexte comme constructions de langage (ou bibliothèque)? D'après mes informations limitées, il semble que tout le monde ait imité les bonnes parties de l'implémentation C #, mais C # l'a-t-il copié de quelqu'un d'autre?

21
Ziv

Accoding to an Anders Hejlsberg interview for Channel 9 about Asynchronous Programmingasync/await en C # s'inspire des flux de travail asynchrones en F #.

Au cas où vous ne le sauriez pas, Anders Hejlsberg est l'architecte principal de C #, et a également travaillé dans d'autres langages, y compris TypeScript.

Selon Don Syme, sur son blog , les flux de travail asynchrones F # s'inspirent de la mise en œuvre de la monade asynchrone pour haskell. En particulier article de Peng Li et article de Koen Claessen "A Poor Man's Concurrency Monad" .

Au cas où vous ne le sauriez pas, Don Syme est l'architecte principal de F #, entre autres.

L'article de Koen Claessen est la plus ancienne implémentation d'opérations avec un résultat et des continuations que je peux trouver, datant de 1999. Il implémente la concurrence en définissant des opérations atomiques, des continuations et un planificateur à tour de rôle. L'approche monaid serait la motivation pour le passage du message passant à l'attente des résultats.

Les travaux antérieurs pour la concurrence dans Haskell utilisent une certaine forme de canaux ou de transmission de messages pour la communication.


En parlant de travaux antérieurs, je dois mentionner Concurrent Haskell, auquel "A Poor Man's Concurrency Monad" est une alternative ...

Et l'article "Implicit and Explicit Parallel Programming in Haskell" par Mark P. Jones et Paul Hudak. Cet article a jeté les bases du document de Koen Claessen.

Dans l'article "Programmation parallèle implicite et explicite dans Haskell", Mark et Paul analysent, entre autres, les propriétés de "fork" et le problème des effets secondaires dans la concurrence. Ils font référence à l'article "Une sémantique pour les primitives de concurrence d'accès ML" qui sélectionne un ensemble de primitives simultanées basé sur Concurrent ML et fournit une preuve qu'ils préservent les propriétés d'exécution séquentielle.

27
Theraot

Je crois que Microsoft ne prendrait pas les mots déjà existants, donc les mots async et await peuvent être attribués aux heures auxquelles vous faites référence. Cependant, les idées de Coroutines et Multitâche coopératif sont très anciennes.

1
max630