<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Feb 12, 2016, at 12:41 PM, Ross O'Brien &lt;<a href="mailto:narrativium+swift@gmail.com" class="">narrativium+swift@gmail.com</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class="">I have a suggestion.<div class="">Suppose we think of 'switch' as being like a non-optional type. The compiler does its thing and tries to ensure that the switched expression will match something, and enforces a default if it cannot verify a matching state.</div><div class="">Could we force the switch? i.e. suffix the 'switch' keyword with an exclamation mark, to say: the programmer insists that one of these cases will match; there's no need for a default case, but if nothing matches then crash.</div><div class=""><br class=""></div></div></div></blockquote><div><br class=""></div><div>This doesn’t solve the more general problem&nbsp;<font size="2" class="">— namely, that of required deep knowledge of the standard libraries.</font></div><div><font size="2" class=""><br class=""></font></div><div><font size="2" class="">A more general solution would be to provide a way for API writers to issue (heuristic) warnings for suboptimal usage of their APIs.</font></div><br class=""><blockquote type="cite" class=""><div class=""><div dir="ltr" class=""><div class="">For example:</div><div class=""><span style="font-size:13px" class="">let x:Int</span></div><div class="">switch! expression</div><div class="">{</div><div class="">&nbsp; &nbsp; case ... { x = 1 }</div><div class="">&nbsp; &nbsp; case ... { x = 2 }</div><div class="">&nbsp; &nbsp; // no default. the ! signifies that the app should crash if none of these cases matches the expression</div><div class="">}<br class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""></div></div><div class="gmail_extra"><br class=""><div class="gmail_quote">On Fri, Feb 12, 2016 at 5:32 PM, Chris Lattner via swift-evolution <span dir="ltr" class="">&lt;<a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a>&gt;</span> wrote:<br class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On Feb 12, 2016, at 9:27 AM, Amir Michail &lt;<a href="mailto:a.michail@me.com" class="">a.michail@me.com</a>&gt; wrote:<br class="">
&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; What’s wrong with having the compiler explicitly check for “false”?<br class="">
&gt;&gt;<br class="">
&gt;&gt; Weird special cases make the compiler less predictable.<br class="">
&gt;<br class="">
</span>&gt; True, but not having them requires deeper knowledge of the standard libraries.<br class="">
&gt;<br class="">
&gt; In practice, just checking for “false” would solve this problem.<br class="">
<br class="">
That is not what you’re actually proposing.&nbsp; You are proposing that the compiler encode special knowledge of the precondition *library function* into the compiler, and teach it about a single special case.&nbsp; We don’t like the compiler to have special cases like this for a large number of reasons, in particular, if we did this, someone would file a bug asking for *their* equivalent reimplementation of precondition to have the same magic blessed behavior.<br class="">
<br class="">
This is a slippery slope that leads to a lot of complexity downstream, it is better to keep the compiler simple and predictable.&nbsp; Also, as other people have pointed out, this has already been solved for you: just use preconditionFailure.<br class="">
<div class="HOEnZb"><div class="h5"><br class="">
-Chris<br class="">
_______________________________________________<br class="">
swift-evolution mailing list<br class="">
<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a><br class="">
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank" class="">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br class="">
</div></div></blockquote></div><br class=""></div>
</div></blockquote></div><br class=""></body></html>