exchange: remove one layer of boxing #456
Merged
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 customParallelizationHasher
trait that theParallelizationContractCore
expects 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 theParallelizationHasher
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.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.