Wer hat zuerst asynchronisiert / gewartet?


20

Python hat die async / await-Konstrukte in 3.5 im Jahr 2015 hinzugefügt. Die Javascript-Community hat bazzillion Jahre lang Schritte in diese Richtung unternommen und schließlich eine sehr ähnliche Implementierung zu dem 2017 veröffentlichten Entwurf in ES8 hinzugefügt (nach meinem Verständnis). Typescript fügte 2015 in Version 1.7 auch asynchrone Methoden hinzu, die für das ungeübte Auge genau wie js asynchrone Methoden aussehen.

C # 2012 wurden asynchrone Methoden hinzugefügt, die wie alle anderen Implementierungen von async / await aussehen und auf ähnlich verhaltenen, aber unterschiedlich aussehenden asynchronen Workflows von F # basieren, die 2010 in F # 2.0 eingeführt wurden. Dies ist das früheste mir bekannte Beispiel für eine in asynchroner Programmierung integrierte Sprache - C # mit dem asynchronen / wartenden Paar und F # mit asynchronen Flüssen.

Gibt es frühere Beispiele für die Schlüsselwörter, die in diesem Zusammenhang als Sprachkonstrukte (oder Bibliothek) verwendet werden? Nach meinen begrenzten Informationen sieht es so aus, als hätten alle die guten Teile der C # -Implementierung nachgeahmt, aber hat C # sie von jemand anderem kopiert?


3
Wenn Sie nur nach der Verwendung der Wörter async awaitin einer Programmiersprache suchen , ist dies ziemlich neu. Aber asynchrone Programmierung, wie sie von praktiziert wird, async awaitgibt es schon lange.
Robert Harvey

Antworten:


27

Die Aufnahme in ein Anders Hejlsberg-Interview für Channel 9 über asynchrone Programmierung async/await in C # lässt sich von asynchronen Worflows in F # inspirieren.

Falls Sie es nicht wissen, Anders Hejlsberg ist der leitende Architekt von C # und hat auch in anderen Sprachen gearbeitet, einschließlich TypeScript.

Laut Don Syme lassen sich F # asynchrone Workflows in seinem Blog von der Implementierung der asynchronen Monade für Haskell inspirieren. Insbesondere Peng Lis Papier und Koen Claessens "A Poor Man's Concurrency Monad" -Papier .

Falls Sie es nicht wissen, ist Don Syme unter anderem der leitende Architekt von F #.

Koen Claessens Artikel ist die ältere Implementierung von Operationen mit einem Ergebnis und Fortsetzungen, die ich aus dem Jahr 1999 finden kann. Er implementiert Parallelität, indem er atomare Operationen, Fortsetzungen und einen Round-Robin-Scheduler definiert. Der Monaid-Ansatz wäre die Motivation für den Wechsel von der Nachrichtenübermittlung zum Warten auf Ergebnisse.

Frühere Arbeiten zur Parallelität in Haskell verwenden eine Form von Kanälen oder Nachrichtenübermittlung für die Kommunikation.


In Bezug auf frühere Arbeiten muss ich Concurrent Haskell erwähnen, zu dem "A Poor Man's Concurrency Monad" eine Alternative ist ...

Und das Papier "Implizite und explizite parallele Programmierung in Haskell" von Mark P. Jones und Paul Hudak. Dieses Papier legte den Grundstein für Koen Claessens Papier.

In der Arbeit "Implizite und explizite parallele Programmierung in Haskell" analysieren Mark und Paul unter anderem die Eigenschaften von "Fork" und das Problem der Nebenwirkungen bei Parallelität. Sie verweisen auf das Papier "Eine Semantik für ML-Parallelitätsprimitive", in dem ein Satz von gleichzeitigen Primitiven basierend auf Concurrent ML ausgewählt und ein Beweis dafür erbracht wird, dass sie die Eigenschaften der sequentiellen Ausführung beibehalten.


Das ist eine wirklich gute Antwort. Ich bin froh, dass Sie Haskell & ML erwähnt haben (beide inspirieren sich von F #). Ich weiß, dass Sie Haskell-Leute über „Fortsetzungsstil“ sprechen hören werden. async / await ist nur Compiler Magic / Syntax Sugar zusätzlich zu diesem Konzept.
RubberDuck

1

Ich glaube, dass Microsoft nicht bereits vorhandene Wörter nehmen würde, so dass die Wörter asyncund awaitden Zeiten zugeordnet werden können, auf die Sie sich beziehen. Die Ideen von Coroutines und Cooperative Multitasking sind jedoch sehr alt.


2
Ich denke nicht, dass es richtig ist, Coroutinen und asynchrone Programmierung zu vergleichen - sie bieten eine sehr unterschiedliche Art der Abstraktion.
Wondra

3
"Ich glaube, dass Microsoft nicht bereits vorhandene Wörter verwenden würde" - Haben Sie eine Grundlage für diesen Glauben? Designer erfolgreicher Sprachen sind in der Regel pragmatischer.
Sebastian Redl
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.