Qui a fait asynchroniser / attendre en premier?


21

Python a ajouté les constructions asynchrones / attendues dans 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 (d'après ma compréhension). 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?


3
Si vous recherchez simplement l'utilisation des mots async awaitdans un langage de programmation, c'est assez récent. Mais la programmation asynchrone du type pratiqué par async awaitexiste depuis longtemps.
Robert Harvey

Réponses:


27

Accoder une interview d'Anders Hejlsberg pour Channel 9 sur la programmation asynchrone async/await en C # s'inspire des flux 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 l'article de Li Peng et le papier « Concurrency d'un pauvre homme Monad » de Koen Claessen .

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 puisse 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 le document "Implicit and Explicit Parallel Programming in Haskell" de 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.


C'est une très bonne réponse. Je suis content que vous ayez mentionné Haskell & ML (tous deux dont F # s'inspire). Je sais que vous entendrez des gens de Haskell parler de «style de continuation». async / wait est juste du sucre magique / syntaxe du compilateur en plus de ce concept.
RubberDuck

1

Je crois que Microsoft ne prendrait pas les mots déjà existants, donc les mots asyncet awaitpeuvent être attribués aux moments auxquels vous vous référez. Cependant, les idées de Coroutines et du multitâche coopératif sont très anciennes.


2
Je ne pense pas qu'il soit correct de comparer les coroutines et la programmation asynchrone - elles offrent un type d'abstraction très différent.
wondra

3
"Je crois que Microsoft ne prendrait pas des mots déjà existants" - Avez-vous une base pour cette croyance? Les concepteurs de langues qui réussissent sont généralement plus pragmatiques que cela.
Sebastian Redl
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.