<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body dir="auto"><div><span style="background-color: rgba(255, 255, 255, 0);">IMHO there is a deep relationship between this discussion, 0092 and a serie of other recent topics (like literal convertibles or the extended existentials). There is no doubt that these questions must and will all be answered individually, however it is my HO that there is a small window of time to standardize the lower levels of the stdlib around a few simple patterns that can directly impact the design of all these solutions (some are already in place, and should likely influence the shape of the answer to this question, regardless of the selected name).</span></div><div><span style="background-color: rgba(255, 255, 255, 0);"><br></span></div><div><span style="background-color: rgba(255, 255, 255, 0);">I am gathering a handfull of these really small proposals which I believe make more sense when looked at together.</span></div><div><br><div><div>Regards</div>(From<span class="Apple-style-span" style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.294118);">&nbsp;mobile)</span></div></div><div><br>On Jun 6, 2016, at 5:26 PM, Tony Allevato via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt; wrote:<br><br></div><blockquote type="cite"><div><div dir="ltr">"Nothing" feels like it collides too much with the concept of a function that returns, but returns nothing (i.e., Void), however.<div><br></div><div>If I read a function declaration from left to right:</div><div><br></div><div>&nbsp; &nbsp; func foo() -&gt; Nothing</div><div><br></div><div>I read that as "a function foo that returns nothing". That sounds like a Void function to me. On the other hand:</div><div><br></div><div>&nbsp; &nbsp; func foo() -&gt; Never</div><div><br></div><div>I read that as "a function foo that returns never". That's perfectly clear to me.</div><div><br></div><div>When it comes to naming things like this, I don't think we should try to shoehorn in the arguably more "pure" names when it runs the risk of causing confusion with Swift's C-based ancestry. I'd argue that it's more important for the language to be clearly readable than to satisfy a notion of absolute adherence to pure formal semantics that only theorists would completely understand. The main audience here is still app developers and perhaps backend developers, not academics.</div></div><br><div class="gmail_quote"><div dir="ltr">On Mon, Jun 6, 2016 at 8:16 AM Charlie Monroe via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">You are thinking of it as a return type, but that's not how you should think of it, really - that's an example of what it may be used for, but it should not be the only aspect.<br>
<br>
It should be the opposite of Any, which (excluding None), seems to be Nothing. Or Singularity :)<br>
<br>
6. 6. 2016 v 16:12, Vladimir.S via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt;:<br>
<br>
&gt; +1 for Never, as 'foo() -&gt; Never' reads as 'foo returns never' i.e. close to 'never returns'. Or we just need NoReturn as replacement for @noreturn, and then think about true bottom type and its name separately.<br>
&gt;<br>
&gt;&gt; On 06.06.2016 16:37, Thorsten Seitz via swift-evolution wrote:<br>
&gt;&gt; My preference from the current suggestions would be Never.<br>
&gt;&gt;<br>
&gt;&gt; -Thorsten<br>
&gt;&gt;<br>
&gt;&gt;&gt; Am 06.06.2016 um 15:24 schrieb Thorsten Seitz via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt;:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Ceylon uses `Nothing` for the bottom type.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; -Thorsten<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Am 05.06.2016 um 20:39 schrieb Charlie Monroe via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt;:<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; While None is probably the best way to describe the opposite of Any, it would be often mistaken for .None (i.e. Optional) by newcomers to the language.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; I'd personally prefer calling it "Nil" (capital N), which really means "nonexistent". The same way ObjC had "nil" for "id" and "Nil" for Class. Possibly, to avoid confusion with nil, calling it Null? Though that might get confused with NSNull, once the NS prefix gets dropped.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Or "Nothing" as in Scala.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; On Jun 5, 2016, at 8:26 PM, Антон Жилин via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt; wrote:<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; The following names were suggested: NoReturn, Bottom, None, Never.<br>
&gt;&gt;&gt;&gt;&gt; I would pick None, because it looks like opposite to Any and fits nicely in generic types.<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; I would prefer the type to be simple, and be implemented as a case-less enum (not a bottom value, as in Haskell).<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; None should be a usual enum, with no compiler magic except that functions returning None are equivalent to current @noreturn.<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; Example 1.<br>
&gt;&gt;&gt;&gt;&gt; let x: None?<br>
&gt;&gt;&gt;&gt;&gt; // ...<br>
&gt;&gt;&gt;&gt;&gt; let y = x!<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; It will trap in runtime not because we discover scary bottom thing, as in Haskell, but because x had value Optional.none at that moment and we asserted otherwise.<br>
&gt;&gt;&gt;&gt;&gt; We could prove that it is always true in this case, but compiler must be stupid about this.<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; Example 2.<br>
&gt;&gt;&gt;&gt;&gt; Compiler should allow including None in structures. Error will show up in constructor, when we will not be able to initialize the field.<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; Example 3.<br>
&gt;&gt;&gt;&gt;&gt; None in an enum case makes that case never appear in values of such a type. But compiler can not know about that.<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; - Anton<br>
&gt;&gt;&gt;&gt;&gt; _______________________________________________<br>
&gt;&gt;&gt;&gt;&gt; swift-evolution mailing list<br>
&gt;&gt;&gt;&gt;&gt; <a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a><br>
&gt;&gt;&gt;&gt;&gt; <a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; _______________________________________________<br>
&gt;&gt;&gt;&gt; swift-evolution mailing list<br>
&gt;&gt;&gt;&gt; <a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a><br>
&gt;&gt;&gt;&gt; <a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
&gt;&gt;&gt; _______________________________________________<br>
&gt;&gt;&gt; swift-evolution mailing list<br>
&gt;&gt;&gt; <a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a><br>
&gt;&gt;&gt; <a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
&gt;&gt; _______________________________________________<br>
&gt;&gt; swift-evolution mailing list<br>
&gt;&gt; <a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a><br>
&gt;&gt; <a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
&gt; _______________________________________________<br>
&gt; swift-evolution mailing list<br>
&gt; <a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a><br>
&gt; <a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
<br>
<br>
_______________________________________________<br>
swift-evolution mailing list<br>
<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a><br>
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
</blockquote></div>
</div></blockquote><blockquote type="cite"><div><span>_______________________________________________</span><br><span>swift-evolution mailing list</span><br><span><a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a></span><br><span><a href="https://lists.swift.org/mailman/listinfo/swift-evolution">https://lists.swift.org/mailman/listinfo/swift-evolution</a></span><br></div></blockquote></body></html>