# Better Workflow with source code dependency graphs

**URL:** <https://discourse.julialang.org/t/better-workflow-with-source-code-dependency-graphs/51139>\
**Category:** Package Announcements\
**Created:** [December 2, 2020, 6:37pm UTC](https://discourse.julialang.org/t/better-workflow-with-source-code-dependency-graphs/51139 "2020-12-02T18:37:57Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Volker\_Weissmann](https://avatars.discourse-cdn.com/v4/letter/v/c2a13f/32.png) [@Volker\_Weissmann](https://discourse.julialang.org/u/Volker_Weissmann)\
**Post date:** [December 2, 2020, 6:37pm UTC](https://discourse.julialang.org/t/better-workflow-with-source-code-dependency-graphs/51139/1 "2020-12-02T18:37:57Z")

</div>

I was annoyed that everytime I hit “run all” in my IDE, it re-runs everything, including the parts that did not change.

Therefore I created [SimpleCache.jl](https://gitlab.com/volkerweissmann/SimpleCache.jl). It uses reflection techniques to generate a dependency graph of your source code to only rerun the parts that did change.

It is written incredibly hacky and bad, so don’t look at the source code.

I will register that package soon.

---

<div class="post-metadata">

**Author:** ![sairus7](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/sairus7/32/10816_2.png) [@sairus7](https://discourse.julialang.org/u/sairus7)\
**Post date:** [December 2, 2020, 7:54pm UTC](https://discourse.julialang.org/t/better-workflow-with-source-code-dependency-graphs/51139/2 "2020-12-02T19:54:50Z")

</div>

Something like this?

> **[GitHub - JuliaCollections/Memoize.jl: ＠memoize macro for Julia](https://github.com/JuliaCollections/Memoize.jl)**
>
> ＠memoize macro for Julia. Contribute to JuliaCollections/Memoize.jl development by creating an account on GitHub.

> **[GitHub - marius311/Memoization.jl: Easily and efficiently memoize any...](https://github.com/marius311/Memoization.jl)**
>
> Easily and efficiently memoize any function, closure, or callable object in Julia. - GitHub - marius311/Memoization.jl: Easily and efficiently memoize any function, closure, or callable object in J...

---

<div class="post-metadata">

**Author:** ![Volker\_Weissmann](https://avatars.discourse-cdn.com/v4/letter/v/c2a13f/32.png) [@Volker\_Weissmann](https://discourse.julialang.org/u/Volker_Weissmann)\
**Post date:** [December 2, 2020, 8:26pm UTC](https://discourse.julialang.org/t/better-workflow-with-source-code-dependency-graphs/51139/3 "2020-12-02T20:26:46Z")

</div>

Nope. With my solution, if you change some functions and rerun the program, only functions that have changed or call a changed function will be run again.

`https://github.com/JuliaCollections/Memoize.jl` assumes that the function only depends on its arguments. My solution analyzes the AST to know which functions depend on which lines of code.

---

<div class="post-metadata">

**Author:** ![ffevotte](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ffevotte/32/6587_2.png) [@ffevotte](https://discourse.julialang.org/u/ffevotte)\
**Post date:** [December 4, 2020, 8:24am UTC](https://discourse.julialang.org/t/better-workflow-with-source-code-dependency-graphs/51139/4 "2020-12-04T08:24:24Z")

</div>

I suspect Pluto does the same kind of things to implement its “reactivity”. Maybe you could get in touch with them to see if/how your technical approaches differ, and whether it would be interesting for you to join forces?

---

<div class="post-metadata">

**Author:** ![Volker\_Weissmann](https://avatars.discourse-cdn.com/v4/letter/v/c2a13f/32.png) [@Volker\_Weissmann](https://discourse.julialang.org/u/Volker_Weissmann)\
**Post date:** [December 16, 2020, 2:55pm UTC](https://discourse.julialang.org/t/better-workflow-with-source-code-dependency-graphs/51139/5 "2020-12-16T14:55:41Z")

</div>

I talked with him. Maybe I will use Plutos library in the future.
