<html><head><style>body{font-family:Helvetica,Arial;font-size:13px}</style></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;">Exactly, that’s what I was aiming for by the `@autoclosure () -> Never`.</div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;"><br></div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;">PS: I want to apologize for tons of typos I made in my last post. Just realized it now :/</div> <br> <div id="bloop_sign_1498686043939825920" class="bloop_sign"><div style="font-family:helvetica,arial;font-size:13px">-- <br>Adrian Zubarev<br>Sent with Airmail</div></div> <br><p class="airmail_on">Am 28. Juni 2017 um 20:42:38, Tony Allevato (<a href="mailto:tony.allevato@gmail.com">tony.allevato@gmail.com</a>) schrieb:</p> <blockquote type="cite" class="clean_bq"><span><div><div></div><div>
<title></title>
<div dir="ltr"><br>
<br>
<div class="gmail_quote">
<div dir="ltr">On Wed, Jun 28, 2017 at 11:15 AM Dave DeLong
<<a href="mailto:delong@apple.com">delong@apple.com</a>>
wrote:<br></div>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div style="word-wrap:break-word">
<div>
<blockquote type="cite">
<div>On Jun 28, 2017, at 10:44 AM, Adrian Zubarev via
swift-evolution <<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>> wrote:</div>
<br class="m_-2274859510633634742Apple-interchange-newline">
<div>
<div>Well the main debate is that, we all want early access to a
feature that will be part of Swift as soon as `Never` becomes the
bottom type. When this happens the `??` will automatically support
the pitched behavior. Until then if we all agree that we should add
it now in a way that will not break anything we can simply add an
overload to `??` as I previously showed.
<div><br></div>
</div>
</div>
</blockquote>
<div><br></div>
</div>
</div>
<div style="word-wrap:break-word">
<div>
<div>I believe we should add it now, but I like the recent
observation that making <font face="Menlo"><span style="font-size:11px">??</span></font> suddenly become a potentially
crashing operator violates the expectation that <font face="Menlo"><span style="font-size:11px">?</span></font> is an
indication of safety.</div>
</div>
</div>
</blockquote>
<div><br></div>
<div>?? does *not* become a potentially crashing operator. The
*fatalError* (or whatever else the user chooses to put there) on
the right-hand side is the crashing operation.</div>
<div><br></div>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div style="word-wrap:break-word">
<div>
<div><br></div>
<div>On the other hand, the existing semantics of Swift are that
<font face="Menlo"><span style="font-size:11px">!</span></font> is
always dangerous, so making <font face="Menlo"><span style="font-size:11px">!!</span></font> be the a potentially crashing
operator is much more consistent with the language.</div>
</div>
</div>
<div style="word-wrap:break-word">
<div><br>
<blockquote type="cite">
<div>
<div>
<div>There is no need for `!!` because it will fade in the future.
If you think of `Never` as a bottom type now then `??` will already
make total sense. The default value for T from rhs might be T or
Never. </div>
</div>
</div>
</blockquote>
<div><br></div>
</div>
</div>
<div style="word-wrap:break-word">
<div>
<div>I respectfully disagree with your absolute position on this
topic. Even with <font face="Menlo"><span style="font-size:11px">Never</span></font> as a bottom type in the
future, it would <i>still</i> be more convenient for me to
type:</div>
<div><br></div>
<div><font face="Menlo"><span style="font-size:11px">let last =
array.last !! “Array must be non-empty"</span></font></div>
<div><br></div>
<div>… than it ever would be to type:</div>
<div><br></div>
<div><font face="Menlo"><span style="font-size:11px">let last =
array.last ?? fatalError(“Array must be
non-empty”)</span></font></div>
</div>
</div>
<div style="word-wrap:break-word">
<div>
<div><br></div>
</div>
</div>
</blockquote>
<div><br></div>
<div>There is a very high bar for additions to the standard
library—a new operator added to the language is going to be around
(1) forever, or (2) indefinitely with some migration cost to users
if it's ever removed. Shaving off a few keystrokes doesn't quite
meet that bar—especially when an alternative has been shown to work
already that provides the same functionality, is more general (not
coupled to fatalError or String messages), and that fits better
into Swift's design.</div>
<div><br></div>
<div><br></div>
<div>To make sure I'm not being too much of a downer, I would
completely support this broader feature being implemented by that
alternative: the ?? + autoclosure () -> Never combo.
Then once Never does become a true bottom type, I believe it could
be removed and the calling code would still *just work*.</div>
<div><br></div>
<div> </div>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div style="word-wrap:break-word">
<div>
<div>Dave</div>
</div>
</div>
<div style="word-wrap:break-word">
<div><br>
<blockquote type="cite">
<div>
<div>
<div><br></div>
<div>@erica: the rhs argument should be called something like
`noreturnOrError` and not `defaultValue`. And we should keep in
mind that when Never becomes the bottom type we have to remove that
overload from stdlib, because otherwise it will be
ambiguous. </div>
<div><br></div>
<div>---</div>
<div><br></div>
<div>On the other hand if we tackle a different operator then we
should rething the 'default value operator' because the second ?
signals an optional but not a non-optional or an inplicit unwrapped
operator. In that case I personally thing ?! would make more sense.
Unwrap or (non-optional | IUO | trap/die)<br>
<br>
<div class="m_-2274859510633634742bloop_sign">
<div style="font-family:helvetica,arial;font-size:13px">
-- <br>
Adrian Zubarev<br>
Sent with Airmail</div>
</div>
<p class="gmail_quote">Am 28. Juni 2017 um 18:13:18, Tony Allevato
via swift-evolution (<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>) schrieb:</p>
<blockquote type="cite" class="gmail_quote">
<div>
<div>
<div>
<div><span>It's hard for me to articulate, but "foo !! message"
feels a little too much like a Perl-ism for my taste. Objectively
that's not a great criticism on its own, but I just don't like the
"smell" of an operator that takes a value on one side and a string
for error reporting purposes on the other. It doesn't feel like it
fits the style of Swift. I prefer a version that makes the call to
fatalError (and thus, any other non-returning handler) explicitly
written out in code.<br>
<br>
So, if the language can already support this with ?? and
autoclosure/Never as was shown above, I'd rather see that added to
the language instead of a new operator that does the same thing
(and is actually less general).</span></div>
</div>
<div>
<div><span><br></span>
<div class="gmail_quote">
<div><span>On Wed, Jun 28, 2017 at 8:52 AM Jacob Williams via
swift-evolution <<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>>
wrote:<br></span></div>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div style="word-wrap:break-word">
<div><span>I feel that the !! operator would be necessary for
indicating that if this fails then something went horribly wrong
somewhere and we should throw the fatalError. This allows the
inclusion of optimizations using -Ounchecked and is clear that this
is an operation that could result in a runtime error just like
force unwrapping.</span></div>
<div><span><br></span></div>
<div><span>If we want code clarity and uniformity, then I think !!
Is much better than ?? because it goes right along with the single
! Used for force unwrapping. However, this does depend on if the
operator would be returning some kind of error that would cause the
program to exit.</span></div>
<div><span><br></span></div>
<div><span>I think the ?? operator should not cause a program to
exit early. It goes against optional unwrapping principles. I think
code could get very confusing if some ? would return nil/a default
value, and others would be causing your program to crash and exit.
The ? operators should always be classified as safe
operations.</span></div>
</div>
<div style="word-wrap:break-word">
<div><span><br></span>
<div>
<blockquote type="cite">
<div><span>On Jun 28, 2017, at 9:41 AM, Ben Cohen via
swift-evolution <<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>>
wrote:</span></div>
<span><br class="m_-2274859510633634742m_2866777249939610229m_1922728200947037084Apple-interchange-newline">
</span>
<div>
<div style="word-wrap:break-word"><span><br></span>
<div>
<blockquote type="cite">
<div><span>On Jun 28, 2017, at 8:27 AM, David Hart via
swift-evolution <<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>>
wrote:</span></div>
<span><br class="m_-2274859510633634742m_2866777249939610229m_1922728200947037084Apple-interchange-newline">
</span>
<div><span><span style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant-caps: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">
Count me in as a strong proponent of ?? () -> Never. We don't
need to burden the language with an extra operator just for
that.</span><br class="m_-2274859510633634742m_2866777249939610229m_1922728200947037084Apple-interchange-newline">
</span></div>
</blockquote>
</div>
<br>
<div>You could say the same about ??</div>
<div><br></div>
<div>The concern that an additional operator (and one that, IMO,
fits well into existing patterns) is so burdensome seems way
overweighted in this discussion IMO. </div>
<div><br></div>
<div>Adding the operator, and encouraging its use, will help foster
better understanding of optionals and legitimate use of
force-unwrapping in a way that I don’t think `?? fatalError`
could.</div>
<div><br></div>
<div><br></div>
</div>
_______________________________________________<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" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
</div>
</blockquote>
</div>
<br></div>
</div>
_______________________________________________<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>
</div>
_______________________________________________<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" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
</div>
</div>
</blockquote>
</div>
</div>
_______________________________________________<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" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
</div>
</blockquote>
</div>
</div>
</blockquote>
</div>
</div>
</div></div></span></blockquote></body></html>