Tue Nov 20 12:23:36 EST 2018

build systems, and what is "push" anyway?

How to represent the idea that some dependencies get lost or are
simply not encoded?

Typically, this is at the library level, or any time there is some
kind of recursive build.

The solution is to take an _imperative_ viewpoint.  While building in
theory is a _functional_ endeavor, in practice it is not and there is
simply no easy way around it.

So if there is no functional implementation, then at least an
idempotent implementation (a "push" implementation) is workable.

To go deeper: there is _always_ a push part to a build system, so even
just walking the dependency graph can be considered that.  The
difference between a fast graph walk, and actually executing a fast
idempotent build is quite moot.