TimelyDataflow / differential-dataflow

An implementation of differential dataflow using timely dataflow on Rust.
MIT License
2.51k stars 182 forks source link

Remove `ValOwned` #476

Closed frankmcsherry closed 2 months ago

frankmcsherry commented 2 months ago

Thought experiment removing ValOwned from traces, batches, cursors, etc. It removes any opinions about the owned forms of the value GAT, other than that implied by MyTrait::Owned (which .. can vary as a function of the lifetime, and probably isn't load bearing at this point).

The pain here is that you do want some relationship between V and Tr::Val<'a>. All we seem to need is a function from the latter to the former, although From and Into do not work because they are not implemented for e.g. &T where T: Clone which we see a lot. Instead, core methods take a from: Fn(Tr::Val<'_>) -> V, which is not the most ergonomic but seemed better than having an ongoing struggle with new traits.