ecto という名前のフレームワークを最近見つけました。
このフレームワークでは、基本コンポーネント "plasm" が、ecto有向非巡回グラフです。ectoでは、プラズマはectoスケジューラーで操作できます。
このメカニズムの利点は何ですか?また、DAGの概念を他のどのような状況で活用できますか?
良い質問です
EDIT:
良いリソース:
答えは、プログラミングとはほとんど関係がないということです。それは問題解決と関係があります。
リンクリストが特定のクラスの問題に使用されるデータ構造であるように、グラフは特定の関係を表すのに役立ちます。リンクされたリスト、ツリー、グラフ、およびその他の抽象的な構造は、それらをコードで実装できるという点でプログラミングにのみ関連しています。それらは抽象化のより高いレベルで存在します。それはプログラミングではなく、問題の解決にデータ構造を適用することです。
それでもプログラミングとの関係が必要な場合は、次の点を考慮してください。
他の人々はDAGをデータに適用しましたが、私はそれが少なくともコードに適用可能であると考えています(そうでない場合でも)。 Mahbubur R Aamanがこれについて言及しているので、実際には、これはそれ自体での完全な回答というよりは、彼の回答への補遺です。
これは、命令型コンピュータプログラムよりも発生しますこれは無限ループがありません(@AndresFに感謝します)は有向非巡回グラフ(DAG)です。つまり、コードの実行の可能なパスが方向付けられ(最初にこれ、次にそれ)、非循環(無限ループを形成しない)であることを意味します。重要なコードのパスがリストやツリーほど単純ではないため、これらはグラフです。
XSLTで4年間働いたことがあります。なぜそれが優れた汎用プログラミング言語ではなかったのかを説明するのに大変な時間を費やしましたが、DAGがその理由です。具体的には、XSLTはデータ駆動型言語です。関数を定義します(機能プログラミングの意味でそうです)が、必ずしもこれらの関数をコードから呼び出す必要はありません。むしろ、XSLTは、入力XMLドキュメントのノードの選択と反復の組み合わせをセットアップします。これにより、入力データの構造によって、呼び出される関数と呼び出される順序が決まります。
これは非常に興味深く、非常にクールで、午前2時30分にテストしていないデータ条件がプログラムで発生し、ウェイクアップして修正する必要がありました。データにDAGを定義させると、DAGの定義がすべての可能な入力条件になります。これは、重要なビジネスアプリケーションの場合、計算不可能です。彼らは想像を絶する。
最初は、関数型プログラミングはDAGではないかもしれないと思っていました。実行順序が時々明確でないか、プログラマーによって考えられていないためです。しかし、関数型プログラムは依存関係を定義します。実際、関数型プログラミングの宣言的な性質は、実行順序を指定せずに、依存関係(a ^ 2 = b ^ 2 + c ^ 2)のみを定義するものと考えることができます( 'b'と 'c'のどちらが最初に平方されるかは関係ありません) 、それらが一緒に追加される前に両方が二乗される限り)。
しかし、関数型プログラミングは、詳細なレベルでの操作の順序について意図的にあいまいな場合がありますが、依存関係については非常に明確です。これらは、同時実行性に非常に適しているまさにその機能です。いずれの場合でも、コードを通るパスのグラフがまだあり、そのグラフはまだ指示されている(依存関係は依存タスクの前に評価する必要がある)ので、DAGもそこに適用されると思います。
いい質問-投稿してくれてありがとう!
現在、DAGはプログラミングにおいて過小評価されています。歴史的に、開発に関連する多くのものがツリーと階層で作成されました。ボックス内で何かを移動すると、私たちの脳が複雑なものを管理しやすくするために便利だからです。しかし、イベントを見て、それらが他のイベントや状態にどのように依存しているかを見ると、DAGを取得します。これは、私たちの生活やプログラムのすべてが過去のものに依存し、将来のものには依存しないため、完全に「非循環」になるためです。 DAGコンセプトに適用される関係。これが開発で明示的に使用されることはめったにありませんが、これを念頭に置くと、物事をよりよく理解するのに役立ちます
EctoでのPlasmの利点は何でしょうか。
DAGを使用すると、特定のタスクを他のタスクより先に実行する必要があるという制約のあるタスクのコレクションをシーケンスでモデル化できます。 Ectoは処理フレームワークであり、DAGを使用して処理グラフをモデル化し、グラフが順序付けされた同期実行を行うようにします。 PlasminEctoはDAGであり、Schedulerがそれを操作します。
他にどのような状況でDAGの概念を活用できますか?
実際の例として、私たちのソフトウェアはIDEに似ています。ここで、エンドユーザーは画像に対して実行する一連の操作を定義できます(マシンビジョン検査)。これらの検査は、その他の検査または検査に依存する検査があります。これはすべてエンドユーザーが構成できるため、設計時に並列処理の最適化を行うことはできません。これらの検査と依存関係をDAGとして表すことにより、検査全体の並列処理を最適化できます。実行時のパフォーマンスを最大化します。