2

例を使って、遅延評価がリアクティブプログラミングとどのように異なるかを誰かが示すことができます。あるいは、それらは非常に似ていますか?


c = 3;両方のアプローチを考えるとb = c + 2;、コードがどのように見えるかに関係なく、少なくとも内部的に実装する必要があるように思われint b() {return c + 2;}ます。どちらの場合もb、その値が必要になるまで何がわからないので、計算が行われます。

このアプローチを説明する名前は何でしょうか?


では、リアクティブプログラミングは遅延評価を使用またはシミュレートしますか?遅延評価のある言語は、反応的な方法でプログラムされていますか?

4

1 に答える 1

7

遅延評価とリアクティブプログラミングを同じ「論理レベル」にあると混同しているようです。

私にとって、遅延評価は、無限のデータの存在と操作を可能にする言語機能です。(一種の「有限構造」を持っているが、好きなだけ引き抜くことができ、まだいくらか残っているという意味で無限のデータ。)少し頭をかいていくつかの例を試してみると、次のようになります。これらの値を使用するときに「永久にループ」しないため、無限のデータ構造が存在する場合は、遅延評価を使用することをお勧めします。(遅延評価には他の用途もありますが、パフォーマンスが向上することもあります。)

ウィキペディアはリアクティブプログラミングを定義しています:

コンピューティングでは、リアクティブプログラミングは、データフローと変更の伝播を中心としたプログラミングパラダイムです。これは、使用するプログラミング言語で静的または動的なデータフローを簡単に表現できる必要があり、基盤となる実行モデルがデータフロー全体に変更を自動的に伝播することを意味します。

私にとって、これは実際には遅延評価とはまったく関係ありません。遅延評価とは、より多くの作業を行うために必要なだけの回答を計算し、必要なときにさらに作業を行えるようにするホルダー(通常は「サンク」と呼ばれます)を保持することを意味します。より多くの答え。(ちなみに、「必要なだけ」実行できるこの機能は、遅延評価を使用して無限のデータを操作できるようにするものです。)

対照的に、リアクティブプログラミングでは、データフローの伝播方法を---簡潔に---定義できます。(たとえば、リアクティブフレームワークを使用すると、コールバックや関数ポインターを使用して明示的に実装しなくても、指定した例をセットアップできます。)しかし、実際には、この行は非常にあいまいです。命令型言語には確かにリアクティブフレームワークがあります。ほとんどの人はGUIフレームワークをリアクティブと呼びます。

対照的に、関数型リアクティブプログラミング(FRP)では、宣言的にリアクティブデータを指定します。これは、Haskell言語の怠惰(その特定の場合)を使用して「内部」で実装されます。これは、更新を行うのに最も適した方法であるためです(そのパラダイムに最も直接的に適合するため)。

しかし、CやC ++のような言語では、通常、遅延評価の明示的な概念なしに、関数ポインターまたはコールバックを介してリアクティブプログラミングを行います。確かに、この種のものをサポートするために内部である程度の怠惰があるでしょうが、あなたはその区別をするための正しいセマンティックレベルではありません、そしてこの場合、あなたは通常怠惰な「トリック」を使ってスピードを上げることができますリアクティブフレームワーク(ユーザーがより多くの部分を使用するにつれて、表面上は何かを更新します--- GUIと言います---オンデマンドで)。

于 2012-11-27T01:44:58.310 に答える