This repository was archived by the owner on Aug 29, 2022. It is now read-only.
Skinny Deferred#229
Merged
Merged
Conversation
6fed315 to
cfc500f
Compare
zwaldowski
commented
May 4, 2018
| extension Deferred: PromiseProtocol { | ||
| @discardableResult | ||
| public func fill(with value: Value) -> Bool { | ||
| return variant.awake(with: value) |
Contributor
Author
There was a problem hiding this comment.
Rename store(_:).
472e0f4 to
1cf1dcd
Compare
db38b45 to
c04894a
Compare
c04894a to
20e7bf9
Compare
20e7bf9 to
572ebbb
Compare
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 subscribe to this conversation on GitHub.
Already have an account?
Sign in.
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.
Deferredis 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:
uponhandlers.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
Deferredgains a specializationwhere Value: AnyObjectthat needs testing.TODO
AnyObjectspecializationAPI Changes
No public API changes here, it's all under the hood.