誰が最初に非同期/待機しましたか?


20

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

C#2012年にasync / awaitの他のすべての実装のように見える非同期メソッドを追加し、2010年にF#2.0で導入されたF#の同様に動作するが外観の異なる非同期ワークフローに基づいていました。 -非同期/待機ペアを持つC#および非同期フローを持つF#。

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


3
async awaitプログラミング言語で単語の使用法を探しているだけなら、それはかなり最近のことです。しかし、実践されasync awaitている種類の非同期プログラミングは長い間存在していました。
ロバートハーベイ

回答:


27

Accoding 非同期プログラミングについてのチャンネル9のためのアンダース・ヘルスバーグのインタビュー async/await C#では、F#で非同期worflowsにインスピレーションを取ります。

知らない場合は、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での並行処理の以前の作業では、通信に何らかの形式のチャネルまたはメッセージパッシングを使用します。


過去の研究といえば、Concurrent Haskellに言及しなければなりません。ConcurrentHaskellは、「A Poor Man's Concurrency Monad」に代わるものです...

また、Mark P. JonesとPaul Hudakによる論文「Haskellの暗黙的および明示的な並列プログラミング」。この論文はKoen Claessenの論文の基礎を築いた。

論文「Haskellの暗黙的および明示的な並列プログラミング」で、MarkとPaulは、「フォーク」の性質と並行性における副作用の問題などを分析しています。彼らは、コンカレントMLに基づいてセットされたコンカレントプリミティブを選択し、シーケンシャルな実行プロパティを保持している証拠を提供する「MLのコンカレントプリミティブのセマンティクス」という論文を参照します。


これは本当に良い答えです。Haskell&ML(どちらもF#からインスピレーションを得ている)についてお話しできてうれしいです。私が知っているあなたが、「継続スタイル」の話Haskellの人々が聞こえます。async / awaitは、その概念に加えて、単なるコンパイラマジック/構文シュガーです。
ラバーダック

1

マイクロソフトは、既存の単語を受け取らないと信じているので、その単語はasyncawaitあなたが言及する時代に起因すると考えられます。ただし、コルーチン協調マルチタスクのアイデアは非常に古いものです。


2
コルーチンと非同期プログラミングを比較するのは正しいとは思いません-それらは非常に異なるタイプの抽象化を提供します。
ウォンドラ

3
「マイクロソフトは既に存在する言葉を受け取らないと信じています」-その信念の根拠はありますか?成功する言語の設計者は通常、それよりも実用的です。
セバスチャンレッド
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.