On 7 Jun, 2016, at 09:47, Brent Royal-Gordon via swift-evolution <swift-evolution@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.
A return type makes a lot of sense linguistically but does not cover all practical cases because you might not be the one deciding what the function's signature is. For example, you might implement a protocol method that is non-optional, but you never expect to be called. The only way to indicate that to the compiler is with an attribute. -damien > 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*. > >> If you want bottom types for other uses, give them their own appropriate and >> self documenting names. > > The problem is, types flow through the type system. Use a NoReturn method > with optional chaining, now you have an Optional<NoReturn>. flatMap over that > Optional<NoReturn>, now you have a parameter of type NoReturn. What's a > *parameter* of type NoReturn? You'd want it to be, say, a different bottom > type named NoPass, but you can't—the type came from a NoReturn, and it's > stuck being a NoReturn. > > Never works pretty well—honestly, surprisingly well—in all of these contexts. > The method returns Never, so optional chaining gives you an Optional<Never>, > so flatMap has a Never parameter. I have yet to discover a case where it > isn't easily interpreted to mean exactly what it really does mean. > > -- > Brent Royal-Gordon > Architechies > > _______________________________________________ > swift-evolution mailing list > swift-evolution@swift.org > https://lists.swift.org/mailman/listinfo/swift-evolution
smime.p7s
Description: S/MIME cryptographic signature
_______________________________________________ swift-evolution mailing list swift-evolution@swift.org https://lists.swift.org/mailman/listinfo/swift-evolution