13

私は jQuery の deferred/promise パターンまたはパラダイムのアイデアが本当に気に入っていますが、より細かい点や特定の実装の詳細に年老いた脳を巻き込むのに苦労することがあります。

実際、最近私は、遅延/約束パターン/パラダイムが jQuery よりも前にあるようであり、少なくともこれらの他の JavaScript ライブラリ/フレームワークにも含まれていることを発見しました。

私はおそらくいくつかを見逃したり、実際には他のものの一部である内容を含めたり、そのリストに他の間違いを犯したりしています...編集して修正するか、コメントを残してください.

遅延/約束の概念は「Q」によって発明されましたか? 他の JavaScript ライブラリまたはフレームワークで発明されたものですか? それとも、JavaScript よりも完全に古いものですか?

アイデア全体が伝統的に関数型プログラミングの一部である場合、これらのさまざまな異なる JavaScript 実装ではなく、どこで最初に行われ、一般的な概念についてどこで読むことができますか?

それとも、関数型プログラミングは完全に的外れなのでしょうか? この概念は、関数型プログラミングよりも並行プログラミングに関連していますか?

4

2 に答える 2

9

ウィキペディアによると:プロミスという用語は、1976 年にダニエル P. フリードマンとデビッド ワイズによって提案され、ピーター ヒバードはそれを最終的と呼びました。1977 年にヘンリー ベイカーとカール ヒューイットの論文で、やや似た概念の未来が紹介されました。

参照: ウィキペディアの先物と約束の履歴:

future および/または promise コンストラクトは、MultiLisp や Act 1 などのプログラミング言語で最初に実装されました。並行論理プログラミング言語での通信のための論理変数の使用は、future と非常によく似ていました。これらは、Freeze および IC Prolog を使用した Prolog で始まり、リレーショナル言語、並行 Prolog、Guarded Horn Clauses (GHC)、Parlog、Vulcan、Janus、Mozart/Oz、Flow Java、および Alice ML によって、真の同時実行プリミティブになりました。Id に由来し、Reppy の Concurrent ML に含まれる、データフロー プログラミング言語の単一割り当て I-var は、concurrent ロジック変数によく似ています。

プロミス パイプライン技術 (先物を使用してレイテンシを克服する) は、1988 年にバーバラ リスコフとリウバ シュリラによって発明され[12]、1989 年頃にプロジェクト ザナドゥのコンテキストでマーク S. ミラー、ディーン トリブル、ロブ ジェリングハウスによって独立して発明されました。

Promise という用語は、Liskov と Shrira によって造られましたが、現在ではほとんど使用されていない call-stream という名前でパイプライン メカニズムを参照しています。[...]

于 2012-08-07T11:54:27.353 に答える
6

JavaScript の deferred/promise の概念は、最初にDojo (Python のTwistedに触発された) に登場し、次にjQueryに登場したと思います。

注目すべき瞬間は、JavaScript のプロミスを「標準化」するために多くの努力を払った CommonJS グループの作業です。AB、およびDの提案を参照してください。これに基づいて、Kris Kowal のQ (現在最も人気のある実装だと思います) が進化しました。

Deferred (私は作者です) は後の実装です。最初はQに触発されました。その目標は、JavaScript で約束を自然に感じさせることと、Node.js コールバック スタイルからの移行を容易にすることです。

しかし、@rspが書いたように、プロミスはJavaScript自体よりもはるかに古い概念です:)

于 2012-08-07T18:56:17.267 に答える