[swift-evolution] [Draft] Change @noreturn to unconstructible return type
Ben Rimmington
me at benrimmington.com
Wed Jun 8 05:14:37 CDT 2016
Joe Groff wrote:
> ## Impact on existing code
>
> The number of `@noreturn` functions in the wild is fairly small, and all of
> them I can find return `Void`. It should be trivial to migrate
> existing `@noreturn` functions to use `-> NoReturn`.
Clang allows `_Noreturn` [C11] and `__attribute__((noreturn))` [GCC] functions
to have a non-void return type.
NSApplicationMain and UIApplicationMain have an integer return type, but they
never return. (There might be similar functions in other libraries). If these
functions could add `_Noreturn` without breaking binary compatibility, should
SE-0102 be rejected?
> ### Naming `NoReturn`
>
> The best name for the standard library uninhabited type is up for debate.
> `NoReturn` seems to me like the name most immediately obvious to most users
> compared to these alternatives:
Would an `Unreachable` type name match the SIL and Clang terms?
<https://github.com/apple/swift/blob/master/docs/SIL.rst#unreachable>
<http://clang.llvm.org/docs/LanguageExtensions.html#builtin-unreachable>
If empty "ad hoc enums" were available, you wouldn't need to choose a name!
<http://thread.gmane.org/gmane.comp.lang.swift.evolution/19210>
Off-topic:
* Could "incomplete struct types" also be imported as empty enums?
* Would the Swift.OpaquePointer then become a generic type?
-- Ben
More information about the swift-evolution
mailing list