Internals
Maker
uses the global Dict Maker.TARGETS
to store active tasks. Some state is also stored in a JLD file ".maker-cache.jld" in the active directory. This stores hashes for functions and variables along with timestamps. This allows Maker
to be used between sessions.
Note that tasks are defined globally, so they may be defined in modules or in the Main
module. make
works fine in a module for tasks defined in that module. You cannot run all actions in Main
that are defined in another module (particularly for variable tasks).
The hashing for functions and variables is not likely to stay the same between Julia versions. It's also different for 32- and 64-bit versions. It's still up in the air how to deal with this. Also, hashing for v0.4 anonymous functions has file information removed.
Timestamps are stored for all tasks, even file tasks. On some filesystems, mtime
only has an accuracy of one second, and this can cause inaccuracies with variable timestamps.
Note that parallel operation may be tricky. One may have to be careful using @everywhere
and friends with Maker
. Each process might try to update dependencies at the same time, leading to race conditions. Another topic to think about is how to take advantage of parallel operations (or threads when they come to Julia).