DGE: Distributed Graph Execution

What's this?

Conceptually:

Concretely:

An example

The following graph corresponds to the computation (2 * x) * (x * x):

It is generated with code in dge-example/src/main_generate_code.rs:

```rust use dge_gen;

fn main() { let mut graph = dgegen::Graph::new( "dgeexample::behaviour::acceptfailure::acceptfailure", "dgeexample::behaviour::error::Error", ); let start = graph.start("start"); let fanout = graph.fanout( start, "input", "dgeexample::behaviour::data::Integer", "duplicate_input", 10 );

// ... some code omitted for brevity ...

graph
    .generate(
        "dge-example/src/generated",
        "dge_example::behaviour::get_rmq_uri",
        "dge_example_work_exchange",
        "dge_example_retry_exchange",
        "retry_",
        "",
    )
    .unwrap()

} ```

When the above code is compiled and run, a main.rs will be generated, when the main.rs is compiled, you get an executable with these subcommands:

```shell dge-example

USAGE: example

FLAGS: -h, --help Prints help information -V, --version Prints version information

SUBCOMMANDS: double # when executed, it creates an OS process that doubles the input duplicate-input # send x to node double and square init-exchanges-and-queues # initialize necessary RabbitMQ entities multiply # creates a node that does multiplication square # creates a node that calculates the square ```

These source files are generated for the above graph:

dge-example/src/generated/ ├── double.rs ├── duplicate_input.rs ├── graph.dot ├── graph.svg ├── init_exchanges_and_queues.rs ├── main.rs ├── multiply.rs └── square.rs