<div dir="ltr">&gt; <span style="font-size:12.800000190734863px">Not only that, but even if you pass a value type as a parameter, that value type might have reference types as ivars.</span><div><span style="font-size:12.800000190734863px"><br></span></div><div><span style="font-size:12.800000190734863px">I think that arguments passed to a pure function shall be checked against containing such references or objects that contains such references themselves: I guess that this check could be made by the compiler.</span></div><div><span style="font-size:12.800000190734863px">Programmers will then have to see whether they choose a) to go to &quot;pure value-type arguments&quot; (i.e. not containing directly nor indirectly such references) and be able to declare some of their functions as pure or b) to keep these references and not declare the corresponding functions as pure.</span></div><div><span style="font-size:12.800000190734863px"><br></span></div><div><span style="font-size:12.800000190734863px">This seems to me to be the first and relatively easy way to solve this problem. Later on I could imagine even that the compiler would be clever enough to check whether the contained references are used (regardless of whether it is just for a read access or also to mutate some values existing outside the scope of the function itself) and if they are not used the purity of the function could be validated also in that case.</span></div><div><span style="font-size:12.800000190734863px"><br></span></div><div><span style="font-size:12.800000190734863px"><br></span></div><div><span style="font-size:12.800000190734863px">Nicolas</span></div><div><span style="font-size:12.800000190734863px"><br></span></div><div><span style="font-size:12.800000190734863px"><br></span></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Feb 17, 2017 at 8:26 AM, Charles Srstka 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 class="">On Feb 16, 2017, at 1:27 PM, Sean Heber via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org">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>Not only that, but even if you pass a value type as a parameter, that value type might have reference types as ivars. So since any call to any reference type can potentially mutate it, and any call to any value type could call through to a reference type which might then be mutated, it does seem that purity is quite difficult to guarantee.<br>
<br>
Charles<br>
<div class="HOEnZb"><div class="h5"><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>
</div></div></blockquote></div><br></div>