One of the goals of Nimble 13 is to enable strict concurrency checking, in preparation for Swift 6 (ideally, we want to be able to support Swift 6 long before it actually ships).
This is one small part of that effort. Specifically, this is doing the least amount of work to make AsyncExpression and expect/expecta (with async closures) conform to Sendable.
This...
Makes AsyncExpression conform to Sendable.
Makes SourceLocation conform to Sendable.
Changes AsyncExpression to take in/operate only on Sendable closures. Which drove out making expect (for async)/expecta take in only Sendable closures.
rewrites memoizedClosure (async) to be an Actor, the new MemoizedClosure actor.
As-is, this will cause a bunch of compiler warnings when it ships. Still, that's annoying enough that I'm going to consider that a breaking change.
One of the goals of Nimble 13 is to enable strict concurrency checking, in preparation for Swift 6 (ideally, we want to be able to support Swift 6 long before it actually ships).
This is one small part of that effort. Specifically, this is doing the least amount of work to make
AsyncExpression
andexpect
/expecta
(with async closures) conform to Sendable.This...
AsyncExpression
conform to Sendable.SourceLocation
conform to Sendable.AsyncExpression
to take in/operate only on Sendable closures. Which drove out makingexpect
(for async)/expecta
take in only Sendable closures.memoizedClosure
(async) to be an Actor, the new MemoizedClosure actor.As-is, this will cause a bunch of compiler warnings when it ships. Still, that's annoying enough that I'm going to consider that a breaking change.