web-dev-qa-db-fra.com

Langages de programmation Dataflow

Qu'est-ce qu'un langage de programmation de flux de données? Pourquoi l'utiliser? Et y a-t-il des avantages à cela?

73
Anton

Dans un langage de flux de contrôle, vous disposez d'un flux d'instructions qui opèrent sur des données externes. L'exécution conditionnelle, les sauts et les appels de procédure modifient le flux d'instructions à exécuter. Cela pourrait être vu comme des instructions circulant dans les données (par exemple, les instructions fonctionnent sur des registres qui sont chargés de données par des instructions - les données sont statiques à moins que le flux d'instructions ne les déplace). Une instruction de flux de contrôle "if" passe à la branche correcte dans le flux d'instructions, mais les données ne sont pas déplacées.

Dans un langage de flux de données, vous disposez d'un flux de données qui est transmis d'instruction en instruction à traiter. L'exécution conditionnelle, les sauts et les appels de procédure acheminent les données vers différentes instructions. Cela pourrait être vu comme des données qui transitent par des instructions autrement statiques comme la façon dont les signaux électriques circulent dans les circuits ou l'eau circule dans les tuyaux. Une instruction de flux de données "if" acheminerait les données vers la branche appropriée.

Quelques exemples de fonctionnalités de flux de données et de langues:

Langues textuelles

Langages visuels

Produits intégrant un langage de flux de données visuel:

102
Dan

Les langages de programmation de flux de données sont ceux qui se concentrent sur l'état du programme et provoquent des opérations en fonction de tout changement d'état. Les langages de programmation de flux de données sont intrinsèquement parallèles, car les opérations reposent sur des entrées qui, une fois rencontrées, entraîneront l'exécution de l'opération. Cela signifie que contrairement à un programme normal où une opération est suivie par l'opération suivante, dans un programme de flux de données, les opérations s'exécuteront tant que les entrées sont respectées et qu'il n'y a donc pas d'ordre défini.

Souvent, les langages de programmation de flux de données utilisent une grande table de hachage où les clés sont les données du programme et les valeurs de la table sont des pointeurs vers les opérations du programme. Cela rend les programmes multicœurs plus faciles à créer dans un langage de programmation de flux de données, car chaque cœur n'aurait besoin que de la table de hachage pour fonctionner.

Un exemple courant d'un langage de programmation de flux de données est un programme de feuille de calcul qui a des colonnes de données qui sont affectées par d'autres colonnes de données. Si les données d'une colonne changent, les autres données des autres colonnes changeront probablement avec elle. Bien que le programme de feuille de calcul soit l'exemple le plus courant d'un langage de programmation de flux de données, la plupart d'entre eux ont tendance à être des langages graphiques.

27
Anton

Un type de programmation de flux de données est programmation réactive . Lorsque ce style de programmation est utilisé dans un langage fonctionnel, il s'appelle programmation réactive fonctionnelle . Un exemple de langage de programmation réactif fonctionnel pour le Web est Flapjax .

En outre, anic est un langage de flux de données récemment discuté sur Hacker News.

Un autre exemple est Martlet d'Oxford.

17
Jeff Hammerbacher

Les langages de programmation de flux de données proposent d'isoler certains comportements locaux dans les acteurs dits " ", qui sont censés fonctionner en parallèle et échanger des données via des canaux point à point. Il n'y a pas de notion de mémoire centrale (à la fois pour le code et les données) contrairement au modèle d'ordinateurs Von Neumann .

Ces acteurs consomment jetons de données sur leurs entrées et produisent de nouvelles données sur leurs les sorties.

Cette définition n'impose pas les moyens de gérer cela en pratique. Cependant, la production/consommation de données doit être analysée avec soin: par exemple, si un acteur B ne consomme pas à la même vitesse que l'acteur A qui produit les données, une mémoire potentiellement illimitée (FIFO) est nécessaire entre eux . De nombreux autres problèmes peuvent survenir comme blocages .

Dans de nombreux cas, cette analyse échouera car l'entrelacement des comportements internes est intraitable (hors de portée des méthodes formelles actuelles).

Malgré cela, les langages de programmation de flux de données restent attractifs dans de nombreux domaines :

  • par exemple pour définir des modèles de référence pour l'encodage vidéo: un programme C pur ne fera pas le travail car il suppose que tout fonctionne comme une séquence d'opérations, ce qui n'est pas vrai dans les ordinateurs (pipeline, VLIW, mutlicores et VLSI) . Peut-être pourriez-vous y jeter un œil: récente thèse de doctorat . Le langage de flux de données CAL est proposé comme langage unificateur pour la référence des encodeurs/décodeurs vidéo de prochaine génération.
  • Mission critique où la sécurité est requise: si vous ajoutez des hypothèses fortes sur la production/consommation de données, vous obtenez un langage à fort potentiel en termes de génération de code, de preuves, etc. (voir langages synchrones )
9
JCLL

Excel (et autres feuilles de calcul) sont essentiellement des langages de flux de données. Les langages de flux de données ressemblent beaucoup aux langages de programmation fonctionnels, sauf que les valeurs à la sortie de l'ensemble du graphique du programme ne sont pas du tout des valeurs, mais des variables (ou des flux de valeurs), de sorte que lorsqu'elles changent, les modifications ondulent et remontent le graphique .

6
Barry Kelly

Mozart prend en charge la synchronisation de type flux de données et possède certaines applications commerciales. Vous pouvez également affirmer que make est un langage de programmation de flux de données.

5
JesperE

C'est en fait un concept assez ancien - dans les années 1970, il y avait même un langage + machine construit pour une programmation et une exécution efficaces du flux de données ( Manchester DataflowMachine ).

La grande chose à ce sujet est sa dualité avec les langages fonctionnels paresseux comme Haskell. Par conséquent, si vos étapes de traitement sont purement fonctionnelles et que vous disposez de suffisamment d'unités de traitement pour les évaluer et transmettre les résultats, vous bénéficiez d'une parallélisation maximale gratuite - automatiquement et sans aucun effort de programmation!

2
blabla999

De nombreux outils ETL se trouvent également dans ce domaine. Les tâches de flux de données dans MS SSIS en sont un bon exemple. Outil graphique dans ce cas.

2
Teun D

Vous pouvez essayer Cameleon : www.shinoe.org/cameleon qui semble simple à utiliser. C'est un langage graphique pour la programmation fonctionnelle qui a une approche de flux de données (travail).

Il est écrit en C++, mais il peut appeler n'importe quel type de programme local ou distant écrit dans n'importe quel langage de programmation.

Il a une approche à plusieurs échelles et semble être Turing complet (il s'agit d'une extension Petri net ).

1
Myosis.sh

Il y a certains domaines où la programmation de flux de données est beaucoup plus logique. Les médias en temps réel en sont un exemple, et deux environnements de programmation de flux de données graphiques largement utilisés, Pure Data et Max/MSP, sont tous deux axés sur la programmation des médias en temps réel. Je suppose que leur nature visuelle correspond également bien à la programmation du flux de données.

1