[swift-evolution] Idea: change "@noreturn func f()" to "func f() noreturn"

Jacob Bandes-Storch jtbandes at gmail.com
Thu Feb 25 15:44:36 CST 2016


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?

Jacob
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160225/fe47cd22/attachment.html>


More information about the swift-evolution mailing list