⟵ Works

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.

Animated Delta Bloom cycling from the initial joined view through three signed input edits, six output deltas, and the final view
Q(x)initial view

The current state is observed.

Δxsigned change

A change is inserted or retracted.

ΔQlocal delta

Only affected parts are computed.

Q(x) + ΔQmaintained view

The view is updated without rebuilding.

○circles · input relation A
◇diamonds · input relation B
—gold · insertions (+Δx)
—rose · retractions (−Δx)
✣petals · materialized output rows

“Only six petals answer—even though the whole view contains thirty-four.”

reference view
|Q(x)| = 34 · |ΔQ| = 6
01 / equivalence

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.

Q(x + Δx)34 rows · 68 filaments

Whole-program recomputation revisits the complete support graph.

The complete Delta Bloom with every support filament illuminated in gold for whole-program recomputation
Q(x) + ΔQ6 rows · 12 filaments

Incremental maintenance carries only the disturbance that can reach the result.

The same final Delta Bloom with only six changed outputs and their support filaments illuminated in gold and rose
Q(x) + ΔQ = Q(x + Δx)identical denotation · localized propagation
02 / cancellation

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 rows
A gold insertion and rose retraction spiraling into the same input cell and cancelling before reaching the unchanged Delta Bloom
03 / receipts

The 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.

16 + 16 → 32two keyed inputs, one initial joined view
3 edits → 6 deltasone retraction, two insertions
34 = 32 − 2 + 4the maintained final view
Q(x) + ΔQ = Q(x + Δx)incremental advance agrees with denotation
+δ + −δ = 0signed updates annihilate on contact
0 emitted rowsthe cancelling batch never reaches the join
0.793 ms / 1.216 ms64×64 trace · Moonlight / Feldera dbsp
3.572 ms / 4.523 ms256×64 trace · Moonlight / Feldera dbsp
bloom run 2026-08-10 · source f6770970 · Feldera referent 2026-07-10