web-dev-qa-db-ja.com

最初に非同期/待機したのは誰ですか?

Pythonはasync/awaitコンストラクトを2015年に3.5で追加しました。Javascriptコミュニティはそれに向けて膨大な数の年を踏み出し、2017年にリリースされたES8のドラフトに非常に類似した実装を追加しました(私の理解から)。 TypeScriptは、2015年にバージョン1.7で非同期メソッドも追加しました。これは、トレーニングされていない目には、js非同期メソッドとまったく同じように見えます。

C#が2012年に追加した非同期メソッドは、async/awaitの他のすべての実装のように見え、F#の同様に動作するが2010年にF#2.0で導入された異なる外観の非同期ワークフローに基づいていました。これは、非同期プログラミングに組み込まれた言語について知っている最初の例です-C#と非同期/待機ペア、F#と非同期フロー。

このコンテキストで言語構成(またはライブラリ)として使用されているキーワードの以前の例はありますか?私の限られた情報から、誰もがC#実装の良い部分を模倣しているように見えますが、C#は他の誰かからそれをコピーしましたか?

21
Ziv

にコーディング チャンネル9のAnders Hejlsbergインタビュー、非同期プログラミングについてasync/await in C#は、F#の非同期ワークフローでインスピレーションを得ます。

ご存知ないかもしれませんが、Anders HejlsbergはC#の主任アーキテクトであり、TypeScriptを含む他の言語でも働いています。

Don Symeによると、 彼のブログ によると、F#非同期ワークフローは、haskellの非同期モナドの実装からインスピレーションを得ています。特に Peng Liの論文 および Koen Claessenの「A Poor Man's Concurrency Monad」論文

ご存知ない方のために説明すると、Don SymeはとりわけF#の主任アーキテクトです

Koen Claessenの論文は、1999年に遡って、結果と継続を伴う操作の古い実装です。アトミック操作、継続、およびラウンドロビンスケジューラを定義することにより、同時実行性を実装しています。モナイド方式は、メッセージパッシングから待機中の結果への切り替えの動機になります。

Haskellでの並行性に関するこれまでの作業では、何らかの形式のチャネルまたはメッセージパッシングを通信に使用していました。


以前の仕事について言えば、「貧乏人の並行性モナド」が代替となる並行ハスケルについて言及しなければなりません...

そして、Mark P. JonesとPaul Hudakによる論文 "Haskellでの暗黙的および明示的な並列プログラミング" 。この論文は、Koen Claessenの論文の基礎となった。

「Haskellでの暗黙的および明示的並列プログラミング」という論文で、MarkとPaulは、「フォーク」の特性と、並行性における副作用の問題などを分析しています。彼らは紙を参照します "ML同時実行プリミティブのセマンティクス" は、同時MLに基づいてセットの同時プリミティブを選択し、それらが順次実行プロパティを保持することの証明を提供します。

27
Theraot

Microsoftは既存の単語をとらないと思います。そのため、asyncおよびawaitという単語は、あなたが参照する時間に起因する可能性があります。ただし、 Coroutines および Cooperative multitasking の考え方は非常に古いものです。

1
max630