Weder bei Schauspielern noch bei FRP geht es um Streaming. Akteure unterstützen nicht einmal die externe Konfiguration eines Ausgabestreams.
FRP zeichnet sich stark durch die Modellierung von Signalen und Ereignissen auf einer linearen Zeitachse aus, wodurch das FRP-Verhalten deterministisch komponiert werden kann. Schauspieler sind stark von der Verarbeitung von Nachrichten in nicht deterministischer Reihenfolge geprägt und haben kaum kompositorische Eigenschaften (dh Sie können eine Anordnung von zwei Schauspielern nicht als größeren Schauspieler behandeln).
Wenn Sie Ähnlichkeiten suchen, haben beide Akteure und FRP eine enge Beziehung zur Lambda-Rechnung. Beide können Systeme modellieren, die auf menschliche Eingaben reagieren. Beide unterstützen die Modellierung des internen (lokalen) Zustands.
FRP unterstützt den lokalen Zustand durch Integrale oder Akkumulatoren (Fold over Time), während das Akteurmodell den Zustand unterstützt, indem jeder Akteur sein Verhalten für die nächste Nachricht als Antwort auf die aktuelle festlegen kann. Diese durchgängige Unterstützung des lokalen Status macht sowohl FRP als auch Actors für die Live-Programmierung (oder die Laufzeitaktualisierung des Programmcodes) unzureichend. es wird zu leicht, einen wichtigen Zustand zu verlieren.
In Bezug auf Anwendungsdomänen:
Das Actors-Modell eignet sich gut für offene Systeme, in denen wir möglicherweise Akteure zur Laufzeit installieren oder warten möchten. Das Actors-Modell ist auch für verteilte Systeme wenig geeignet, da die nicht deterministische Anordnung von Nachrichten eine konforme Implementierung erleichtern kann. (Der Grund, warum Akteure für verteilte Systeme nicht besser geeignet sind, ist, dass es angesichts von Störungen ziemlich schwierig ist, sicherzustellen, dass eine Nachricht "einmal und nur einmal" eintrifft, und dass Akteure in der Regel auch verteilte GC benötigen, was schmerzhaft ist.)
FRP eignet sich gut für geschlossene Systeme, die über einen längeren Zeitraum betrieben werden - z. B. Robotersteuerungen, Musikprogrammierung, Computerspielzeug. Der Determinismus und die kompositorischen Merkmale machen die Arbeit mit FRP angenehmer als mit Akteuren, zumindest in den Fällen, in denen FRP eine Lösung direkt modellieren kann. Das Integrieren von FRP mit Effekten (elegant, ohne das Modell mit Unreinheiten zu hacken) hat sich als schwierig erwiesen. In letzter Zeit wurde an effektiven FRP über "Wurmlöcher" gearbeitet - effektiv, einzigartiger oder linearer typisierter Zugriff auf Ressourcen.
Es gibt andere Modelle, die irgendwo zwischen FRP und Actors liegen.
Flow Based Programming (FBP), entwickelt von John Paul Morrison, unterstützt das Streaming von Nachrichten wirklich.
Time Warp-Protokolle (oder die neueren Arbeiten zu Lightweight Time Warp (LTW)) platzieren akteursähnliche Nachrichten auf einer logischen Zeitachse, um eine kontrollierte und kompositorische Vorstellung von der Weitergabe von Nachrichten zu ermöglichen. Time Warp wird häufig für große parallele und verteilte Systeme verwendet, z. B. für das wissenschaftliche Rechnen. Der ursprüngliche Zeitsprung war für interaktive Simulationen (Reaktion auf menschliche Eingaben) ungeeignet, und LTW ist nur bedingt geeignet.
Ich entwickle Reactive Demand Programming (RDP), das eine reaktive, kompositionelle, FRP-ähnliche Manipulation und Verarbeitung von Signalen in offenen und verteilten Systemen ermöglicht und den lokalen Zustand beseitigt. RDP wird erreicht, indem Nebenwirkungen durch Signale im Laufe der Zeit auf einen kommutativen, idempotenten Einfluss auf den Ressourcenzustand beschränkt werden. RDP erfordert ein Umdenken der Ressourcen- und Zustandsmodelle.
Ich möchte darauf hinweisen, wie sie sich aus praktischer Sicht unterscheiden:
1) Akteure senden Nachrichten an andere Akteure, diese Nachrichtenübergabe wird explizit und zwingend beschrieben .
Beispielsweise:
send msg to Actor137
.2) In FRP wird der Datenfluss deklarativ beschrieben :
Beispielsweise:
Cell134=Cell185+Cell42
.Die Nachrichtenübergabe wird vom FRP-Framework verwaltet und Sie müssen nicht "manuell" beschreiben, wie Nachrichten von einer Zelle (ähnlich wie bei Actor, Encapsulated State, aka Behavior) an eine andere übergeben werden.
Mit anderen Worten:
Das Wesen der funktionalen reaktiven Programmierung besteht darin, das dynamische Verhalten eines Wertes zum Zeitpunkt der Deklaration vollständig zu spezifizieren . So werden alle Abhängigkeiten von
Cell134
am Deklarationspunkt definiert.Dies gilt nicht für das Darstellermodell. Akteure, die das Verhalten eines Akteurs beeinflussen,
A
werden nicht an derselben Stelle im Quellcode definiert, an der der AkteurA
definiert ist.Kürzlich ist mir aufgefallen, dass es eine interessante Mischung zwischen den beiden gibt: Akka-Streams, bei denen der Datenfluss deklarativ beschrieben wird, aber mithilfe von Akteuren implementiert wird.
Ein weiterer Unterschied ist: Schauspieler sein async neigen , während FRP zu werden synchron dazu neigt , (oft Glitch frei).
quelle