This repository has been archived by the owner on Aug 29, 2022. It is now read-only.
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.
Deferred
is meant to handle large parts of an app's asynchronous control flow, so its performance is critical. We've strived in the past to use the best constructs we have at our disposal to make this possible, like being early adopters of GCD in Swift. #213 revealed we can still do better! 😃What's in this pull request?
By combining our waiters queue and the storage,
Deferred
(the type) can reach same-ballpark performance as GCD while maintaining the same invariants.Per the performance tests, this PR features:
upon
handlers.In summary: same great taste, less filling.
This representation allows Swift-side access to handlers, possibly allowing for #203.
TODO
Testing
Largely no impact, but
Deferred
gains a specializationwhere Value: AnyObject
that needs testing.TODO
AnyObject
specializationAPI Changes
No public API changes here, it's all under the hood.