プッシュプルと矢印付きFRPの根本的な違いは何ですか?


265

HaskellでFRPを勉強したいのですが、使用するライブラリを決めるのが少し難しいです。多くは死んだ試みのようであり、いくつかは復活したようです(ヤンパでの最近の活動など)。

私が読んだことから、FRPには2つの「種類」があるようです:片側にプッシュプルFRP(Reactive-bananaなど)と反対側に矢印付きFRP(Yampaなど)。FranとFrTimeの時にいくつかの「クラシックFRP」がかつてあったようですが、私はこれらの中で最近の活動を発見していません。

  • これらの2つ(または3つ)は、FRPの根本的に異なるアプローチですか?

  • そのうちの1つは時代遅れの理論ですか、それとももう1つは「未来のもの」でしょうか。

  • または、異なる目的に対応して並行して進化する必要がありますか?

  • 各カテゴリの最も目立つライブラリに名前を付けましたか、それとも検討する他のオプションがありますか(Sodium、Netwireなど)?


J.アブラハムソンのコメントで推奨されたEvan Czaplicki講演をようやく見ました。それは非常に興味深く、私にとって事を明確にするのに役立ちました。この質問を面白く思った人にはぜひお勧めします。


5
:ertes'(netwire作者の)意見に興味がされる可能性がありますstackoverflow.com/a/13344292/414413
Cirdec

14
本当にすばやく:reactive-bananaプッシュプルではなくプルベースです。reactiveプッシュプルです。Yampaそしてnetwirearrowizedされています。「値の累積」は許可するが「切り替え」は許可しないFRP、「切り替え」は許可するが「値の累積」は許可しないFRPがあります。どちらも「シンプル」なFRPです。Arrowized FRPは切り替えと蓄積を可能にし、矢印を使用してこれらの機能を組み合わせる危険を制御します。単項FRPのようにreactive-bananasodiumそして、elereaスイッチングおよび相互作用も過言ではないを行う蓄積することを確実にするために、他の慎重なメカニズムを使用しています。
J.アブラハムソン2014年

12
Arrowized FRPには、信号が常に入力のコンテキストで記述されるという優れた機能もあります。これにより、対話型FRPをよりよくシミュレートするために、出力を共変に変換したり、入力を反変に変換したりできます。その機能の優れた例については、コートニーとエリオットによる本物の機能ユーザーインターフェイスを参照してください。
J.アブラハムソン2014年

9
Elmの作者であるEvan Czaplickiによる講演「Controlling Time and Space」にも興味があるかもしれません。私の意見では、彼はFRP設計スペースと関連する妥協点について、高レベルの概要をうまく提供しています。
DanielM 2014年

3
私は..あなたがここにあなたの答えを得るだろうと思い stackoverflow.com/questions/10000074/...
Rushabhシャー

回答:


18

私はあなたの質問を調査するためにHaskell.orgに旅行に行きました。私が見つけたものは、あなたの研究を進めるために読むべき2つの重要な論文であり、私はこれらの学術論文からあなたの質問に対する私の答えを構築しています。

Conal ElliottによるプッシュプルFRP

ジョン・ヒューズによるモナドから矢印への一般化


  1. はい、しかしいいえ。Elliotによれば、プッシュはデータ駆動型のFRP評価であり、プルはいわゆる「要求駆動型」評価に関連しています。プッシュはデータ入力間でアイドルになる傾向があるため、作成者はプルを推奨します。要点は次のとおりです。プッシュプルはこれらの動作を組み合わせてバランスをとり、値を再計算する必要性を最小限に抑えることを主な目的としています。それは簡単です; プッシュプルでFRPを操作すると、反応する能力が速くなります。Arrowは、抽象型を使用して値をリンクし、それらを同時に評価するための別の手法です。これらの概念はすべて根本的に異なります。しかし、私の言葉を信じないでください。

    Arrowインターフェースの性質は、最小限の再評価という目的にとって問題があります。入力イベントと動作は1つの入力に結合され、コンポーネントが変更されるたびに変更されます(Elliott)。

    このように、アローはプッシュプルの目的に反しています。これは、これらすべてを一度に使用できないことを意味するのではなく、複雑になるだけであり、抽象Arrow型なしでは計算できないことがいくつかあります。

  2. どのようなアプローチが「未来の道」であるかについて、学術的な見解はありません。矢印は同時性を特にうまく処理できることに注意してください。矢印を実装し、プッシュプルを使用して計算を最小限に抑えることができれば、それが将来の方法です。

  3. はい、彼らは別々の目的に取り組みます。先に述べたように、それらは一緒に定式化できますが、実装するのは困難であり、それが機能しても、おそらくプッシュプルの反応速度の利点を打ち消すでしょう。

  4. これは主観的ですが、ReactiveとYampaがFRPで最も一般的に引用される言語ライブラリであるようです。Reactive by Conal Elliottはルーツが深く、ヤンパも設立されていると思います。Netwireのような他のプロジェクトが代替として生まれましたが、巨人に取って代わるまでにはしばらくかかる可能性があります。


お役に立てれば!私が指摘した記事を読むと言ったように、矢印とプッシュとプルの間のセマンティック距離のより良い感覚をあなたに与えるでしょう。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.