<div dir="ltr">I held your opinion, although not terribly steadfast. Joe Groff convinced me that I was being pedantic with<br>&quot;&#39;inout&#39; is &#39;value goes in, value-prime goes out&#39;&quot; and the fact that it composes; you could use pure `+=` on a local value inside another pure function. <div><br></div><div>The specific details of `inout` mean that it is a pure implementation of an impure concept. </div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Feb 16, 2017 at 3:32 PM, Hooman Mehr 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><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word">By its classic definition, a function that has inout parameters is not pure. So, again by classic definition, it should have a return value to have any use. But things can quickly get murky if we try to enhance and extend the meaning of pure. Then it becomes important to see at what level of abstraction the function is pure and would would be the practical effect of making compiler aware of it. Identifying classic pure functions helps compiler better optimize the code, so it would be advantageous if the compiler can correctly identify pure functions.  <div><div class="h5"><div> <br><div><blockquote type="cite"><div>On Feb 16, 2017, at 12:03 PM, Nicolas Fezans via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt; wrote:</div><br class="m_7782081245586109696Apple-interchange-newline"><div><div dir="ltr"><div><br></div><div>&gt; <span style="font-size:12.800000190734863px">If it mutates whatever the input is referencing, it would have a side-effect which makes it &quot;not pure&quot; (for my understanding of what “pure” means).</span></div><div><br></div>I am not really sure of it (I have not played around with it until now) but I don&#39;t think that this is an issue with the swift inout, cf. <a href="https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Declarations.html#//apple_ref/doc/uid/TP40014097-CH34-ID545" target="_blank">https://developer.apple.com/<wbr>library/content/documentation/<wbr>Swift/Conceptual/Swift_<wbr>Programming_Language/<wbr>Declarations.html#//apple_ref/<wbr>doc/uid/TP40014097-CH34-ID545</a><div><br></div><div>Nicolas</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Feb 16, 2017 at 8:55 PM, David Sweeris 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><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span><br>
&gt; On Feb 16, 2017, at 11:27 AM, Sean Heber via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt; wrote:<br>
&gt;<br>
&gt; Doesn’t this break down if you can pass a reference as a parameter to a pure function? If that’s not allowed, I guess I must have missed it. Also this seems to require the function has a return value. I suppose generally a pure function without a return value wouldn’t make much sense - unless you pass it a reference.<br>
<br>
</span>If it mutates whatever the input is referencing, it would have a side-effect which makes it &quot;not pure&quot; (for my understanding of what “pure” means).<br>
<br>
- Dave Sweeris<br>
<div class="m_7782081245586109696HOEnZb"><div class="m_7782081245586109696h5">______________________________<wbr>_________________<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/mailma<wbr>n/listinfo/swift-evolution</a><br>
</div></div></blockquote></div><br></div>
______________________________<wbr>_________________<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/<wbr>mailman/listinfo/swift-<wbr>evolution</a><br></div></blockquote></div><br></div></div></div></div><br>______________________________<wbr>_________________<br>
swift-evolution mailing list<br>
<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a><br>
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/<wbr>mailman/listinfo/swift-<wbr>evolution</a><br>
<br></blockquote></div><br></div>