> On 28 Aug 2017, at 22:37, Adam Kemp via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
> I explained what the value is already. It identifies clearly in your code 
> where the suspension points are. Each place you see “await” would mark a 
> location where your code may yield and allow other things to happen. Those 
> are points where state could change unexpectedly. It’s important for someone 
> writing asynchronous code to understand where those locations are. It’s 
> difficult to reason about your code without that knowledge.

I understand the value you perceive but I think that the try and await solution 
of applying to the whole statement is a good compromise to greatly improve 
readability at the expense of a little lost information.

>> On Aug 28, 2017, at 1:16 PM, Wallacy <walla...@gmail.com> wrote:
>> 
>> 
>> "Try" does the same, but I do not know anyone who prefers to repeat the same 
>> keyword several times.
>> 
>> return try func0(try func1(), try func2())
>> 
>> I do not think there's any value in knowing how many interim steps also need 
>> "await" ... In practice, you have to wait for everyone anyway.
>> 
>> 
>> 
>>> Em seg, 28 de ago de 2017 às 17:09, Adam Kemp via swift-evolution 
>>> <swift-evolution@swift.org> escreveu:
>>> I decided to split this out to its own thread because it seems orthogonal 
>>> to other issues being discussed.
>>> 
>>> When I read this line from the proposal:
>>> 
>>> await decodeImage(dataResource.get(), imageResource.get())
>>> 
>>> It’s not clear to me where the asynchronous call is. There are three 
>>> function calls on that line. Which ones might actually suspend? You can’t 
>>> tell by looking at it because there’s only one await keyword (the answer is 
>>> all 3).
>>> 
>>> I’m not a fan of the ambiguity of applying the await keyword to an entire 
>>> statement. I know some people think this is a good thing, but to me it’s 
>>> just obfuscating important information.
>>> 
>>> Further, if you’re going beyond a single expression then why you would stop 
>>> at the statement level? Why not make it apply to the whole block or even a 
>>> whole function? Why require the keyword at all? It doesn’t appear to be 
>>> adding any value if it doesn’t specify exactly where the suspension point 
>>> is. “Somewhere on this line” can get rather vague.
>>> 
>>> async/await can be a huge win for clarity, but it also comes with the 
>>> downside of having to think a bit more about what can happen at these 
>>> suspension points. I feel like it should be a goal to make it very clear 
>>> where those suspension points are so that we can more easily reason about 
>>> them. That’s why I prefer restricting it to apply to a single expression. 
>>> It’s very clear where the function gets suspended, which means it’s clearer 
>>> where you need to be concerned about things possibly happening in between 
>>> your code. Consider this, for example:
>>> 
>>> await decodeImage(loadWebResource(self.webProfilePath), 
>>> loadWebResource(self.imagePath))
>>> 
>>> If webProfilePath and imagePath are vars then they could change in between 
>>> those two calls. If you can’t see that these calls are suspending then you 
>>> might not know to cache them up-front to ensure consistency:
>>> 
>>> let webProfilePath = self.webProfilePath
>>> let imagePath = self.imagePath
>>> await decodeImage(await loadWebResource(webProfilePath), await 
>>> loadWebResource(imagePath))
>>> 
>>> I think a general guideline we should use when considering how this feature 
>>> should work is to ask whether it makes bugs more likely or less likely. The 
>>> goal should be to reduce bugs while simplifying code. If we simplify the 
>>> code to the point where we’re making some bugs too subtle then we may be 
>>> doing more harm than good.
>>> _______________________________________________
>>> swift-evolution mailing list
>>> swift-evolution@swift.org
>>> https://lists.swift.org/mailman/listinfo/swift-evolution
> 
> _______________________________________________
> swift-evolution mailing list
> swift-evolution@swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution
_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to