<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="" applecontenteditable="true"><div class="">Remember too that in Swift the <i class="">operator</i>&nbsp;is decoupled from its <i class="">implementation.</i>&nbsp;Plenty of people are using &amp;&amp; for things like constraint or predicate DSLs, where it doesn't short-circuit. Of course, a non-associative version of &amp;&amp; would be quite surprising, so even a custom implementation probably shouldn't rely on the left-associativity.</div><div class=""><br class=""></div><div class="">There's one other reason to prefer this way, though, and that's complexity in the AST. Recall that the RHS of the standard &amp;&amp; (and ||, and ??) is an auto-closure—Swift's way to avoid the eager evaluation of the argument. Right-associativity would result in heavily-nested autoclosures, and even though they'll all be flattened as part of compilation, the AST representation still has to model them that way. So purely from a compiler-implementation perspective left-associativity has a small edge.</div><div class=""><br class=""></div><div class="">I think you're right that we should have picked right-associativity anyway, but at this point I'm not sure it's worth changing it.</div><div class=""><br class=""></div><div class="">Jordan</div><div class=""><br class=""></div><br class=""><div><blockquote type="cite" class=""><div class="">On Feb 17, 2017, at 01:03, Saagar Jha via swift-users &lt;<a href="mailto:swift-users@swift.org" class="">swift-users@swift.org</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><meta http-equiv="Content-Type" content="text/html charset=utf-8" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Left associativity is most likely just a holdover from the C family–not conforming with it would break expectations for programmers coming from these languages. And as you mentioned, the compiler will short-circuit the condition and stop evaluating as soon as it encounters a false condition, so there’s no measurable benefit.<div class=""><br class=""><div class="">
<div style="letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Saagar Jha</div>

</div>
<br class=""><div class=""><blockquote type="cite" class=""><div class="">On Feb 17, 2017, at 12:54 AM, rintaro ishizaki via swift-users &lt;<a href="mailto:swift-users@swift.org" class="">swift-users@swift.org</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class=""><div class="">Hello all,</div><div class=""><br class=""></div><div class="">Why the associativity of <font face="monospace, monospace" class="">Logical{Conjunction,Disjunction}Precedence</font> is "<font face="monospace, monospace" class="">left</font>"?<br class=""></div><div class=""><br class=""></div><div class="">If you write:&nbsp;<font face="monospace, monospace" class="">A &amp;&amp; B &amp;&amp; C</font>, it's grouped as <font face="monospace, monospace" class="">(A &amp;&amp; B) &amp;&amp; C</font>.</div><div class="">This means that the<font face="monospace, monospace" class="">&nbsp;&amp;&amp;</font>&nbsp;function is <i class="">always</i> called twice: <font face="monospace, monospace" class="">(&amp;&amp;)((&amp;&amp;)(A, B), C)</font>.</div><div class="">I feel "right" associativity is more natural: &nbsp;<span style="font-family:monospace,monospace" class="">(&amp;&amp;)(A</span><span style="font-family:monospace,monospace" class="">, (&amp;&amp;)(B, C))</span><font face="arial, helvetica, sans-serif" class="">,</font><br class=""></div><div class=""><font face="arial, helvetica, sans-serif" class="">because the&nbsp;</font><font face="monospace, monospace" class="">&amp;&amp;</font><font face="arial, helvetica, sans-serif" class=""> function is called only once if </font><font face="monospace, monospace" class="">A</font><font face="arial, helvetica, sans-serif" class=""> is </font><font face="monospace, monospace" class="">false</font><font face="arial, helvetica, sans-serif" class="">.</font></div><div class=""><br class=""></div><div class=""><span style="font-family:arial,helvetica,sans-serif" class="">I know that redundant&nbsp;&amp;&amp; calls are optimized away in most cases.</span><br class=""></div><div class=""><div class=""><font face="arial, helvetica, sans-serif" class="">I also know C and C++ standard says: "The &amp;&amp; operator groups left-to-right", and most programming languages follow that.</font></div></div><div class=""><br class=""></div><div class=""><font face="arial, helvetica, sans-serif" class="">But why not "</font><font face="monospace, monospace" class="">right</font><font face="arial, helvetica, sans-serif" class="">"&nbsp;</font>associativity<span style="font-family:arial,helvetica,sans-serif" class="">?</span></div><div class=""><span style="font-family:arial,helvetica,sans-serif" class="">What is the difference between logical operators and&nbsp;</span><font face="monospace, monospace" class="">??</font><font face="arial, helvetica, sans-serif" class="">&nbsp;operator that has "</font><font face="monospace, monospace" class="">right</font><font face="arial, helvetica, sans-serif" class="">" associativity?</font></div><div class=""><br class=""></div></div>
_______________________________________________<br class="">swift-users mailing list<br class=""><a href="mailto:swift-users@swift.org" class="">swift-users@swift.org</a><br class=""><a href="https://lists.swift.org/mailman/listinfo/swift-users" class="">https://lists.swift.org/mailman/listinfo/swift-users</a><br class=""></div></blockquote></div><br class=""></div></div>_______________________________________________<br class="">swift-users mailing list<br class=""><a href="mailto:swift-users@swift.org" class="">swift-users@swift.org</a><br class="">https://lists.swift.org/mailman/listinfo/swift-users<br class=""></div></blockquote></div><br class=""></body></html>