Releases: TimelyDataflow/timely-dataflow
timely_logging-v0.27.0
chore: Release package timely_logging version 0.27.0
timely_container-v0.27.0
chore: Release package timely_container version 0.27.0
timely_communication-v0.27.0
chore: Release package timely_communication version 0.27.0
timely_bytes-v0.27.0
chore: Release package timely_bytes version 0.27.0
timely-v0.27.0
Other
- Return input stream (#747)
- MRSV 1.86 (#748)
- Avoid allocations when sorting (#751)
- Assert if a second pusher is added without upgrading (#750)
- Reorganize types and traits to deprioritize
Vecstreams (#746) - Replace seeded rand datagen with hash functions (#745)
Teeimplementation withoutClonerequirement (#744)- Bump oldest Rust version from 1.79 to 1.85 (#743)
- Delay/retain input capabilities for specific outputs (#738)
Streams are not backed by vectors by default
Timely streams are now container-oriented by default, rather than vector-oriented.
Timely has historically had the Stream type mean "A stream that transports vectors of items".
This was a helpful opinion early days when the goal was to make the first programs easy to type.
Since, we've learned that vectors and Rust ownership can be a performance anti-pattern:
exchanging owned data and e.g. deallocation obligations among workers is effectively an allocator microbenchmark.
Instead, we've renamed Stream to StreamVec and moved the associated operators to a operators::vec module.
The previous StreamCore that works with general containers has been promoted to Stream, and is the recommended type.
Many/most of the timely operators work over arbitrary containers, and are defined on the new Stream.
The Stream::container<C>() method has proven useful for "hinting" at the container type you intend.
Streams are not Clone by default
Timely streams are now non-clone by default.
Streams do implement clone when their containers can be cloned.
This allows the use of non-clone containers, and for users to ensure (by not advertising Clone) that their streams are not unintentionally cloned.
A low-friction migration is to require Clone for transmitted types, and call .clone() on the stream when you would use it.
Idiomatically, most operations now take a Stream rather than a &Stream, and we've found that adopting this migration helps as well.
There is a low cost to cloning a stream that you only use once: one additional virtual call will occur for each container shipped along it.
timely_logging-v0.26.1
chore: Release package timely_logging version 0.26.1
timely_container-v0.26.1
chore: Release package timely_container version 0.26.1
timely_communication-v0.26.1
chore: Release package timely_communication version 0.26.1
timely_bytes-v0.26.1
chore: Release package timely_bytes version 0.26.1