Ich möchte FRP in Haskell studieren, aber es ist etwas schwierig, sich für eine Bibliothek zu entscheiden. Viele scheinen tote Versuche zu sein, einige scheinen auferstanden zu sein (wie die jüngsten Aktivitäten auf Yampa).
Nach dem, was ich gelesen habe, scheint es zwei "Arten" von FRP zu geben: Push-Pull-FRP (wie bei Reactive-Banana) auf der einen Seite und Pfeil-FRP (wie bei Yampa) auf der anderen Seite. Es scheint, dass es zur Zeit von Fran und FrTime auch einige "klassische FRP" gab, aber ich habe in letzter Zeit keine Aktivitäten in diesen entdeckt.
Sind diese zwei (oder drei) wirklich grundlegend unterschiedliche Ansätze von FRP?
Ist eine von ihnen veraltete Theorie, während die andere das "Zeug der Zukunft" wäre?
Oder müssen sie sich parallel entwickeln und unterschiedliche Zwecke erfüllen?
Habe ich die bekannteste Bibliothek jeder Kategorie genannt oder gibt es andere zu berücksichtigende Optionen (Sodium, Netwire, et al.)?
Ich habe mir endlich den Vortrag von Evan Czaplicki angesehen , der in den Kommentaren von J. Abrahamson empfohlen wurde. Es ist sehr interessant und hat mir geholfen, die Dinge zu klären. Ich kann es jedem empfehlen, der diese Frage interessant fand.
quelle
reactive-banana
ist definitiv Pull-basiert, nicht Push-Pull.reactive
ist Push-Pull.Yampa
undnetwire
sind pfeilförmig. Es gibt FRPs, die "Akkumulieren von Werten" erlauben, aber kein "Schalten" erlauben, FRPs, die "Schalten" erlauben, aber keine "Akkumulieren von Werten". Beide sind "einfache" FRP. Arrowized FRP ermöglicht das Umschalten und Akkumulieren und verwendet Pfeile, um die Gefahr der Kombination dieser Funktionen zu steuern. Monadic FRP wiereactive-banana
,sodium
undelerea
verwenden andere Mechanismen vorsichtig , dass Schalten zu gewährleisten und Akkumulieren keine Wechselwirkung zwischen zu viel.Antworten:
Ich habe eine Reise zu Haskell.org unternommen, um Ihre Frage zu untersuchen. Ich habe zwei wichtige Artikel gefunden, die Sie lesen sollten, um Ihre Forschung voranzutreiben, und ich baue meine Antwort auf Ihre Frage aus diesen wissenschaftlichen Artikeln.
Push-Pull FRP von Conal Elliott
Verallgemeinerung von Monaden auf Pfeile von John Hughes
Ja, aber auch nein. Laut Elliot handelt es sich bei Push um eine datengesteuerte FRP-Bewertung, und Pull bezieht sich auf eine sogenannte "bedarfsgesteuerte" Bewertung. Der Autor empfiehlt Pull, da Push zwischen den Dateneingaben zum Leerlauf neigt. Hier ist der springende Punkt : Push-Pull kombiniert und gleicht diese Verhaltensweisen aus, um die Notwendigkeit der Neuberechnung von Werten zu minimieren. Es ist einfach; Der Betrieb von FRP mit Push-Pull beschleunigt die Reaktionsfähigkeit. Arrow ist eine andere Technik zur Verwendung abstrakter Typen, um Werte zu verknüpfen und gleichzeitig auszuwerten. Alle diese Konzepte unterscheiden sich grundlegend. Aber nimm mein Wort nicht dafür:
Somit widerspricht Arrow dem Ziel des Push-Pull. Das bedeutet nicht, dass Sie nicht alle auf einmal verwenden können, nur dass es komplex wäre, und es gibt einige Dinge, die Sie ohne abstrakte Pfeiltypen nicht berechnen können.
Ich habe keine wissenschaftlichen Meinungen darüber gefunden, welche Ansätze "der Weg der Zukunft" sind. Beachten Sie nur, dass Pfeile besonders gut mit Gleichzeitigkeit umgehen können. Wenn Sie Pfeile implementieren und Push-Pull verwenden könnten, um Berechnungen zu minimieren, wäre dies der Weg der Zukunft.
Ja, sie sprechen unterschiedliche Zwecke an. Wie gesagt, sie können zusammen formuliert werden, aber es ist schwierig zu implementieren, und selbst wenn es funktioniert, würde es wahrscheinlich die reaktiven Geschwindigkeitsvorteile von Push-Pull zunichte machen.
Das ist subjektiv, aber Reactive und Yampa scheinen die am häufigsten zitierten Sprachbibliotheken für FRP zu sein. Ich würde sagen, Reactive von Conal Elliott hat tiefe Wurzeln und Yampa ist ebenfalls etabliert. Andere Projekte wie Netwire entstanden als Ersatz, aber es könnte eine Weile dauern, bis sie die Riesen ersetzen.
Hoffe das hilft! Wie ich bereits sagte, gibt Ihnen das Lesen der Artikel, auf die ich hingewiesen habe, ein besseres Gefühl für die semantische Distanz zwischen Pfeil, Drücken und Ziehen.
quelle