-
Notifications
You must be signed in to change notification settings - Fork 1.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Address Effect.throttle
sendability
#3325
Conversation
import Dispatch | ||
import Foundation | ||
|
||
extension Effect { | ||
extension Effect where Action: Sendable { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Because the action flows through Combine across potential concurrency boundaries, I think we're forced to require a sendable action here. It's possible we could weaken this with a pure Swift concurrency throttle.
@@ -23,12 +23,13 @@ extension Effect { | |||
/// `false`, the publisher emits the first element received during the interval. | |||
/// - Returns: An effect that emits either the most-recent or first element received during the | |||
/// specified interval. | |||
public func throttle<S: Scheduler>( | |||
public func throttle<S: Scheduler & Sendable>( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The scheduler also travels across concurrency boundaries, so it needs to be sendable. Dispatch queues are sendable, but run loops are not. Combine's ImmediateScheduler
is also not sendable, but our .immediate
scheduler is, as is our TestScheduler
, so I think this is safe to do, it'll just mean folks shouldn't throttle with a run loop.
id: some Hashable & Sendable, | ||
for interval: S.SchedulerTimeType.Stride, | ||
scheduler: S, | ||
latest: Bool | ||
) -> Self { | ||
) -> Self | ||
where S.SchedulerTimeType.Stride: Sendable { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Another requirement. Dispatch queue's stride type is sendable.
* Address @shared sendability. * Undo UncheckedSendable<UserDefaults>. * clean up * wip * drop AnySendable. * wip * Address `Effect.throttle` sendability (#3325) * Address effect cancellation sendability (#3326) * Address effect cancellation sendability * fix * wip * wip * Separate SendableDefaultSubscript from DefaultSubscript. * fix test * drop escaping * switch on swift 6 language mode * xcode 16 * update test * wip --------- Co-authored-by: Stephen Celis <stephen@stephencelis.com>
…ure to from: "1.15.0" (#1230) This PR contains the following updates: | Package | Update | Change | |---|---|---| | [pointfreeco/swift-composable-architecture](https://redirect.github.com/pointfreeco/swift-composable-architecture) | minor | `from: "1.13.1"` -> `from: "1.15.0"` | --- ### Release Notes <details> <summary>pointfreeco/swift-composable-architecture (pointfreeco/swift-composable-architecture)</summary> ### [`v1.15.0`](https://redirect.github.com/pointfreeco/swift-composable-architecture/releases/tag/1.15.0) [Compare Source](https://redirect.github.com/pointfreeco/swift-composable-architecture/compare/1.14.0...1.15.0) #### What's Changed - Added: Complete Swift 6 Language Mode support ([https://github.com/pointfreeco/swift-composable-architecture/pull/3282](https://redirect.github.com/pointfreeco/swift-composable-architecture/pull/3282), [https://github.com/pointfreeco/swift-composable-architecture/pull/3318](https://redirect.github.com/pointfreeco/swift-composable-architecture/pull/3318); [https://github.com/pointfreeco/swift-composable-architecture/pull/3317](https://redirect.github.com/pointfreeco/swift-composable-architecture/pull/3317); [https://github.com/pointfreeco/swift-composable-architecture/pull/3321](https://redirect.github.com/pointfreeco/swift-composable-architecture/pull/3321); [https://github.com/pointfreeco/swift-composable-architecture/pull/3325](https://redirect.github.com/pointfreeco/swift-composable-architecture/pull/3325); [https://github.com/pointfreeco/swift-composable-architecture/pull/3326](https://redirect.github.com/pointfreeco/swift-composable-architecture/pull/3326); [https://github.com/pointfreeco/swift-composable-architecture/pull/3320](https://redirect.github.com/pointfreeco/swift-composable-architecture/pull/3320); [https://github.com/pointfreeco/swift-composable-architecture/pull/3333](https://redirect.github.com/pointfreeco/swift-composable-architecture/pull/3333); [https://github.com/pointfreeco/swift-composable-architecture/pull/3329](https://redirect.github.com/pointfreeco/swift-composable-architecture/pull/3329)). - Fixed: Warn when bindable store is sent a binding action without having integrated with `BindingReducer` ([https://github.com/pointfreeco/swift-composable-architecture/pull/3347](https://redirect.github.com/pointfreeco/swift-composable-architecture/pull/3347)). - Fixed: Remove and lock subscriptions from the Combine subject powering Store and Shared subscriptions (thanks [@​iampatbrown](https://redirect.github.com/iampatbrown), [https://github.com/pointfreeco/swift-composable-architecture/pull/2699](https://redirect.github.com/pointfreeco/swift-composable-architecture/pull/2699)). This should improve memory and avoid potential issues related to concurrent access to the publisher. - Fixed: Avoid potential deadlock in `Shared` by dispatching to the main actor ([https://github.com/pointfreeco/swift-composable-architecture/pull/3356](https://redirect.github.com/pointfreeco/swift-composable-architecture/pull/3356)). - Fixed: Swift Testing support for concurrent tests by bucketing cancellation identifiers to each `@Test` ([https://github.com/pointfreeco/swift-composable-architecture/pull/3374](https://redirect.github.com/pointfreeco/swift-composable-architecture/pull/3374)). - Infrastructure: Remove disfavored `NSObject.observe` overload in favor of SwiftNavigation's `observe` ([https://github.com/pointfreeco/swift-composable-architecture/pull/3316](https://redirect.github.com/pointfreeco/swift-composable-architecture/pull/3316)) - Infrastructure: Fix typo and deprecated content in `Performance.md` (thanks [@​MaraMincho](https://redirect.github.com/MaraMincho), [https://github.com/pointfreeco/swift-composable-architecture/pull/3323](https://redirect.github.com/pointfreeco/swift-composable-architecture/pull/3323)); 'WhatIsNavigation.md' fixes (thanks [@​stealmh](https://redirect.github.com/stealmh), [https://github.com/pointfreeco/swift-composable-architecture/pull/3345](https://redirect.github.com/pointfreeco/swift-composable-architecture/pull/3345)); fix typos (thanks [@​stealmh](https://redirect.github.com/stealmh), [https://github.com/pointfreeco/swift-composable-architecture/pull/3349](https://redirect.github.com/pointfreeco/swift-composable-architecture/pull/3349); thanks [@​O-O-wl](https://redirect.github.com/O-O-wl), [https://github.com/pointfreeco/swift-composable-architecture/pull/3354](https://redirect.github.com/pointfreeco/swift-composable-architecture/pull/3354)); replace deprecated `viewStore` with `store` in documentation (thanks [@​qwerty3345](https://redirect.github.com/qwerty3345), [https://github.com/pointfreeco/swift-composable-architecture/pull/3341](https://redirect.github.com/pointfreeco/swift-composable-architecture/pull/3341)). - Infrastructure: Added failing test to document behavior with observation/identified array ([https://github.com/pointfreeco/swift-composable-architecture/pull/3346](https://redirect.github.com/pointfreeco/swift-composable-architecture/pull/3346)). - Infrastructure: Update `05-HigherOrderReducers` CaseStudies (thanks [@​qwerty3345](https://redirect.github.com/qwerty3345), [https://github.com/pointfreeco/swift-composable-architecture/pull/3342](https://redirect.github.com/pointfreeco/swift-composable-architecture/pull/3342)); update `04-Navigation-Lists-NavigateAndLoad` CaseStudies (thanks [@​MaraMincho](https://redirect.github.com/MaraMincho), [https://github.com/pointfreeco/swift-composable-architecture/pull/3327](https://redirect.github.com/pointfreeco/swift-composable-architecture/pull/3327)). - Infrastructure: Issue template updates ([https://github.com/pointfreeco/swift-composable-architecture/pull/3363](https://redirect.github.com/pointfreeco/swift-composable-architecture/pull/3363)). - Infrastructure: Apply `any` to all existential protocol uses (thanks [@​qwerty3345](https://redirect.github.com/qwerty3345), [https://github.com/pointfreeco/swift-composable-architecture/pull/3370](https://redirect.github.com/pointfreeco/swift-composable-architecture/pull/3370)). - Infrastructure: Improve CI job performance ([https://github.com/pointfreeco/swift-composable-architecture/pull/3357](https://redirect.github.com/pointfreeco/swift-composable-architecture/pull/3357)). - Infrastructure: Remove outdated `#if` branching in the library ([https://github.com/pointfreeco/swift-composable-architecture/pull/3376](https://redirect.github.com/pointfreeco/swift-composable-architecture/pull/3376)). #### New Contributors - [@​stealmh](https://redirect.github.com/stealmh) made their first contribution in [https://github.com/pointfreeco/swift-composable-architecture/pull/3345](https://redirect.github.com/pointfreeco/swift-composable-architecture/pull/3345) - [@​O-O-wl](https://redirect.github.com/O-O-wl) made their first contribution in [https://github.com/pointfreeco/swift-composable-architecture/pull/3354](https://redirect.github.com/pointfreeco/swift-composable-architecture/pull/3354) **Full Changelog**: pointfreeco/swift-composable-architecture@1.14.0...1.15.0 ### [`v1.14.0`](https://redirect.github.com/pointfreeco/swift-composable-architecture/releases/tag/1.14.0) [Compare Source](https://redirect.github.com/pointfreeco/swift-composable-architecture/compare/1.13.1...1.14.0) #### What's Changed - Added: Isolate `Store`, `TestStore`, and various view helpers to the `@MainActor` ([https://github.com/pointfreeco/swift-composable-architecture/pull/3277](https://redirect.github.com/pointfreeco/swift-composable-architecture/pull/3277), [https://github.com/pointfreeco/swift-composable-architecture/pull/3283](https://redirect.github.com/pointfreeco/swift-composable-architecture/pull/3283)). This has been done with `@preconcurrency` for backwards compatibility. If you are using strict concurrency it may require you add `@MainActor` annotations to any SwiftUI view helpers that access the store. - Fixed: Don't eagerly dismiss an alert presented by another ([https://github.com/pointfreeco/swift-composable-architecture/pull/3309](https://redirect.github.com/pointfreeco/swift-composable-architecture/pull/3309)). - Infrastructure: Bump Swift Navigation version ([https://github.com/pointfreeco/swift-composable-architecture/pull/3310](https://redirect.github.com/pointfreeco/swift-composable-architecture/pull/3310)). - Infrastructure: Documentation fixes (thanks [@​woohyunjin06](https://redirect.github.com/woohyunjin06), [https://github.com/pointfreeco/swift-composable-architecture/pull/3296](https://redirect.github.com/pointfreeco/swift-composable-architecture/pull/3296); [@​MaraMincho](https://redirect.github.com/MaraMincho), [https://github.com/pointfreeco/swift-composable-architecture/pull/3299](https://redirect.github.com/pointfreeco/swift-composable-architecture/pull/3299)). #### New Contributors - [@​woohyunjin06](https://redirect.github.com/woohyunjin06) made their first contribution in [https://github.com/pointfreeco/swift-composable-architecture/pull/3296](https://redirect.github.com/pointfreeco/swift-composable-architecture/pull/3296) - [@​MaraMincho](https://redirect.github.com/MaraMincho) made their first contribution in [https://github.com/pointfreeco/swift-composable-architecture/pull/3299](https://redirect.github.com/pointfreeco/swift-composable-architecture/pull/3299) - [@​qwerty3345](https://redirect.github.com/qwerty3345) made their first contribution in [https://github.com/pointfreeco/swift-composable-architecture/pull/3305](https://redirect.github.com/pointfreeco/swift-composable-architecture/pull/3305) **Full Changelog**: pointfreeco/swift-composable-architecture@1.13.1...1.14.0 </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://redirect.github.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://redirect.github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC44MC4wIiwidXBkYXRlZEluVmVyIjoiMzguODAuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==--> Co-authored-by: cgrindel-self-hosted-renovate[bot] <139595543+cgrindel-self-hosted-renovate[bot]@users.noreply.github.com> Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Addressing some more sendability warnings.