[swift-evolution] [Draft] Change @noreturn to unconstructible return type

Xiaodi Wu xiaodi.wu at gmail.com
Tue Jun 7 16:03:33 CDT 2016


On Tue, Jun 7, 2016 at 3:57 PM, <michael.peternell at gmx.at> wrote:

>
> > Am 07.06.2016 um 22:36 schrieb Charles Srstka via swift-evolution <
> swift-evolution at swift.org>:
> >
> >> On Jun 7, 2016, at 3:12 PM, Xiaodi Wu <xiaodi.wu at gmail.com> wrote:
> >>
> >> On Tue, Jun 7, 2016 at 2:49 PM, Michael Peternell via swift-evolution <
> swift-evolution at swift.org> wrote:
> >>
> >> > Am 07.06.2016 um 19:45 schrieb Charles Srstka via swift-evolution <
> swift-evolution at swift.org>:
> >> >
> >> >> On Jun 7, 2016, at 11:47 AM, Brent Royal-Gordon via swift-evolution <
> swift-evolution at swift.org> wrote:
> >> >>
> >> >>> I disagree. We are discussing how to annotate a function in some
> way so that the compiler knows that the code following it will never be
> executed *and* so a human who reads the declaration knows that it does not
> return. “Never" is a poor choice for that. Never what? Never return? Never
> use this function? Never say never again?
> >> >>
> >> >> "Never return". That's why it's in the return type slot, right after
> the `->`. If you read it out loud, you'll read "returns Never", which is
> exactly correct.
> >> >>
> >> >> NoReturn, on the other hand, does *not* read well in that slot:
> "returns NoReturn". Huh? I mean, I suppose you won't misunderstand it, but
> it makes no sense whatsoever *as a type name*.
> >> >
> >> > But it’s *not* a type. You’ll never have an instance of it.
> >>
> >> That's the dictionary definition of a bottom type, though: a type which
> has no values.
> >>
> >> Since it’s not a type name, it doesn’t make sense that it needs to look
> like one. What it is doing is telling you something about the behavior of
> the function itself, not its return value. Its return value, if there were
> one, is irrelevant, since the function, by its very nature, will never even
> get to the point where it would return it.
> >>
> >> And that's the dictionary definition of a function where the return
> type is bottom. This isn't something being made up just for Swift...
> >
> > What’s the dictionary definition of a do loop? Or a for loop? Or
> try/catch?
> >
> > Swift doesn’t do things the same as other languages in lots of places. I
> don’t see why it has to be different here. @noreturn is a clearer
> description of what this construct does.
>
> Hi,
>
> I know of no other language that has a named bottom type that can
> syntactically compete with non-bottom-types. Swift would be the first (I
> think). The definition of bottom types hasn't been made up for Swift,
> right. "bottom type" is to "type" as is "javascript" to "java". Almost
> every language has a bottom type, including Swift 1. That doesn't mean that
> we should give it a name.


Scala has `Nothing`.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160607/d4434d12/attachment.html>


More information about the swift-evolution mailing list