> On Sep 18, 2017, at 9:47 AM, Adam Kemp <adam_k...@apple.com> wrote:
> 
>> 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.

I understand that, but this order of evaluation was designed before we had 
`await`. I'm suggesting that, now that we do, we should change the order so 
that synchronous subexpressions are evaluated before asynchronous ones.

> 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.


You could write something like that, but as you say, that's not necessarily 
good code. Honestly, I don't think you can write good code that depends on one 
part of an expression being evaluated after an async call in another part of 
the expression completes.

-- 
Brent Royal-Gordon
Architechies

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to