<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;">Yeah, well I’m not a fan of the ‘syntactically convenience features only’ like `!!` as well, but I wouldn’t mind having the `??` overload now.</div> <br> <div id="bloop_sign_1498687119320745984" class="bloop_sign"><div style="font-family:helvetica,arial;font-size:13px">--&nbsp;<br>Adrian Zubarev<br>Sent with Airmail</div></div> <br><p class="airmail_on">Am 28. Juni 2017 um 23:57:59, Jaden Geller (<a href="mailto:jaden.geller@gmail.com">jaden.geller@gmail.com</a>) schrieb:</p> <blockquote type="cite" class="clean_bq"><span><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div></div><div>



<title></title>


I realize that, which is why I’m strongly against this proposal. I
could potentially be for adding the `??` overload temporarily, but
I don’t really feel it is necessary either.
<div class=""><br class="">
<div>
<blockquote type="cite" class="">
<div class="">On Jun 28, 2017, at 2:55 PM, Adrian Zubarev
&lt;<a href="mailto:adrian.zubarev@devandartist.com" class="">adrian.zubarev@devandartist.com</a>&gt; wrote:</div>
<br class="Apple-interchange-newline">
<div class="">
<div class="bloop_markdown" style="font-family: Helvetica, Arial; font-size: 13px; 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; -webkit-text-stroke-width: 0px; background-color: rgb(254, 254, 254);">
<p style="margin: 15px 0px; -webkit-margin-before: 0px;" class="">
Besides all that<span class="Apple-converted-space">&nbsp;</span><code style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; word-break: normal; word-wrap: normal; -webkit-margin-before: 0px;" class="">Never</code><span class="Apple-converted-space">&nbsp;</span>as a bottom type means that
you can use<span class="Apple-converted-space">&nbsp;</span><code style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; word-break: normal; word-wrap: normal;" class="">fatalError()</code><span class="Apple-converted-space">&nbsp;</span>literally everywhere not only
on the RHS of<span class="Apple-converted-space">&nbsp;</span><code style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; word-break: normal; word-wrap: normal;" class="">??</code>.</p>
<pre style="margin: 15px 0px; font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(204, 204, 204); overflow: auto; padding: 4px 8px; word-break: normal; word-wrap: normal;" class=""><code style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 0px; margin: 0px; padding: 0px; word-break: normal; word-wrap: normal; -webkit-margin-before: 0px;" class="">func foo(_: Int) {}

foo(fatalError())
</code></pre>
<p style="margin: 15px 0px;" class="">That said, we can kill our
application everywhere we would ever imagine, regardless of whether
there is<span class="Apple-converted-space">&nbsp;</span><code style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; word-break: normal; word-wrap: normal; -webkit-margin-before: 0px;" class="">?</code><span class="Apple-converted-space">&nbsp;</span>or<span class="Apple-converted-space">&nbsp;</span><code style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; word-break: normal; word-wrap: normal;" class="">!</code><span class="Apple-converted-space">&nbsp;</span>operator present
somewhere.</p>
<div style="margin: 15px 0px;" class=""><br class="webkit-block-placeholder"></div>
</div>
<div class="bloop_original_html" style="font-family: Helvetica, Arial; font-size: 13px; 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; -webkit-text-stroke-width: 0px; background-color: rgb(254, 254, 254);">
<div id="bloop_customfont" style="font-family: Helvetica, Arial; font-size: 13px; margin: 0px;" class=""><br class=""></div>
<br class="">
<div id="bloop_sign_1498686691508059904" class="bloop_sign">
<div style="font-family: helvetica, arial; font-size: 13px;" class="">--&nbsp;<br class="">
Adrian Zubarev<br class="">
Sent with Airmail</div>
</div>
<br class="">
<p class="airmail_on" style="margin: 15px 0px;">Am 28. Juni 2017 um
23:50:18, Jaden Geller via swift-evolution (<a href="mailto:swift-evolution@swift.org" style="color: rgb(65, 131, 196); background-color: inherit; text-decoration: none;" class="">swift-evolution@swift.org</a>) schrieb:</p>
<blockquote type="cite" class="clean_bq" style="margin: 15px 0px;">
<div class="" style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;">
<div class=""></div>
<div class=""><span style="margin-top: 0px; margin-bottom: 0px;" class="">I’m strongly against not using the `??` operator for `x ??
fatalError()` since that is naturally what will be possible once
the `Never` type is a real bottom type. If you want to use `!!` for
the `x !! “bad things!”` convenience form, I don’t care. But the
`Never` form should definitely, definitely use `??`.</span>
<div class=""><span style="margin-top: 0px; margin-bottom: 0px;" class=""><br class=""></span>
<div class="">
<blockquote type="cite" class="" style="margin: 15px 0px;">
<div class="" style="margin-top: 0px;"><span style="margin-top: 0px; margin-bottom: 0px;" class="">On Jun 28, 2017, at
1:30 PM, Erica Sadun via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="" style="color: rgb(65, 131, 196); background-color: inherit; text-decoration: none;">swift-evolution@swift.org</a>&gt;
wrote:</span></div>
<span style="margin-top: 0px; margin-bottom: 0px;" class=""><br class="Apple-interchange-newline"></span>
<div class="" style="margin-bottom: 0px;">
<div class="" style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;">
<div class=""><span style="margin-top: 0px; margin-bottom: 0px;" class="">Based on the feedback on this thread, I'm coming to the
following conclusions:</span></div>
<div class=""><span style="margin-top: 0px; margin-bottom: 0px;" class=""><br class=""></span></div>
<div class=""><span style="margin-top: 0px; margin-bottom: 0px;" class="">`!!` sends the<span class="Apple-converted-space">&nbsp;</span><i class="">right semantic
message</i>. "Unwrap or die" is an unsafe operation. It is based on
`!`, the unsafe forced unwrap operator, and not on `??`, the safe
fallback nil-coalescing operator. Its symbology should therefore
follow `!` and not `?`.&nbsp;</span></div>
<div class=""><br class=""></div>
<div class="">The `!!` operator should follow the same semantics as
`<font face="Menlo" class="" style="font-size: 11px;">Optional.unsafelyUnwrapped</font>`, which
establishes a precedent for this approach:</div>
<div class=""><br class=""></div>
<blockquote class="" style="margin: 0px 0px 0px 40px; border: none; padding: 0px;">
<div class="" style="margin-top: 0px; margin-bottom: 0px;">&gt;
"<i class="">The unsafelyUnwrapped property provides the same value
as the forced unwrap operator (postfix !). However, in optimized
builds (-O), no check is performed to ensure that the current
instance actually has a value. Accessing this property in the case
of a nil value is a serious programming error and could lead to
undefined behavior or a runtime error.</i>"</div>
</blockquote>
<div class=""><br class=""></div>
<div class="">By following `<font face="Menlo" class="" style="font-size: 9px;">Optional.unsafelyUnwrapped</font>`, this approach
is consistent with<span class="Apple-converted-space">&nbsp;</span><a href="https://github.com/apple/swift/blob/master/docs/ErrorHandlingRationale.rst#logic-failures" class="" style="color: rgb(65, 131, 196); background-color: inherit; text-decoration: none;">https://github.com/apple/swift/blob/master/docs/ErrorHandlingRationale.rst#logic-failures</a></div>
<div class=""><br class=""></div>
<blockquote class="" style="margin: 0px 0px 0px 40px; border: none; padding: 0px;">
<div class="" style="margin-top: 0px; margin-bottom: 0px;">
<i class=""><span class="" style="font-family: Palatino-Roman;">&gt; "Logic failures are intended to
be handled by fixing the code. It means&nbsp;</span><span class="" style="font-family: Palatino-Roman;">checks of logic failures can
be removed if the code is tested enough.</span><br class="" style="font-family: Palatino-Roman;">
<span class="" style="font-family: Palatino-Roman;">Actually checks
of logic failures for various operations,
`!`,&nbsp;</span><span class="" style="font-family: Palatino-Roman;">`array[i]`, `&amp;+` and so on, are
designed and implemented to be removed</span><br class="" style="font-family: Palatino-Roman;">
<span class="" style="font-family: Palatino-Roman;">when we use
`-Ounchecked`. It is useful for heavy computation
like&nbsp;</span><span class="" style="font-family: Palatino-Roman;">image processing and machine
learning in which overhead of those&nbsp;</span><span class="" style="font-family: Palatino-Roman;">checks is not
permissible."</span></i></div>
</blockquote>
<div class=""><br class=""></div>
<div class="">The right hand side should use a string (or more
properly a string autoclosure) in preference to using a
`<font face="Menlo" class="" style="font-size: 11px;">Never</font>`
bottom type or a `<font face="Menlo" class="" style="font-size: 11px;">() -&gt; Never</font>` closure. A string
provides the cleanest user experience, and allows the greatest
degree of self-documentation.&nbsp;</div>
<div class=""><br class=""></div>
<div class="">- A string is cleaner and more readable to type. It
respects DRY, and avoids using *both* the operator and the call to
`fatalError` or `preconditionFailure` to signal an unsafe
condition:</div>
<blockquote class="" style="margin: 0px 0px 0px 40px; border: none; padding: 0px;">
<div class="" style="margin-top: 0px; margin-bottom: 0px;">
<span class="" style="font-family: Menlo; font-size: 11px;">`let
last = array.last !! “Array guaranteed non-empty" //
readable`</span></div>
</blockquote>
<div class="">than:&nbsp;</div>
<blockquote class="" style="margin: 0px 0px 0px 40px; border: none; padding: 0px;">
<div class="" style="margin-top: 0px;"><span class="" style="font-family: Menlo; font-size: 11px;">`let last = array.last !!
fatalError(“Array&nbsp;</span><span class="" style="font-family: Menlo; font-size: 11px;">guaranteed</span><span class="" style="font-family: Menlo; font-size: 11px;">&nbsp;non-empty”) //
redundant, violates DRY`</span></div>
<div class="" style="margin-bottom: 0px;"><br class=""></div>
</blockquote>
<div class="">- A string allows the operator *<i class="">itself</i>* to unsafely fail, just as the unary version of `!`
does now. It does this with additional feedback to the developer
during testing, code reading, and code maintenance. The string
provides a self-auditing in-line annotation of the reason why the
forced unwrap has been well considered, using a language construct
to support this.</div>
<div class=""><br class=""></div>
<div class="">- A string disallows a potentially unsafe `Never`
call that does not reflect a serious programming error, for
example:</div>
<blockquote class="" style="margin: 0px 0px 0px 40px; border: none; padding: 0px;">
<div class="" style="margin-top: 0px; margin-bottom: 0px;">
<span class="" style="font-family: Menlo; font-size: 11px;">let
last = array.last !! f() // where&nbsp;</span><span class="" style="font-family: Menlo; font-size: 11px;">func f() -&gt; Never { while
true {} }</span></div>
</blockquote>
<div class=""><br class=""></div>
<div class="">- Although as several list members mention, a `Never`
closure solution is available today in Swift, so is the `!!`
operator solution. Neither one requires a fundamental change to the
language.</div>
<div class=""><br class=""></div>
<div class="">- Pushing forward on this proposal does not in any
way reflect on adopting the still-desirable `Never` bottom
type.</div>
<div class=""><br class=""></div>
<div class="">
<blockquote type="cite" class="" style="margin: 15px 0px;">
<div class="" style="margin-top: 0px;">On Jun 28, 2017, at 12:42
PM, Tony Allevato via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="" style="color: rgb(65, 131, 196); background-color: inherit; text-decoration: none;">swift-evolution@swift.org</a>&gt;
wrote:</div>
<br class="Apple-interchange-newline">
<div class="" style="margin-bottom: 0px;">
<div dir="ltr" class=""><br class="">
<br class="">
<div class="gmail_quote">
<div dir="ltr" class="">On Wed, Jun 28, 2017 at 11:15 AM Dave
DeLong &lt;<a href="mailto:delong@apple.com" class="" style="color: rgb(65, 131, 196); background-color: inherit; text-decoration: none;">delong@apple.com</a>&gt;
wrote:<br class=""></div>
<blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204); padding-left: 1ex;">
<div class="" style="margin-top: 0px; word-wrap: break-word;">
<div class="">
<blockquote type="cite" class="" style="margin: 15px 0px;">
<div class="" style="margin-top: 0px;">On Jun 28, 2017, at 10:44
AM, Adrian Zubarev via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank" class="" style="color: rgb(65, 131, 196); background-color: inherit; text-decoration: none;">swift-evolution@swift.org</a>&gt;
wrote:</div>
<br class="m_-2274859510633634742Apple-interchange-newline">
<div class="" style="margin-bottom: 0px;">
<div class="">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 class=""><br class=""></div>
</div>
</div>
</blockquote>
<div class=""><br class=""></div>
</div>
</div>
<div class="" style="margin-bottom: 0px; word-wrap: break-word;">
<div class="">
<div class="">I believe we should add it now, but I like the recent
observation that making<span class="Apple-converted-space">&nbsp;</span><font face="Menlo" class=""><span class="" style="font-size: 11px;">??</span></font><span class="Apple-converted-space">&nbsp;</span>suddenly become a potentially
crashing operator violates the expectation that<span class="Apple-converted-space">&nbsp;</span><font face="Menlo" class=""><span class="" style="font-size: 11px;">?</span></font><span class="Apple-converted-space">&nbsp;</span>is an indication of
safety.</div>
</div>
</div>
</blockquote>
<div class=""><br class=""></div>
<div class="">?? 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 class=""><br class=""></div>
<blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204); padding-left: 1ex;">
<div class="" style="margin-top: 0px; word-wrap: break-word;">
<div class="">
<div class=""><br class=""></div>
<div class="">On the other hand, the existing semantics of Swift
are that<span class="Apple-converted-space">&nbsp;</span><font face="Menlo" class=""><span class="" style="font-size: 11px;">!</span></font><span class="Apple-converted-space">&nbsp;</span>is always dangerous, so
making<span class="Apple-converted-space">&nbsp;</span><font face="Menlo" class=""><span class="" style="font-size: 11px;">!!</span></font><span class="Apple-converted-space">&nbsp;</span>be the a potentially crashing
operator is much more consistent with the language.</div>
</div>
</div>
<div class="" style="word-wrap: break-word;">
<div class=""><br class="">
<blockquote type="cite" class="" style="margin: 15px 0px;">
<div class="" style="margin-top: 0px; margin-bottom: 0px;">
<div class="">
<div class="">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.&nbsp;</div>
</div>
</div>
</blockquote>
<div class=""><br class=""></div>
</div>
</div>
<div class="" style="word-wrap: break-word;">
<div class="">
<div class="">I respectfully disagree with your absolute position
on this topic. Even with<span class="Apple-converted-space">&nbsp;</span><font face="Menlo" class=""><span class="" style="font-size: 11px;">Never</span></font><span class="Apple-converted-space">&nbsp;</span>as a bottom type in the
future, it would<span class="Apple-converted-space">&nbsp;</span><i class="">still</i>&nbsp;be
more convenient for me to type:</div>
<div class=""><br class=""></div>
<div class=""><font face="Menlo" class=""><span class="" style="font-size: 11px;">let last = array.last !! “Array must be
non-empty"</span></font></div>
<div class=""><br class=""></div>
<div class="">… than it ever would be to type:</div>
<div class=""><br class=""></div>
<div class=""><font face="Menlo" class=""><span class="" style="font-size: 11px;">let last = array.last ?? fatalError(“Array must
be non-empty”)</span></font></div>
</div>
</div>
<div class="" style="margin-bottom: 0px; word-wrap: break-word;">
<div class="">
<div class=""><br class=""></div>
</div>
</div>
</blockquote>
<div class=""><br class=""></div>
<div class="">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 class=""><br class=""></div>
<div class=""><br class=""></div>
<div class="">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 ??&nbsp;+ autoclosure&nbsp;() -&gt; 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 class=""><br class=""></div>
<div class="">&nbsp;</div>
<blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204); padding-left: 1ex;">
<div class="" style="margin-top: 0px; word-wrap: break-word;">
<div class="">
<div class=""></div>
<div class="">Dave</div>
</div>
</div>
<div class="" style="margin-bottom: 0px; word-wrap: break-word;">
<div class=""><br class="">
<blockquote type="cite" class="" style="margin: 15px 0px;">
<div class="" style="margin-top: 0px; margin-bottom: 0px;">
<div class="">
<div class=""><br class=""></div>
<div class="">@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.&nbsp;</div>
<div class=""><br class=""></div>
<div class="">---</div>
<div class=""><br class=""></div>
<div class="">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 class="">
<br class="">
<div class="m_-2274859510633634742bloop_sign">
<div class="" style="font-family: helvetica, arial; font-size: 13px;">
--&nbsp;<br class="">
Adrian Zubarev<br class="">
Sent with Airmail</div>
</div>
<p class="gmail_quote" style="margin: 15px 0px;">Am 28. Juni 2017
um 18:13:18, Tony Allevato via swift-evolution (<a href="mailto:swift-evolution@swift.org" target="_blank" class="" style="color: rgb(65, 131, 196); background-color: inherit; text-decoration: none;">swift-evolution@swift.org</a>)
schrieb:</p>
<blockquote type="cite" class="gmail_quote" style="margin: 15px 0px;">
<div class="" style="margin-top: 0px; margin-bottom: 0px;">
<div class=""></div>
<div class="">
<div class="">
<div class=""><span class="">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 class="">
<br class="">
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 class="">
<div class=""><span class=""><br class=""></span>
<div class="gmail_quote">
<div class=""><span class="">On Wed, Jun 28, 2017 at 8:52 AM Jacob
Williams via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank" class="" style="color: rgb(65, 131, 196); background-color: inherit; text-decoration: none;">swift-evolution@swift.org</a>&gt;
wrote:<br class=""></span></div>
<blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204); padding-left: 1ex;">
<div class="" style="margin-top: 0px; word-wrap: break-word;">
<div class=""><span class="">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 class=""><span class=""><br class=""></span></div>
<div class=""><span class="">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 class=""><span class=""><br class=""></span></div>
<div class=""><span class="">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 class="" style="word-wrap: break-word;">
<div class=""><span class=""><br class=""></span>
<div class="">
<blockquote type="cite" class="" style="margin: 15px 0px;">
<div class="" style="margin-top: 0px;"><span class="">On Jun 28,
2017, at 9:41 AM, Ben Cohen via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank" class="" style="color: rgb(65, 131, 196); background-color: inherit; text-decoration: none;">swift-evolution@swift.org</a>&gt;
wrote:</span></div>
<span class=""><br class="m_-2274859510633634742m_2866777249939610229m_1922728200947037084Apple-interchange-newline">
</span>
<div class="" style="margin-bottom: 0px;">
<div class="" style="word-wrap: break-word;"><span class=""><br class=""></span>
<div class="">
<blockquote type="cite" class="" style="margin: 15px 0px;">
<div class="" style="margin-top: 0px;"><span class="">On Jun 28,
2017, at 8:27 AM, David Hart via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank" class="" style="color: rgb(65, 131, 196); background-color: inherit; text-decoration: none;">swift-evolution@swift.org</a>&gt;
wrote:</span></div>
<span class=""><br class="m_-2274859510633634742m_2866777249939610229m_1922728200947037084Apple-interchange-newline">
</span>
<div class="" style="margin-bottom: 0px;"><span class=""><span class="" 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 ?? () -&gt; 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 class="">
<div class="">You could say the same about ??</div>
<div class=""><br class=""></div>
<div class="">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.&nbsp;</div>
<div class=""><br class=""></div>
<div class="">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 class=""><br class=""></div>
<div class=""><br class=""></div>
</div>
_______________________________________________<br class="">
swift-evolution mailing list<br class="">
<a href="mailto:swift-evolution@swift.org" target="_blank" class="" style="color: rgb(65, 131, 196); background-color: inherit; text-decoration: none;">
swift-evolution@swift.org</a><br class="">
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" target="_blank" class="" style="color: rgb(65, 131, 196); background-color: inherit; text-decoration: none;">
https://lists.swift.org/mailman/listinfo/swift-evolution</a><br class="">
</div>
</blockquote>
</div>
<br class=""></div>
</div>
_______________________________________________<br class="">
swift-evolution mailing list<br class="">
<a href="mailto:swift-evolution@swift.org" target="_blank" class="" style="color: rgb(65, 131, 196); background-color: inherit; text-decoration: none;">
swift-evolution@swift.org</a><br class="">
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank" class="" style="color: rgb(65, 131, 196); background-color: inherit; text-decoration: none;">
https://lists.swift.org/mailman/listinfo/swift-evolution</a><br class="" style="margin-bottom: 0px;"></blockquote>
</div>
</div>
</div>
_______________________________________________<br class="">
swift-evolution mailing list<br class="">
<a href="mailto:swift-evolution@swift.org" target="_blank" class="" style="color: rgb(65, 131, 196); background-color: inherit; text-decoration: none;">
swift-evolution@swift.org</a><br class="">
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" target="_blank" class="" style="color: rgb(65, 131, 196); background-color: inherit; text-decoration: none;">
https://lists.swift.org/mailman/listinfo/swift-evolution</a><br class="">
</div>
</div>
</blockquote>
</div>
</div>
_______________________________________________<br class="">
swift-evolution mailing list<br class="">
<a href="mailto:swift-evolution@swift.org" target="_blank" class="" style="color: rgb(65, 131, 196); background-color: inherit; text-decoration: none;">
swift-evolution@swift.org</a><br class="">
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" target="_blank" class="" style="color: rgb(65, 131, 196); background-color: inherit; text-decoration: none;">
https://lists.swift.org/mailman/listinfo/swift-evolution</a><br class="">
</div>
</blockquote>
</div>
</div>
</blockquote>
</div>
</div>
_______________________________________________<br class="">
swift-evolution mailing list<br class="">
<a href="mailto:swift-evolution@swift.org" class="" style="color: rgb(65, 131, 196); background-color: inherit; text-decoration: none;">
swift-evolution@swift.org</a><br class="">
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" class="" style="color: rgb(65, 131, 196); background-color: inherit; text-decoration: none;">
https://lists.swift.org/mailman/listinfo/swift-evolution</a><br class="">
</div>
</blockquote>
</div>
<br class=""></div>
_______________________________________________<br class="">
swift-evolution mailing list<br class="">
<a href="mailto:swift-evolution@swift.org" class="" style="color: rgb(65, 131, 196); background-color: inherit; text-decoration: none;">
swift-evolution@swift.org</a><br class="">
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" style="color: rgb(65, 131, 196); background-color: inherit; text-decoration: none;" class="">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br class="">
</div>
</blockquote>
</div>
<br class=""></div>
_______________________________________________<br class="">
swift-evolution mailing list<br class="">
<a href="mailto:swift-evolution@swift.org" style="color: rgb(65, 131, 196); background-color: inherit; text-decoration: none;" class="">swift-evolution@swift.org</a><br class="">
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" style="color: rgb(65, 131, 196); background-color: inherit; text-decoration: none;" class="">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br class="">
</div>
</div>
</blockquote>
</div>
<div class="bloop_markdown" style="font-family: Helvetica, Arial; font-size: 13px; 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; -webkit-text-stroke-width: 0px; background-color: rgb(254, 254, 254);">
</div>
</div>
</blockquote>
</div>
<br class=""></div>


</div></div></span></blockquote></body></html>