nevalang / neva

🌊 Dataflow programming language with static types and implicit parallelism. Compiles to native code and Go
https://nevalang.org
MIT License
91 stars 7 forks source link

DOT: Add Graphviz renderer backend #540

Closed Catya3 closed 5 months ago

Catya3 commented 5 months ago

Allows easy visualization of IR

Example:

$ go run ../cmd/neva/ build --target dot 2_hello_world/5_with_implicit_any
$ cat program.dot
digraph G {
   subgraph cluster_0 {
     label = "";
     "in:start" [label = "start";];
     "out:stop" [label = "stop";];
     subgraph cluster_1 {
       label = "virtual_emitter_23";
       "virtual_emitter_23:msg" [label = "msg";];
     }
     subgraph cluster_2 {
       label = "virtual_blocker_14";
       "virtual_blocker_14:data" [label = "data";];
       "virtual_blocker_14:data" [label = "data";];
       "virtual_blocker_14:sig" [label = "sig";];
     }
     subgraph cluster_3 {
       label = "printer";
       "printer:data" [label = "data";];
       "printer:sig" [label = "sig";];
     }
   }
  "virtual_emitter_23:msg" -> "virtual_blocker_14:data";
  "virtual_blocker_14:data" -> "printer:data";
  "in:start" -> "virtual_blocker_14:sig";
  "printer:sig" -> "out:stop";
}

Visualizing the graph:

Consider using a VSCode plugin to preview the DOT graph or using an online tool such as https://dreampuf.github.io/GraphvizOnline/ (example)