Commit Graph

167 Commits

Author SHA1 Message Date
John McCall
2012195cd5 Alter the runtime interface for awaiting futures and task groups.
First, just call an async -> T function instead of forcing the caller
to piece together which case we're in and perform its own copy.  This
ensures that the task is actually kept alive properly.

Second, now that we no longer implicitly depend on the waiting tasks
being run synchronously, go ahead and schedule them to run on the
global executor.

This solves some problems which were blocking the work on TLS-ifying
the task/executor state.
2021-02-21 23:48:13 -05:00
John McCall
8e9823c369 Store the current task and executor in task-local storage. 2021-02-21 21:39:14 -05:00
Arnold Schwaighofer
4373bdd6d0 Conditionally start using llvm::CallingConv::SwiftTail for async functions
This is conditional on UseAsyncLowering and in the future should also be
conditional on `clangTargetInfo.isSwiftAsyncCCSupported()` once that
support is merged.

Update tests to work either with swiftcc or swifttailcc.
2021-02-18 09:25:15 -08:00
swift-ci
6b8039928d Merge pull request #36034 from ktoso/wip-fix-withLocal-non-escape 2021-02-18 07:01:10 -08:00
Konrad `ktoso` Malawski
fc1da16eae [Concurrency][TaskLocal] Add test for throwing out of a withLocal 2021-02-18 21:27:58 +09:00
Konrad `ktoso` Malawski
7dbccec449 [Concurrency][TaskLocal] Collapse APIs and remove unnecessary escaping 2021-02-18 21:16:09 +09:00
Konrad `ktoso` Malawski
40b6b18945 [Concurrency] implement withCancellationHandler via records 2021-02-18 17:27:15 +09:00
Varun Gandhi
7eeabd9300 [Runtime] Fix calling convention of async function.
Otherwise, we run into a type error on turning on swiftasync.
2021-02-17 10:10:35 -08:00
nate-chandler
de63a23e77 Merge pull request #35603 from nate-chandler/concurrency/irgen/rdar71378532
[Async CC] Make error indirect.
2021-02-16 07:39:14 -08:00
swift-ci
c19375790a Merge pull request #35977 from DougGregor/discardable-run-detached 2021-02-15 14:51:51 -08:00
Doug Gregor
6a5dfb8aa4 Mark Task.runDetached as @discardableResult.
Often, this API is used for its side effects and nobody cares about the
handle.
2021-02-15 12:21:49 -08:00
Konrad `ktoso` Malawski
d2bd6abe61 [Concurrency] TaskLocals allow configuring inheritance: never 2021-02-13 20:09:11 +09:00
Konrad `ktoso` Malawski
b811b12246 [Concurrency] TaskLocals lookup "skip" optimization 2021-02-13 10:39:22 +09:00
Konrad `ktoso` Malawski
1044723787 [Concurrency] Initial Task Local Values implementation 2021-02-13 10:39:22 +09:00
Philippe Hausler
8578584f61 Implementations for operators and async functions on AsyncSequence per SE-0298 (#35740)
* Implementations for operators and async functions on AsyncSequence per SE-0298

* Add trailing new lines to AsyncSequence adopter files

* Remove extra // from preambles

* Transition sequence properties and sequence initializers to internal

* Rename Upstream to Base

* Rename "Failable" asynchronous sequences to "Throwing"

* Make iteration consistent with closure lifetimes and track failure via state

* Use for await syntax for async function extensions on AsyncSequence

* Work-around rethrows calculations being incorrect for conformance + closure rethrowing

* Update testing names to reflect Throwing versus Failable

* Incorperate runAsyncAndBlock into the test function for suite calls

* Remove @frozen from AsyncSequence operators

* Back out reduce family functions for now due to IRGen bug

* Additional corrections for throwing cases and fix up potential linux crasher

* Add a upstream and throwing tests and correct flatMap's throwing behavior

* Unify parameter names to count

* Add a more helpful precondition on prefix

* Add tests for throwing cases of non closure async functions on AsyncSequence

* Correct missing count transition in dropFirst

* Correct missing , in assertion

* [NFC] add commentary on optimization in dropFirst on dropFirst

* Disable collect tests for non macOS platforms for now

* Disable all async sequence tests for non macOS platforms for now
2021-02-12 14:43:59 -08:00
swift-ci
06513524e9 Merge pull request #35940 from AnthonyLatsis/eof-warn 2021-02-12 11:37:40 -08:00
Jonathan Grynspan
36b03a499f Merge pull request #35868 from grynspan/main
[Concurrency] Simplify the type story for `Continuation` by eliminating `Throwing` variants
2021-02-12 12:55:13 -05:00
Evan
e813bbea76 Merge pull request #35911 from etcwilde/ewilde/deprecate-runAsyncAndBlock
Deprecate runAsyncAndBlock API
2021-02-12 09:51:04 -08:00
Anthony Latsis
39649161d0 Gardening: See to some missing newline warnings 2021-02-12 17:00:47 +03:00
Konrad `ktoso` Malawski
a55ebff942 [Concurrency] deprecate not implemented Task functions, until they're implemented 2021-02-12 16:33:16 +09:00
Konrad `ktoso` Malawski
e7cfc8c018 [Concurency] Improve priority testing, including multi-task escalation 2021-02-12 09:06:17 +09:00
Konrad `ktoso` Malawski
08de933288 [Concurrency] Task revisions 3
- introduce UnsafeCurrentTask
- implement Hashable, Equatable on tasks
- assume we'll have a way to get a task from sync context
- Task.Handle now has a Failure type as well
- Task.Handle.getResult
2021-02-12 09:06:17 +09:00
Konrad `ktoso` Malawski
30a86aa0cf [Concurrency] Temporarily remove Deadlines, we'll revisit this later 2021-02-12 09:06:17 +09:00
Nate Chandler
e2a8abc9e5 [Async CC] Make error indirect.
Previously, the error stored in the async context was of type SwiftError
*.  In order to enable the context to be callee released, make it
indirect and change its type to SwiftError **.

rdar://71378532
2021-02-11 11:34:47 -08:00
Jonathan Grynspan
7e7215459f Remove _Continuation protocol and duplicate the relevant code. 2021-02-11 12:54:19 -05:00
Evan Wilde
e83b0a2a84 Deprecate runAsyncAndBlock API
We don't want people using this as a means of jumping from synchronous
code to async code. It blocks the thread that it's running on and spawns
a new thread to run the async code.

This has a couple of drawbacks. First, if it blocks a thread that is
needed by the async code (i.e, calling something on the main actor while
blocking the main thread), it is an immediate deadlock. This is a bad
day for everyone. Second, it can easily lead to thread-explosions.

The proper entry-point for async code is to use something of the
following form:

```
@main
struct Main {
  static func main() async {
    // ...
  }
}
```

This should take care of most new code. There are still places where
folks will need to jump from synchronous code to async code. That still
needs to be designed and implemented, but we don't want people to come
to rely on `runAsyncAndBlock`.
2021-02-10 21:33:03 -08:00
Dario Rexin
e8b36abb63 [Concurrency] Enable concurrent global executor on non-Darwin platforms (#35871)
* [Concurrency] Enable concurrent global executor on non-Darwin platforms

* Fix runtime unittest build
2021-02-10 14:12:21 -08:00
Jonathan Grynspan
d8f7f20c4b [Concurrency] Simplify the type story for Continuation by eliminating Throwing variants
The goal of doing this is to reduce the amount of boilerplate and repeated code w.r.t. Continuation. Having just added `resume()` in four places, I got the sense that there was a lot of common code that was being duplicated. I removed the Throwing variants of these types (they can be expressed as Continuation<T, E:Error> instead of ThrowingContinuation<E>) and I broke out a significant amount of common code between CheckedContinuation and UnsafeContinuation into an implementation-only protocol to avoid repeating it. D.R.Y.

This change resolves rdar://74154769.
2021-02-10 12:09:33 -05:00
Evan Wilde
748f15e0d5 Update standard library actor class
This patch updates the once instance of actor class in the concurrency
library to actor. This is the actor for the MainActor global actor.
2021-02-10 08:05:57 -08:00
Jonathan Grynspan
6bddba2272 Merge pull request #35829 from grynspan/main
[Concurrency] Add `*Continuation.resume()` for continuations returning `Void`.

This change resolves rdar://74031110.
2021-02-09 12:16:05 -05:00
Jonathan Grynspan
ca423f44dd Fix whitespace 2021-02-08 23:30:46 -05:00
Joe Groff
7fdc65d5b8 Merge pull request #35793 from jckarter/checked-continuation-resume-with-result
CheckedContinuation: Add `resume(with: Result)` for parity with UnsafeContinuation
2021-02-08 15:52:55 -08:00
Jonathan Grynspan
49da0783ef Mark new function inlinable since it's trivial 2021-02-08 18:01:12 -05:00
Jonathan Grynspan
5db55aad1e Add *Continuation.resume() for continuations returning Void.
This change implements the changes proposed in swift-evolution PR #1264.
Existing test coverage should be sufficient here since the added function
simply calls into the existing `resume(returning:)` function.

This change resolves rdar://74031110.
2021-02-08 14:37:27 -05:00
Dario Rexin
bcd6416c89 Revert "[Concurrency] Build C only libdispatch before Swift on non-Darwin pla… (#35738)" (#35789)
This reverts commit 74e59ab77f.
2021-02-05 13:51:39 -08:00
Joe Groff
35802bfa36 CheckedContinuation: Add resume(with: Result) for parity with UnsafeContinuation 2021-02-05 11:52:45 -08:00
Doug Gregor
06dc593cec Merge pull request #35264 from DougGregor/concurrent-value-protocol
[Concurrency] Introduce "ConcurrentValue" protocol and checking.
2021-02-05 10:28:26 -08:00
nate-chandler
562eea10cb Merge pull request #35772 from nate-chandler/concurrency/runtime/rdar72357371
[Runtime] Ptrauth for runAsyncAndBlock.
2021-02-05 08:06:29 -08:00
Nate Chandler
c59b01feee [Runtime] Ptrauth for runAsyncAndBlock.
rdar://72357371
2021-02-04 20:19:26 -08:00
Dario Rexin
74e59ab77f [Concurrency] Build C only libdispatch before Swift on non-Darwin pla… (#35738)
* [Concurrency] Build C only libdispatch before Swift on non-Darwin platforms

_Concurrency depends on libdispatch and since it is not available by
default on non-Darwin platforms, it needs to be built before the Swift
project, so that the dependency can be resolved.

* Fix clibdispatch installation and BuildSystem tests

* Fix build system tests on Darwin and formatting
2021-02-04 17:15:30 -08:00
Doug Gregor
a632118d6a Sink ConcurrentValue into the standard library as a marker protocol
By making ConcurrentValue a marker protocol, it no longer has any ABI
impact whatsoever. Sink it down into the Standard Library so it's
easier to use, even from code that isn't building with concurrency
enabled.
2021-02-03 16:43:33 -08:00
Doug Gregor
27e0b1243e [Concurrency] Add the ConcurrentValue protocol.
The ConcurrentValue protocol indicates when a particular type is safe
to share in a concurrent context, e.g., that a copy of a given value
can be safely used concurrently with the value.
2021-02-03 16:43:33 -08:00
Mike Ash
662b553ffe Merge pull request #35620 from mikeash/debug-var-async-task-metadata
[Concurrency] Add a debug variable pointing to the metadata for AsyncTask.
2021-01-29 23:31:17 -05:00
Doug Gregor
c97637cb96 Merge pull request #35655 from DougGregor/concurrent-function-types-sil
[SIL] Add `@concurrent` function types to SIL
2021-01-29 15:43:45 -08:00
Doug Gregor
1f1f703afe Drop @concurrent from parameter to @asyncHandler entry point.
The async handler code doesn't really run concurrently with where it is
launched, despite the implementation currently using `runDetached`
internally. Drop the @concurrent and bitcase it back on when needed.
2021-01-29 09:53:22 -08:00
Saleem Abdulrasool
3cf257fc84 Merge pull request #35585 from compnerd/runless
Concurrency: avoid `CFRunLoopRun` on non-Darwin
2021-01-29 08:50:42 -08:00
Doug Gregor
581e6662b7 Adopt @concurrent in withCancellationHandler. 2021-01-28 13:20:18 -08:00
Doug Gregor
9efb44fde8 Adopt @concurrent in Task APIs 2021-01-28 10:03:09 -08:00
Mike Ash
329af74b15 [Concurrency] Add a debug variable pointing to the metadata for AsyncTask.
Debugging tools can use _swift_concurrency_debug_asyncTaskMetadata to identify memory blocks as async task allocations by looking at their isa/metadata pointer.

rdar://72906895
2021-01-27 13:45:22 -05:00
Arnold Schwaighofer
b0d31730de Merge pull request #35303 from aschwaighofer/introduce_swiftasync_lowering
Add llvm::Attribute::SwiftAsync to the context parameter
2021-01-26 06:03:19 -08:00