[ANN] Ghost.jl - the code tracer

SymbolicTracing looks interesting and the two packages certainly have similar approaches to tracing. A few differences I see though (based on the README):

  • SymbolicTracing works only with abstract type while Ghost can as well trace through concrete types and struct fields
  • SymbolicTracing doesn’t seem to handle control flow; Ghost can follow branches, including conditions and loops
  • Loops in Ghost can also be traced as a separate operation
  • I’m not sure it’s possible to include operations out of the dependency graph in SymbolicTracing (e.g. println() statement); in Ghost you can have both - a pure computational graph and a graph with side effects
  • In general, Symbolic* packages seem to be more oriented to pure symbolic graphs, while Ghost’s Tape is an abstraction for any kind of computation
3 Likes