Data::Hopen::G - Namespace for graph-related items in hopen


Almost everything graph-related in hopen lives under Data::Hopen::G. This includes nodes, edges, and graphs (specifically, directed acyclic graphs, DAGs).

Classes are (all under Data::Hopen::G):

    Entity - something in the graph
        Runnable - something that has a run() method and need/want namesets
                    (TODO should this be a Role::Tiny role?)
            Link - connection between Nodes
            Node - abstract graph node
                Op - abstract operation
                    Goal - a node that just gives a name to a set of operations
                    PassthroughOp - no-op concrete operation
                    DAG - the graph

Specific use cases of the graph are not under ...::G, such as tools used in the hopen build system (App::hopen).



An operation. Operations can, e.g., transform their inputs or invoke a visitor routine based on their inputs. Operations can output values representing the visitor action they took, or that will later be used by the visitor or downstream nodes.

A connection between operations. Edges are not provided to a visitor Instead, they have the opportunity to transform their inputs to outputs, possibly with reference to the environment.


A graph of operations and edges. Every relationship between operations and edges is expressed in a DAG. A DAG has zero or more goals (Data::Hopen::G::Goal) that represent named activities expressed in the DAG.


"run" in Data::Hopen::G::DAG can take a visitor parameter. The visitor should be an instance of a concrete subclass of Data::Hopen::Visitor.