exchange: remove one layer of boxing#456
Merged
frankmcsherry merged 2 commits intoTimelyDataflow:masterfrom Mar 17, 2022
Merged
exchange: remove one layer of boxing#456frankmcsherry merged 2 commits intoTimelyDataflow:masterfrom
frankmcsherry merged 2 commits intoTimelyDataflow:masterfrom
Conversation
We were previously forced to use a boxed trait object because we were unable to name the type of the constructed closure. This patch fixes it by introducing a custom `ParallelizationHasher` trait that the `ParallelizationContractCore` expects with a blanket implementation for all closures taking two arguments. This is to maintain backwards compatibility with any code that passes a closure directly to `ExchangeCore::new`. Then a wrapper type `DataHasher<F>` is introduced that allows us to both specialize the `ParallelizationHasher` implementation for single argument closures and at the same time name the type which is what we need to remove one layer of boxed trait objects. Signed-off-by: Petros Angelatos <petrosagg@gmail.com>
Signed-off-by: Petros Angelatos <petrosagg@gmail.com>
antiguru
approved these changes
Mar 17, 2022
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
We were previously forced to use a boxed trait object because we were unable to name the type of the constructed closure.
This patch fixes it by introducing a customParallelizationHashertrait that theParallelizationContractCoreexpects with a blanket implementation for all closures taking two arguments. This is to maintain backwards compatibility with any code thatpasses a closure directly toExchangeCore::new.Then a wrapper typeDataHasher<F>is introduced that allows us to both specialize theParallelizationHasherimplementation for single argument closures and at the same time name the type which is what we need to remove one layer of boxed trait objects.UPDATE: After discussion with @frankmcsherry and @antiguru it turns out that we'd rather remove the ability to distribute records based on time, which makes it even easier to remove the box. This PR is now changed to reflect that.