<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 Jan 7, 2016, at 6:53 PM, Austin Zheng &lt;<a href="mailto:austinzheng@gmail.com" class="">austinzheng@gmail.com</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class="">So we go from knowing that variables are never accessed in an uninitialized state at compile-time (because the compiler checks for us), to not knowing if a variable is uninitialized at runtime until we check for 'none'? If I wanted a variable that could be uninitialized I would prefer to use an IUO; that way at least I can see the '!' in the type definition and be aware that I need to check for nil before I can properly use the variable if needed.<div class=""><br class=""></div></div></div></blockquote><div><br class=""></div><div>You could still use “!” in the type definition to indicate a variable that may be uninitialized at various points. Such a variable need not be an optional but it could be. None and nil are different things.</div><br class=""><blockquote type="cite" class=""><div class=""><div dir="ltr" class=""><div class="">More generally, I am strongly against turning compile-time checks into runtime checks unless there's a compelling reason.</div><div class=""><br class=""></div><div class="">Austin</div></div><div class="gmail_extra"><br class=""><div class="gmail_quote">On Thu, Jan 7, 2016 at 3:44 PM, Amir Michail 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"><div style="word-wrap:break-word" class=""><br class=""><div class=""><span class=""><blockquote type="cite" class=""><div class="">On Jan 7, 2016, at 3:15 PM, Jarod Long &lt;<a href="mailto:jrd@lng.la" target="_blank" class="">jrd@lng.la</a>&gt; wrote:</div><br class=""><div class=""><div style="word-wrap:break-word" class=""><div class="">None is really just another way of saying something is nil, and a type suffix to allow assigning none is exactly equivalent to implicitly-unwrapped optionals, so I don't see any value in replacing them with this feature.</div></div></div></blockquote><div class=""><br class=""></div></span><div class="">“None" means a variable is uninitialized. “Nil" need not mean that.</div><div class=""><br class=""></div><div class="">Reading an uninitialized variable is an error. Reading a nil variable need not be.</div><div class=""><br class=""></div><div class="">With “none", you can have uninitialized variables without resorting to optionals or implicitly unwrapped optionals.</div><br class=""><blockquote type="cite" class=""><div class=""><div style="word-wrap:break-word" class=""><span class=""><div class=""><br class=""></div><div class="">Not requiring a type suffix to assign none would be equivalent to allowing assignment of nil to any type, making everything an implicitly-unwrapped optional. You lose the compile-time nil safety that optionals provide, and the compiler likely loses many optimization opportunities because there are many situations where it can't know (or it is very difficult to know) whether a value could have possibly been assigned none at some point.</div><div class=""><br class=""></div><div class="">I understand the desire to reduce optionality to make code cleaner, but this kind of feature actually hides complexity and makes things more difficult in the long run. Implicitly-unwrapped optionals are a good compromise between cleanliness and effectively communicating when something can fail at run time.</div><div class=""><br class=""></div><div class="">Jarod</div><br class=""></span><div class=""><blockquote type="cite" class=""><div class=""><div class="h5"><div class="">On Jan 7, 2016, at 11:41, Amir Michail via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a>&gt; wrote:</div><br class=""></div></div><div class=""><div class=""><div class="h5"><div style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px" class=""><br class=""><br class="">Sent from my iPad</div><div style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px" class=""><br class="">On Jan 7, 2016, at 2:34 PM, Félix Cloutier &lt;<a href="mailto:felixcca@yahoo.ca" target="_blank" class="">felixcca@yahoo.ca</a>&gt; wrote:<br class=""><br class=""></div><blockquote type="cite" style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px" class=""><div class="">Yes, but following your suggestion, there may not be a difference between a non-optional value and an implicitly-wrapped optional, meaning that there will be a lot more of them.<br class=""></div></blockquote><div style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px" class=""><br class=""></div><div style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px" class="">Variables that are never assigned "none" need not have these runtime checks. Alternatively, you can have a type suffix similar to ? to indicate that a variable may be in an uninitialized state.&nbsp;</div><br style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px" class=""><blockquote type="cite" style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px" class=""><div class=""><div class=""><br class=""><span style="font-family:'Lucida Grande';font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;float:none;display:inline!important" class="">Félix</span></div><br class=""><div class=""><blockquote type="cite" class=""><div class="">Le 7 janv. 2016 à 14:10:44, Amir Michail &lt;<a href="mailto:a.michail@me.com" target="_blank" class="">a.michail@me.com</a>&gt; a écrit :</div><br class=""><div class=""><div style="word-wrap:break-word" class=""><br class=""><div class=""><blockquote type="cite" class=""><div class="">On Jan 7, 2016, at 2:09 PM, Félix Cloutier &lt;<a href="mailto:felixcca@yahoo.ca" target="_blank" class="">felixcca@yahoo.ca</a>&gt; wrote:</div><br class=""><div class=""><div style="word-wrap:break-word" class="">That would leave you with runtime checks instead of compile-time checks and I totally disagree with that.<br class=""><div class=""><br class=""></div></div></div></blockquote><div class=""><br class=""></div><div class="">Implicitly unwrapped optionals do runtime checks also.</div><br class=""><blockquote type="cite" class=""><div class=""><div style="word-wrap:break-word" class=""><div class=""><span style="font-family:'Lucida Grande';font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;float:none;display:inline!important" class="">Félix</span></div><br class=""><div class=""><blockquote type="cite" class=""><div class="">Le 7 janv. 2016 à 13:45:21, Amir Michail &lt;<a href="mailto:a.michail@me.com" target="_blank" class="">a.michail@me.com</a>&gt; a écrit :</div><br class=""><div class=""><div style="word-wrap:break-word" class=""><br class=""><div class=""><blockquote type="cite" class=""><div class="">On Jan 7, 2016, at 1:40 PM, Félix Cloutier &lt;<a href="mailto:felixcca@yahoo.ca" target="_blank" class="">felixcca@yahoo.ca</a>&gt; wrote:</div><br class=""><div class=""><div style="word-wrap:break-word" class="">An implicitly-unwrapped optional would do almost that, no?<br class=""><div class=""><br class=""></div></div></div></blockquote><div class=""><br class=""></div><div class="">You can use “none” to eliminate implicitly unwrapped optionals from the language.</div><br class=""><blockquote type="cite" class=""><div class=""><div style="word-wrap:break-word" class=""><div class=""><span style="font-family:'Lucida Grande';font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;float:none;display:inline!important" class="">Félix</span></div><br class=""><div class=""><blockquote type="cite" class=""><div class="">Le 7 janv. 2016 à 12:46:53, Amir Michail via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a>&gt; a écrit :</div><br class=""><div class=""><div class="">Examples:<br class=""><br class="">var x:Int = none // uninitialized but not an optional<br class=""><br class="">print(x) // run-time error as x is uninitialized<br class=""><br class="">if x == nil { … } // compile time error… x can never be nil because it is not an optional<br class=""><br class="">if x == none { x = 2 } // … but it can be uninitialized<br class=""><br class="">Optionals can also be uninitialized:<br class=""><br class="">var y:Int? = none // uninitialized and an optional<br class=""><br class="">if y == nil { … } // run-time error as y is uninitialized<br class=""><br class="">y = nil<br class=""><br class="">if y == nil { … } // fine<br class=""><br class="">_______________________________________________<br class="">swift-evolution mailing list<br class=""><a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a><br class=""><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" 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=""></div></div></blockquote></div><br class=""></div></div></blockquote></div><br class=""></div></div></blockquote></div><br class=""></div></blockquote></div></div><img src="https://u2002410.ct.sendgrid.net/wf/open?upn=8K1sNvSH2KR-2BkHEodrUTpf34ATsvtwNhFabfhxmB11RfPZORvm3qiYpH119HK-2BtUiKmVo0e7KNU0BkWmEMqCovcmHjrvs0Qr0Rsz4EPHpW-2FDqGL1fhfF6z4nwardSGPcsABLTL5X4OVmZi5HatJF0uAUBItCH2t-2F95hCWoWgpns8ziSfO009LCDjv-2FCTKoc1c-2FtEX-2B1x8aysOV-2BCVkUDig-3D-3D" alt="" width="1" height="1" border="0" style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;min-height:1px!important;width:1px!important;border-width:0px!important;margin:0px!important;padding:0px!important" class=""><span style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;float:none;display:inline!important" class=""><span class="">&nbsp;</span></span><span style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;float:none;display:inline!important" class="">_______________________________________________</span><span class=""><br style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px" class=""><span style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;float:none;display:inline!important" class="">swift-evolution mailing list</span><br style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px" class=""><a href="mailto:swift-evolution@swift.org" style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px" target="_blank" class="">swift-evolution@swift.org</a><br style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px" class=""><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px" target="_blank" class="">https://lists.swift.org/mailman/listinfo/swift-evolution</a></span></div></blockquote></div><br class=""></div></div></blockquote></div><br class="">
<img src="https://u2002410.ct.sendgrid.net/wf/open?upn=7XtDdMHRjqIUi4tzSjSp2pWQIyxYdP6woIWn4vwV5gc6cdrum5AL7e7AAjbWQoKDyxjZHIkJSKP9dvwAsbFVpXdpDpn8TNDzhn1h-2BW-2BYG1LkaZCOJk9NK9FgB1S3fj5SqIlAIBrJqjry65F6Ou1dgocTAhumGIZkYFtfAINmRRArCRL6YVWEXq2ocuHEchTp9MxGWvU6e25eP1mEYvgvsSvZgADRYrnXsrprkia02WA-3D" alt="" width="1" height="1" border="0" style="min-height:1px!important;width:1px!important;border-width:0!important;margin-top:0!important;margin-bottom:0!important;margin-right:0!important;margin-left:0!important;padding-top:0!important;padding-bottom:0!important;padding-right:0!important;padding-left:0!important" class="">
</div>
<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="">
<br class=""></blockquote></div><br class=""></div>
</div></blockquote></div><br class=""></body></html>