A lazily-recomputed derived value. Reads its sources through get(), so it
subscribes to them; when a source changes the cached value is invalidated
and recomputed on the next get(). Cheap to clone (shared handle).
A reactive side effect. Runs its closure once on creation to subscribe to
the signals it reads, then re-runs whenever any of them changes. Drop or
Effect::dispose to stop and unregister it.
An effect owned by the runtime and tied to a widget entity: it re-runs on
dependency change and lives until the widget is despawned (cleanup later),
not until a returned handle drops. Hence no handle is returned — dropping
one would immediately unregister the effect.
Drain queued reactive work once per frame, after systems and before render:
re-run dirty effects (which may dirty more), then mark dirty widgets. Dead
entities are skipped (no reverse index; subscriber lists may retain
despawned entities).