[swift-evolution] Idea: change "@noreturn func f()" to "func f() noreturn"
Chris Lattner
clattner at apple.com
Thu Feb 25 17:01:09 CST 2016
> On Feb 25, 2016, at 1:44 PM, Jacob Bandes-Storch via swift-evolution <swift-evolution at swift.org> wrote:
>
> Premise: there are multiple ways of describing control-/data-flow when a function is called:
>
> func x() -> T // x returns a value, of type T, to the caller
> func x() throws // x may throw an error to the caller
> func x() throws -> T // x may throw an error, and also return a value
> func x(...) rethrows ... // if a closure argument can throw an error, x may also throw
> @noreturn func x() // x never returns to the caller
>
> "noreturn" is currently spelled as an attribute, but like "throws" / "rethrows" / "-> T", it's really describing how control flow works.
>
> IMO this calls for consistency: whatever happens "after" the function is called should appear "after" the parameter list.
>
> func x() noreturn {
> ...
> }
>
>
> Thoughts?
This would require taking noreturn as a keyword (so we could use it in the type grammar). @noreturn is uncommon enough to be not worth doing that IMO. It is also non-primal to the decl it is modifying, which makes it a perfect attribute.
-Chris
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160225/075a20ba/attachment.html>
More information about the swift-evolution
mailing list