> On Feb 6, 2017, at 10:05 AM, Joe Groff <jgr...@apple.com> wrote:
> 
> 
>> On Feb 6, 2017, at 10:02 AM, Jordan Rose via swift-dev <swift-dev@swift.org> 
>> wrote:
>> 
>> I’ve said this Michael in person, but I’ll put it on the thread for others 
>> to see:
>> 
>> I don’t think modeling this is worth the increase in complexity. There’s a 
>> partial workaround for anyone who notices this being a problem, which is to 
>> put any expensive work in a ‘do’ block. And actually emitting cleanups 
>> before a call to, e.g., dispatch_main would be a change in semantics, which 
>> could both break existing programs and makes the language a bit harder to 
>> reason about. The current rule that “defers happen at the close brace, 
>> releases may happen sooner” is simple. (We certainly would not want to make 
>> ‘defer’s happen before calling dispatch_main, though perhaps we should warn 
>> that they will never be executed.)
> 
> And we should keep that rule. The optimizer can't move `defer`s no matter 
> what, since they're semantically fixed to happen at end of scope, so they 
> would always "leak" in a case like `defer { doSomething() }; abort()`. It's 
> only value lifetimes that could be shortened, and shortening lifetimes before 
> a noreturn call wouldn't be a change to the existing model.

As long as we are clear with users that we are making this assumption that 
no-returns and (semantically at the SIL level) unreachables are leaking, I am 
happy. I can deal with that no problem. We should probably document that though.



> 
> -Joe

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

Reply via email to