J'ai récemment trouvé un framework nommé ecto .
Dans ce cadre, un composant de base nommé "plasm" , qui est le graphe acyclique dirigé ecto.
Je me demande quel est l'avantage de ce mécanisme et dans quelles autres situations pouvons-nous exploiter le concept de DAG?
algorithms
data-structures
frameworks
graph
Po-Jen Lai
la source
la source
Réponses:
Bonne question.
MODIFIER :
Bonnes ressources:
la source
La réponse est que cela n’a pas grand-chose à voir avec la programmation. Cela concerne la résolution de problèmes.
Tout comme les listes chaînées sont des structures de données utilisées pour certaines classes de problèmes, les graphiques sont utiles pour représenter certaines relations. Les listes chaînées, les arbres, les graphiques et autres structures abstraites ne sont connectés à la programmation que dans le sens où vous pouvez les implémenter dans le code. Ils existent à un niveau d'abstraction supérieur. Il ne s’agit pas de programmation, mais d’application de structures de données à la résolution de problèmes.
Si vous voulez encore une relation avec la programmation, veuillez considérer les points suivants:
la source
D'autres personnes ont appliqué DAG aux données, mais je pense que c'est au moins aussi applicable (sinon plus) au code. Mahbubur R Aaman mentionne cela, donc c'est vraiment plus un additif à sa réponse qu'une réponse complète en elle-même.
Il me semble que tout programme informatique impératif est dépourvu de boucles infinies (grâce à @AndresF.) Est un graphe acyclique dirigé (DAG). Ce qui signifie que les chemins possibles d'exécution du code sont dirigés (d'abord ceci, ensuite cela) et acycliques (ne formant pas de boucles infinies). Il s’agit d’un graphe car le chemin d’un code significatif est rarement aussi simple qu’une liste ou un arbre.
J'ai travaillé chez XSLT pendant peut-être 4 ans. J'ai eu beaucoup de difficulté à expliquer pourquoi ce n'était pas un bon langage de programmation à usage général, mais DAG en est la raison. Plus précisément, XSLT est un langage piloté par les données. Vous définissez des fonctions (oui, au sens de la programmation fonctionnelle) mais vous n'appelez pas nécessairement ces fonctions à partir de votre code. XSLT définit plutôt une combinaison de sélection et d'itération des nœuds d'un document XML d'entrée. Cela permet à la structure des données d'entrée de déterminer quelles fonctions sont appelées et dans quel ordre.
C'était très intéressant et très cool jusqu'à ce que votre programme rencontre une condition de données que vous n'avez pas testée à 02h30 et que vous deviez vous réveiller pour la réparer. Lorsque vous laissez les données définir le DAG, la définition du DAG devient alors toutes les conditions d'entrée possibles, qui sont inestimables pour toute application métier non triviale. ils sont inimaginables.
Au début, je pensais que la programmation fonctionnelle n'était peut-être pas un DAG car l'ordre d'exécution n'est parfois pas clair ni même pensé par le programmeur. Mais un programme fonctionnel définit des dépendances. En fait, le caractère déclaratif de la programmation fonctionnelle pourrait être considéré comme ne définissant que les dépendances (a ^ 2 = b ^ 2 + c ^ 2) sans spécifier l'ordre d'exécution (peu importe que «b» ou «c» soit carré au début , tant qu’ils sont tous les deux carrés avant d’être additionnés).
Mais si la programmation fonctionnelle peut être délibérément vague en ce qui concerne l’ordre des opérations à un niveau détaillé, elle est extrêmement claire en ce qui concerne les dépendances. Ce sont les caractéristiques mêmes qui le rendent si sujet à la concurrence. Dans tous les cas, il y a toujours un graphe de chemins dans le code, et ce graphe est toujours dirigé (les dépendances doivent être évaluées avant les tâches dépendantes), donc je pense que DAG s'applique également dans ce cas.
Belle question - merci de poster!
la source
while (true) { print("hi"); }
? Peut-être souhaitez-vous exclure les programmes sans terminaison?Actuellement, DAG est sous-estimé dans la programmation. Historiquement, beaucoup de choses liées au développement ont été faites avec des arbres et des hiérarchies, car déplacer quelque chose dans une boîte est pratique pour que notre cerveau facilite la gestion de choses complexes. Mais si vous regardez les événements et la manière dont ils dépendent d'autres événements et états, vous obtiendrez le DAG, car tout dans notre vie et dans le programme peut dépendre de tout ce qui se trouve dans le passé mais pas dans le futur, de sorte que vous deviendrez parfaitement "acyclique". relations applicables au concept de DAG. Bien que cela soit rarement utilisé explicitement dans le développement, le garder à l’esprit aiderait à mieux comprendre les choses.
la source
DAG peut être utilisé pour modéliser une collection de tâches dans une séquence avec la contrainte que certaines tâches doivent être effectuées avant les autres. Ecto est un framework de traitement qui utilise DAG pour modéliser les graphes de traitement de manière à ce qu'ils exécutent une exécution synchrone ordonnée. Le plasmide à Ecto est le DAG et le planificateur fonctionne dessus.
la source
En tant qu'exemple concret, notre logiciel est similaire à un IDE dans lequel l'utilisateur final peut définir une série d'opérations à effectuer sur une image (inspection par vision industrielle). Ces inspections peuvent être liées à d’autres inspections ou peuvent en dépendre. Etant donné que tout cela est configurable par l'utilisateur final, nous ne pouvons pas optimiser le traitement en parallèle au moment de la conception. En représentant ces inspections et dépendances en tant que DAG, nous pouvons optimiser le parallélisme de l'inspection globale pour obtenir des performances maximales au moment de l'exécution.
la source
Juste pour un autre exemple, les règles de gestion de la mémoire dans les applications Cocoa sont définies de manière à ce que toutes les références fortes forment un graphe acyclique dirigé, ce qui permet de garantir l’absence de fuites.
la source
Ajouter une autre réponse car vous n'avez pas vu de référence pour construire des systèmes tels
make
que ceux qui utilisent DAG pour rechercher les dépendances pour la construction.Plus de détails ici
la source
make