> On Sep 2, 2017, at 1:57 AM, Brent Royal-Gordon <[email protected]> wrote:
> 
>> On Aug 31, 2017, at 11:35 AM, Joe Groff via swift-evolution 
>> <[email protected]> wrote:
>> 
>> # Coroutine context
>> 
>> # `onResume` hooks
> 
> `onResume` hooks seem like a really good way to, essentially, allow arbitrary 
> concurrency primitives to be passed into `async` functions. My main question 
> is, if we have it, why do we need coroutine contexts? It seems to me that 
> anything the coroutine might do with the context could either be passed into 
> its parameters, or encapsulated in its `onResume` hook.

To be clear, I'm *not* claiming we necessarily need both. I'm exploring two 
options here to the problem of "how can I ensure a coroutine's execution is 
consistently associated with a specific context", from different directions. 
Context values allow information about the desired execution context to be 
pushed through the actual execution, which is the most efficient thing if all 
the code is cooperating, although it's still up to the yielding operation to 
use that information. 'onResume' can pull a resumed coroutine back into 
whatever context it expects to run in, which imposes some fundamental overhead 
in the form of "queue-hopping" in the GCD model or other rescheduling, but on 
the other hand can provide stronger guarantees about where execution is 
happening even without perfect cooperation across all code.

-Joe

>> and also prevents writing APIs that intentionally change context across an 
>> `await`, like a theoretical "goToMainThread()" function
> 
> You say that like it's a bad thing. :^)
> 
> (Seriously, I feel like that makes it *way* too easy to jump to another 
> thread in the middle of a function using what looks like an ordinary line of 
> code. A `let result = await someQueue.async { … }` syntax is a lot clearer 
> that you're hopping to another thread and about what code will run on it, but 
> can get around our current "pyramid of doom" problem. If the async syntax 
> guarantees that the code before and after the `await` runs in the same 
> "environment"—whatever environment is set up by the onResume hook—then that 
> makes async functions much safer and easier for programmers to reason about, 
> while only restricting their power slightly.)
> 
> -- 
> Brent Royal-Gordon
> Architechies
> 

_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to