<div dir="ltr">On Wed, Jun 28, 2017 at 8:13 PM, Erica Sadun <span dir="ltr">&lt;<a href="mailto:erica@ericasadun.com" target="_blank">erica@ericasadun.com</a>&gt;</span> wrote:<br><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><br><div><blockquote type="cite"><span class=""><div>On Jun 28, 2017, at 6:26 PM, Xiaodi Wu &lt;<a href="mailto:xiaodi.wu@gmail.com" target="_blank">xiaodi.wu@gmail.com</a>&gt; wrote:</div><br class="m_-9145858069232967045Apple-interchange-newline"></span><div><div dir="ltr"><span class="">On Wed, Jun 28, 2017 at 5:05 PM, ilya via swift-evolution <span dir="ltr">&lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt;</span> wrote:<br></span><span class=""><div class="gmail_extra"><div class="gmail_quote"><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 dir="ltr"><div>One could, for example, extend the existing<b> documentation markup sign</b> <b>///</b> to pick up text as force unwrap messages:</div><div><br></div><div><div><span style="font-family:Menlo;font-size:11px">    `let last = array.last! /// Array guaranteed non-empty`</span></div></div></div></blockquote><div><br></div><div>I did not call this out initially, but I feel like this is an important point to address:</div><div><br></div><div>In the initial example, repeated here in largely identical form, the desired comment is &quot;array must be non-empty.&quot; In what way does that provide more information than a bare `!`?</div></div></div></span></div></div></blockquote><div><br></div>That is why I changed it back to my &quot;<i>guarantee</i>&quot; version when replying:</div><div><br></div><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div><font face="Menlo" style="font-size:11px">guard !array.isEmpty else { ... }</font></div><div><font face="Menlo" style="font-size:11px">/* ... */</font></div><div><font face="Menlo" style="font-size:11px">let finalElement  = array.last !! &quot;Array guaranteed non-empty&quot;</font></div></blockquote><div><br></div><div>The expected unwrap behavior is clear and audited, even when other code appears between the guard statement and the explained forced unwrap. </div><div><br></div><div>As you point out, it&#39;s senseless to annotate a logical assertion known to be true (&quot;must be non-empty&quot;) <i>unless that annotation enhances the expression of why and how this otherwise dangerous operation is taking place</i>. That explanation forms the mission statement of the `!!` operator.</div></div></blockquote><div><br></div><div>Sorry, I fail to see how either wording enhances the expression of why this operation is taking place. The entire explanation seems self-evident to me in `!`.</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><div>By explaining, the `!!` operator differs from the direct use of `!`. It explains a fact known to hold true that allows the lhs to safely unwrap. It provides this in a way that is succinct and readable. It naturally moves with the line of code it is part of. The adoption of `!!` has already broadly been integrated into any number idiomatic libraries. Coders have done so to differentiate an <i>audited known fact</i> from the stray `!`, which may or may not be followed by a comment.</div></div></blockquote><div><br></div><div>_Every_ use of `!` is an assertion that it is an audited known fact that the operand is not nil. What I&#39;m saying is that, so far in this conversation, I have seen no example where any other known fact on the RHS of your proposed operator is not trivially deducible from the built-in known fact signified by `!` itself.</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>One last point: it is not the mission of document comments to provide any role beyond annotation. They are not there to guarantee preconditions, assertions, or any other behavioral contracts. They merely document.</div><span class="HOEnZb"><font color="#888888"><div><br></div><div>-- Erica</div><div><br></div><div><br></div><div><br></div></font></span></div></blockquote></div><br></div></div>