Skip to content

Commit f69e3b3

Browse files
authored
Merge pull request #74025 from rjmccall/changelog-0423-0431
Add changelog entries for SE-0423 and SE-0431
2 parents 8acb157 + 5227a01 commit f69e3b3

File tree

1 file changed

+49
-4
lines changed

1 file changed

+49
-4
lines changed

CHANGELOG.md

Lines changed: 49 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,34 @@
55
66
## Swift 6.0
77

8+
* [SE-0431][]:
9+
You can now require a function value to carry its actor isolation
10+
dynamically in a way that can be directly read by clients:
11+
12+
```swift
13+
func apply<R>(count: Int,
14+
operation: @isolated(any) async () -> R) async -> [R]
15+
where R: Sendable {
16+
// implementation
17+
}
18+
```
19+
20+
The isolation can read with the `.isolation` property, which has type
21+
`(any Actor)?`:
22+
23+
```swift
24+
let iso = operation.isolation
25+
```
26+
27+
This capability has been adopted by the task-creation APIs in the
28+
standard library. As a result, creating a task with an actor-isolated
29+
function will now synchronously enqueue the task on the actor, which
30+
can be used for transitive event-ordering guarantees if the actor
31+
guarantees that jobs will be run in the order they are enqueued, as
32+
`@MainActor` does. If the function is not explicitly isolated, Swift
33+
still retains the right to optimize enqueues for functions that actually
34+
start by doing work with different isolation from their formal isolation.
35+
836
* [SE-0423][]:
937
You can now use `@preconcurrency` attribute to replace static actor isolation
1038
checking with dynamic checks for witnesses of synchronous nonisolated protocol
@@ -45,6 +73,21 @@
4573
The dynamic actor isolation checks can be disabled using the flag
4674
`-disable-dynamic-actor-isolation`.
4775

76+
* [SE-0420][]:
77+
`async` functions can now explicitly inherit the isolation of their caller
78+
by declaring an `isolated` parameter with the default value of `#isolation`:
79+
80+
```swift
81+
func poll(isolation: isolated (any Actor)? = #isolation) async -> [Item] {
82+
// implementation
83+
}
84+
```
85+
86+
When the caller is actor-isolated, this allows it to pass isolated state
87+
to the function, which would otherwise have concurrency problems. The
88+
function may also be able to eliminate unwanted scheduling changes, such
89+
as when it can quickly return in a fast path without needing to suspend.
90+
4891
* [SE-0418][]:
4992

5093
The compiler would now automatically employ `Sendable` on functions
@@ -10442,17 +10485,19 @@ using the `.dynamicType` member to retrieve the type of an expression should mig
1044210485
[SE-0407]: https://github.com/apple/swift-evolution/blob/main/proposals/0407-member-macro-conformances.md
1044310486
[SE-0408]: https://github.com/apple/swift-evolution/blob/main/proposals/0408-pack-iteration.md
1044410487
[SE-0411]: https://github.com/apple/swift-evolution/blob/main/proposals/0411-isolated-default-values.md
10445-
[SE-0417]: https://github.com/apple/swift-evolution/blob/main/proposals/0417-task-executor-preference.md
1044610488
[SE-0412]: https://github.com/apple/swift-evolution/blob/main/proposals/0412-strict-concurrency-for-global-variables.md
1044710489
[SE-0413]: https://github.com/apple/swift-evolution/blob/main/proposals/0413-typed-throws.md
10490+
[SE-0414]: https://github.com/apple/swift-evolution/blob/main/proposals/0414-region-based-isolation.md
10491+
[SE-0417]: https://github.com/apple/swift-evolution/blob/main/proposals/0417-task-executor-preference.md
10492+
[SE-0418]: https://github.com/apple/swift-evolution/blob/main/proposals/0418-inferring-sendable-for-methods.md
10493+
[SE-0420]: https://github.com/apple/swift-evolution/blob/main/proposals/0420-inheritance-of-actor-isolation.md
1044810494
[SE-0422]: https://github.com/apple/swift-evolution/blob/main/proposals/0422-caller-side-default-argument-macro-expression.md
10495+
[SE-0423]: https://github.com/apple/swift-evolution/blob/main/proposals/0423-dynamic-actor-isolation.md
1044910496
[SE-0427]: https://github.com/apple/swift-evolution/blob/main/proposals/0427-noncopyable-generics.md
1045010497
[SE-0429]: https://github.com/apple/swift-evolution/blob/main/proposals/0429-partial-consumption.md
1045110498
[SE-0432]: https://github.com/apple/swift-evolution/blob/main/proposals/0432-noncopyable-switch.md
10452-
[SE-0414]: https://github.com/apple/swift-evolution/blob/main/proposals/0414-region-based-isolation.md
1045310499
[SE-0430]: https://github.com/apple/swift-evolution/blob/main/proposals/0430-transferring-parameters-and-results.md
10454-
[SE-0418]: https://github.com/apple/swift-evolution/blob/main/proposals/0418-inferring-sendable-for-methods.md
10455-
[SE-0423]: https://github.com/apple/swift-evolution/blob/main/proposals/0423-dynamic-actor-isolation.md
10500+
[SE-0431]: https://github.com/apple/swift-evolution/blob/main/proposals/0431-isolated-any-functions.md
1045610501
[#64927]: <https://github.com/apple/swift/issues/64927>
1045710502
[#42697]: <https://github.com/apple/swift/issues/42697>
1045810503
[#42728]: <https://github.com/apple/swift/issues/42728>

0 commit comments

Comments
 (0)