Datenfluss-Programmiersprachen [geschlossen]


76

Was ist eine Datenfluss-Programmiersprache? Warum es benutzen? Und gibt es irgendwelche Vorteile?


1
Danke, ich habe gerade etwas Neues gelernt
JoshBerke

Datenflussprogramme könnten im Raum ausgeführt werden (stellen Sie sich die Fabriklinie vor), wo Standard-Controlflow-Programme rechtzeitig ausgeführt werden. Weitere Informationen finden Sie unter: openspl.org/what-is-openspl .
Nemanja Trifunovic

Antworten:


106

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:


Hinzufügen zu der weniger bekannten Liste:
Rindfleisch

eine andere heißt expecco, komplett mit GUI (google und
lade

Was ist ein Beispiel für etwas, das NICHT Datenfluss ist?
Lösen von Rätseln

Die meisten Sprachen sind oben nicht aufgeführt. C ++, Java, Python, COBOL und so ziemlich jede andere zwingende Sprache da draußen, die meisten OO-Sprachen, die meisten funktionalen Sprachen, logische Programmiersprachen wie Prolog usw. usw.

1
Warum erwähnt niemand Unix-Pipelines als häufiges Beispiel für die Datenflussprogrammierung? Sogar Wikipedia erwähnt es nicht. Gibt es etwas, das es disqualifiziert?
Sridhar Sarnobat

27

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.


1
+1, weil Sie geteilt haben, was Sie gelernt haben, seit Sie diese Frage gestellt haben.
Edymtt

2
Vielen Dank. Verständlicher als die akzeptierte Antwort.
Tomékwi

17

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.


1
+1 für die Erwähnung der reaktiven Programmierung.
Jus12

Interessanterweise führte diese Antwort zu einer Diskussion über SO: " stackoverflow.com/questions/30685707/… ". Es kann von der akademischen Definition abhängen, ob reaktive Programmierung und Datenfluss gleich sind. Ich kann zustimmen, dass es "eine Art der Datenflussprogrammierung" ist.
Mihca

9

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 :

  • Zum Beispiel, um Referenzmodelle für die Videokodierung zu definieren: Ein reines C-Programm erledigt den Job nicht, da davon ausgegangen wird, dass alles als eine Folge von Operationen ausgeführt wird, was auf Computern (Pipeline, VLIW, Mutlicores und VLSI) nicht der Fall ist. . Vielleicht könnten Sie sich das ansehen: aktuelle Doktorarbeit . Die CAL-Datenflusssprache wird als einheitliche Sprache für die Referenz von Videocodierern / -decodierern der nächsten Generation vorgeschlagen.
  • Unternehmenskritisch, wenn Sicherheit erforderlich ist: Wenn Sie einige starke Annahmen zur Produktion / zum Verbrauch von Daten hinzufügen, erhalten Sie eine Sprache mit großem Potenzial in Bezug auf Codegenerierung, Proofs usw. (siehe synchrone Sprachen ).

5

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 .


1
Ich stimme nicht zu; Constraint-Solver arbeiten im Allgemeinen, indem sie Optima in Suchräumen entdecken, indem sie Constraints verbreiten. Tabellenkalkulationen geben Werte weiter, keine Einschränkungen.
Barry Kelly

1
Lösen ist eine zusätzliche Funktion, die die meisten Menschen nicht verwenden. Und Bäume sind auch Graphen; Wenn sich zwei Zellen auf dieselbe dritte Zelle beziehen, bilden sie einen Tag und sind kein Baum mehr.
Barry Kelly

4
"Tabellenkalkulationen geben Werte weiter, keine Einschränkungen." Ja, der Wertefluss macht ihn zum "Datenfluss".

5

Mozart unterstützt die datenflussähnliche Synchronisation und verfügt über einige kommerzielle Anwendungen. Sie könnten auch argumentieren, dass make eine Datenfluss-Programmiersprache ist.


Danke, dass du make erwähnt hast. Das hat mich hierher gebracht. Cunieform scheint eine Verallgemeinerung davon zu sein.
Masterxilo

2

Viele ETL-Tools befinden sich ebenfalls in diesem Bereich. Die Datenflussaufgaben in MS SSIS sind ein gutes Beispiel. Grafisches Werkzeug in diesem Fall.


2

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!


1

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.


1

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).


a |> f = fa. Befindet sich dieser Datenfluss in Haskell (er erhält den Durchschnitt einer Liste von Elementen von 1..200)? [1..200] |> map (* 5) |> filter (> 66) |> dup (summe, länge) |> uncurry (div) wobei dup (f1, f2) v = (f1 v, f2 v)
aoeu256
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.