it-swarm.com.de

Wer hat zuerst asynchronisiert / gewartet?

Python hat die Konstrukte async/await 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 in ES8 veröffentlichten Entwurf 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?

21
Ziv

Anpassung an ein Anders Hejlsberg-Interview für Channel 9 über asynchrone Programmierungasync/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, in seinem Blog , lassen sich F # asynchrone Workflows 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" , das einen Satz gleichzeitiger Primitive basierend auf Concurrent ML auswählt und einen Beweis dafür liefert, dass sie sequentielle Ausführungseigenschaften beibehalten.

27
Theraot

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

1
max630