Differential
moonlight-differential
Incremental computation asks a smaller question than recomputation: when an input changes by Δx, what changes in Q(x)? This flower is a keyed join. Two relations feed the circuit, their differences travel inward on support filaments, and the central petals materialize the new view.
The current state is observed.
A change is inserted or retracted.
Only affected parts are computed.
The view is updated without rebuilding.
“Only six petals answer—even though the whole view contains thirty-four.”
|Q(x)| = 34 · |ΔQ| = 6
The same bloom. Less fire.
Both paths finish at the same thirty-four-row view. Recompute relights every support path; the derivative carries only the disturbance. Equality is checked on the weighted rows before either panel is allowed to exist.
Whole-program recomputation revisits the complete support graph.
Incremental maintenance carries only the disturbance that can reach the result.
Nothing crosses the boundary.
The same input port receives an insertion and its retraction in one batch. Signed support collapses to zero before the join runs; the sparks meet at the rim, and the bloom remains untouched.
+δ + −δ = 0zero emitted rowsThe referee is not a straw figure.
Feldera's Rust dbsp crate is the reference. Canonical serialized outputs were diffed byte-for-byte before timing. Moonlight's dense Haskell path wins these pinned single-worker traces; this remains a narrow kernel result, not a pantomime victory over Feldera's SQL platform.



