[swift-evolution] await keyword "scope"

Adam Kemp adam_kemp at apple.com
Mon Sep 18 11:47:00 CDT 2017


> On Sep 15, 2017, at 4:50 AM, Brent Royal-Gordon <brent at architechies.com> wrote:
> 
>> On Sep 12, 2017, at 12:48 PM, Adam Kemp via swift-evolution <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> wrote:
>> 
>> @IBAction func buttonDidClick(sender:AnyObject) {
>>     beginAsync {
>>         let image = await processImage(downloadImage(), resize: self.resizeSwitch.isOn)
>>         displayImage(image)
>>     }
>> }
> 
> Would it be possible to actually fix this? That is, make the code covered by the `await` evaluate synchronous subexpressions first, such that the code sample above is equivalent to this?
> 
> 	@IBAction func buttonDidClick(sender:AnyObject) {
> 	    beginAsync {
> 		let $temp1 = self.resizeSwitch.isOn
> 		let $temp2 = await downloadImage()
> 	        let image = await processImage($temp2, resize: $temp1)
> 	        displayImage(image)
> 	    }
> 	}

That violates the defined order of evaluation for function arguments. You could also write code in which the (async) first argument function call has side effects that alter the result of the second argument expression. I’m not saying that’s good code, but it’s possible, and the language defines the order of evaluation so that code like that will have a predictable behavior.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20170918/8683be82/attachment.html>


More information about the swift-evolution mailing list