Differential Dataflow for Mere Mortals
github.com
github.com
> The jargon-free version: You write code that manipulates collections using familiar operations like map, join and loop. You run the code on some input and get some output. Then when the input changes, you get changes to the output, much faster than recomputing the whole thing from scratch. (And the outputs will be correct!)
A complete newbie can read those two sentences and get the complete picture.
The name "differential" is not exclusive to gradients of continuous functions.
2. Differential Relational Calculus is an even older theory https://doi.org/10.1109/69.683760 and is is a kind of derivative on Relations using delta-sets. No need for continuous functions. Using this name is fine and describes the problem really well.
3. Dynamic Programming on the other hand does not describe the problem well. It is about re-use of computation but usually not on the side of a changing input.
Edit: Boolean Differential Calculus is from 1959. I don't remember the booleans being continuous.
That paper while prima facie relevant (so I appreciate that you mentioned it!), is about solving the problem of integrity maintenance, that is the only sense in which "differential" or "differentially" is used there, and then only as a matter of informal convenience and not as actively proposing any new terminology.
It does not define any true "differential" of a general computation as Differentiable Programming does in its own context, but only shows how to dynamize the checking of integrity constraints. So, I still maintain that uncritical adoption of such informal terminology, when clearly the proper alternative already exists in the literature, can only bring confusion and should be avoided.
Q(I) = R
And indeed we derive some function D for the differential and are given a set of changes C where
D_Q(I)(C) = R' with Q(I+C)=R+R'
This D is clearly a differential function.
And if you look at the wikipedia entry for dynamic programming https://en.wikipedia.org/wiki/Dynamic_programming and indeed the important sentence "there is a relation between the value of the larger problem and the values of the sub-problems."
In this case here there is no splitting into sub-problems going on. We only have a function (the Query) and we calculate how the result changes when the input changes. If that's not a differential, I don't know what is.
I'd think the project idea is that differential dataflow is too useful a technology to only be understood by a few people. By writing it a second time around, it might be feasible to trade off some of its power for a more lean and accessible implementation.
Mutual references (class A referring to class B and vice versa) are resolved by separating the signature from method implementation (for example) to break cycles.
Edit: Looks like the rustc_mir crate that implements the non-lexical borrow checker uses `polonius_engine` [3] which uses `datafrog` so it's still used by the compiler!
[1] https://github.com/frankmcsherry/blog/blob/master/posts/2018...