[swift-evolution] [Concurrency] async/await + actors

Karim Nassar karim at karimnassar.com
Sat Aug 19 10:13:19 CDT 2017


This looks fantastic. Can’t wait (heh) for async/await to land, and the Actors pattern looks really compelling.

One thought that occurred to me reading through the section of the "async/await" proposal on whether async implies throws:

If ‘async' implies ‘throws' and therefore ‘await' implies ‘try’, if we want to suppress the catch block with ?/!, does that mean we do it on the ‘await’ ? 

guard let foo = await? getAFoo() else {  …  }

This looks a little odd to me, not not extremely clear as to what is happening. Under what conditions will we get a nil instead of a Foo? Maybe it’s just me or that the syntax is new and I’ll get used to it.

But it gets even more complicated if we have:

func getAFoo() async -> Foo {
   …
}

func getABar() async(nonthrowing) -> Bar {
   …
}

Now, we have an odd situation where the ‘await’ keyword may sometimes accept ?/! but in other cases may not (or it has no meaning):

guard 
   let foo = await? getAFoo(),
   let bar = await? getABar() // Is this an error?? If not, what does it mean?
   else {  …  }


Since this edge of throws/try wasn’t explicitly covered in the write-up (or did I miss it?), was wondering about your thoughts.

—Karim


> Date: Thu, 17 Aug 2017 15:24:14 -0700
> From: Chris Lattner <clattner at nondot.org>
> To: swift-evolution <swift-evolution at swift.org>
> Subject: [swift-evolution] [Concurrency] async/await + actors
> 
> Hi all,
> 
> As Ted mentioned in his email, it is great to finally kick off discussions for what concurrency should look like in Swift.  This will surely be an epic multi-year journey, but it is more important to find the right design than to get there fast.
> 
> I’ve been advocating for a specific model involving async/await and actors for many years now.  Handwaving only goes so far, so some folks asked me to write them down to make the discussion more helpful and concrete.  While I hope these ideas help push the discussion on concurrency forward, this isn’t in any way meant to cut off other directions: in fact I hope it helps give proponents of other designs a model to follow: a discussion giving extensive rationale, combined with the long term story arc to show that the features fit together.
> 
> Anyway, here is the document, I hope it is useful, and I’d love to hear comments and suggestions for improvement:
> https://gist.github.com/lattner/31ed37682ef1576b16bca1432ea9f782
> 
> -Chris



-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20170819/06927098/attachment.html>


More information about the swift-evolution mailing list