[swift-dev] No return functions and program exit

Joe Groff jgroff at apple.com
Mon Feb 6 12:05:59 CST 2017


> On Feb 6, 2017, at 10:02 AM, Jordan Rose via swift-dev <swift-dev at 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.

-Joe


More information about the swift-dev mailing list