Was ist eine Datenfluss-Programmiersprache? Warum es benutzen? Und gibt es irgendwelche Vorteile?
Was ist eine Datenfluss-Programmiersprache? Warum es benutzen? Und gibt es irgendwelche Vorteile?
Antworten:
In einer Kontrollflusssprache verfügen Sie über einen Befehlsstrom, der externe Daten verarbeitet. Bedingte Ausführung, Sprünge und Prozeduraufrufe ändern den auszuführenden Befehlsstrom. Dies könnte als Befehl angesehen werden, der durch Daten fließt (zum Beispiel arbeiten Befehle mit Registern, die durch Befehle mit Daten geladen werden - die Daten sind statisch, es sei denn, der Befehlsstrom verschiebt sie). Eine Kontrollfluss "if" -Anweisung springt zum richtigen Zweig im Befehlsstrom, aber die Daten werden nicht verschoben.
In einer Datenflusssprache verfügen Sie über einen Datenstrom, der von Anweisung zu Anweisung zur Verarbeitung übergeben wird. Bedingte Ausführung, Sprünge und Prozeduraufrufe leiten die Daten an verschiedene Anweisungen weiter. Dies könnte als Daten angesehen werden, die durch ansonsten statische Anweisungen fließen, z. B. wie elektrische Signale durch Stromkreise fließen oder Wasser durch Rohre fließt. Eine Datenfluss "if" -Anweisung würde die Daten an den richtigen Zweig weiterleiten.
Einige Beispiele für Datenflussfunktionen und -sprachen:
Textsprachen
Visuelle Sprachen
Produkte, die eine visuelle Datenflusssprache einbetten:
Datenfluss-Programmiersprachen sind solche, die sich auf den Status des Programms konzentrieren und dazu führen, dass Operationen entsprechend jeder Änderung des Status ausgeführt werden. Datenfluss-Programmiersprachen sind von Natur aus parallel, da die Operationen auf Eingaben beruhen, die bei Erfüllung die Ausführung der Operation bewirken. Dies bedeutet, dass im Gegensatz zu einem normalen Programm, bei dem auf eine Operation die nächste folgt, in einem Datenflussprogramm Operationen ausgeführt werden, solange die Eingaben erfüllt sind und daher keine festgelegte Reihenfolge vorliegt.
Häufig verwenden Programmiersprachen für den Datenfluss eine große Hashtabelle, in der die Schlüssel die Daten des Programms und die Werte der Tabelle Zeiger auf die Operationen des Programms sind. Dies erleichtert das Erstellen von Multicore-Programmen in einer Datenfluss-Programmiersprache, da für jeden Kern nur die Hashtabelle erforderlich ist.
Ein gängiges Beispiel für eine Datenflussprogrammiersprache ist ein Tabellenkalkulationsprogramm mit Datenspalten, die von anderen Datenspalten beeinflusst werden. Sollten sich die Daten in einer Spalte ändern, ändern sich wahrscheinlich auch andere Daten in den anderen Spalten. Obwohl das Tabellenkalkulationsprogramm das häufigste Beispiel für eine Datenfluss-Programmiersprache ist, sind die meisten von ihnen grafische Sprachen.
Eine Art der Datenflussprogrammierung ist die reaktive Programmierung . Wenn dieser Programmierstil in einer funktionalen Sprache verwendet wird, spricht man von funktionaler reaktiver Programmierung . Ein Beispiel für eine funktionale reaktive Programmiersprache für das Web ist Flapjax .
Außerdem ist anic eine Datenflusssprache, die kürzlich in den Hacker News diskutiert wurde .
Ein anderes Beispiel ist Martlet aus Oxford.
Datenfluss-Programmiersprachen schlagen vor, einige lokale Verhaltensweisen in sogenannten " Akteuren " zu isolieren , die parallel laufen und Daten über Punkt-zu-Punkt-Kanäle austauschen sollen. Im Gegensatz zum Von Neumann-Computermodell gibt es keine Vorstellung von zentralem Speicher (sowohl für Code als auch für Daten) .
Diese Akteure verbrauchen Daten-Token für ihre Eingaben und erzeugen neue Daten für ihre Ausgaben.
Diese Definition legt nicht die Mittel fest, um dies in der Praxis durchzuführen. Die Produktion / der Verbrauch von Daten muss jedoch sorgfältig analysiert werden: Wenn beispielsweise ein Akteur B nicht mit der gleichen Geschwindigkeit wie der Akteur A verbraucht, der die Daten erzeugt, ist ein potenziell unbegrenzter Speicher (FIFO) zwischen ihnen erforderlich . Viele andere Probleme können wie Deadlocks auftreten .
In vielen Fällen wird diese Analyse fehlschlagen, weil die Verschachtelung der internen Verhaltensweisen nicht möglich ist (außerhalb der Reichweite der heutigen formalen Methoden).
Trotzdem bleiben Datenfluss-Programmiersprachen in vielen Bereichen attraktiv :
Excel (und andere Tabellenkalkulationen) sind im Wesentlichen Datenflusssprachen. Datenflusssprachen sind funktionalen Programmiersprachen sehr ähnlich, mit der Ausnahme, dass die Werte an den Blättern des gesamten Programmdiagramms überhaupt keine Werte sind, sondern Variablen (oder Wertströme), sodass sich die Änderungen beim Ändern kräuseln und im Diagramm fließen .
Es ist eigentlich ein ziemlich altes Konzept - in den 1970er Jahren gab es sogar eine Sprache + Maschine, die für eine effiziente Programmierung und Ausführung von Datenflüssen gebaut wurde ( Manchester Dataflow Machine ).
Das Tolle daran ist die Dualität zu faulen funktionalen Sprachen wie Haskell. Wenn Ihre Verarbeitungsschritte rein funktional sind und Sie über genügend Verarbeitungseinheiten verfügen, um sie auszuwerten und Ergebnisse weiterzugeben, erhalten Sie daher kostenlos maximale Parallelität - automatisch und ohne Programmieraufwand!
Es gibt bestimmte Bereiche, in denen die Datenflussprogrammierung viel sinnvoller ist. Echtzeitmedien sind ein Beispiel, und zwei weit verbreitete Programmierumgebungen für grafische Datenflüsse, Pure Data und Max / MSP, konzentrieren sich beide auf die Echtzeit-Medienprogrammierung. Ich nehme an, dass ihre visuelle Natur auch gut zur Datenflussprogrammierung passt.
Sie können Cameleon ausprobieren : www.shinoe.org/cameleon, das einfach zu bedienen zu sein scheint. Es ist eine grafische Sprache für die funktionale Programmierung, die einen Daten- (Arbeits-) Flow-Ansatz verfolgt.
Es ist in C ++ geschrieben, kann aber jede Art von lokalen oder entfernten Programmen aufrufen, die in einer beliebigen Programmiersprache geschrieben sind.
Es hat einen mehrskaligen Ansatz und scheint vollständig zu sein (dies ist eine Petri- Netzerweiterung).