> On Feb 6, 2017, at 10:02 AM, Jordan Rose via swift-dev <[email protected]>
> 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.
-Joe
_______________________________________________
swift-dev mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-dev