<div dir="ltr">Yeah, there will need to be a facility to annotating function purity</div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, May 11, 2016 at 1:00 PM, Joe Groff <span dir="ltr">&lt;<a href="mailto:jgroff@apple.com" target="_blank">jgroff@apple.com</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=""><br>
&gt; On May 11, 2016, at 8:34 AM, Matthew Johnson via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt; wrote:<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; Sent from my iPad<br>
&gt;<br>
&gt;&gt; On May 11, 2016, at 10:26 AM, Sean Heber via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; I kind of agree with the logic of that, but imagine the following:<br>
&gt;&gt;<br>
&gt;&gt; class Test {<br>
&gt;&gt; let hello = “hello”<br>
&gt;&gt; var subject = “world”<br>
&gt;&gt; var phrase: String { return hello + “, “ + subject }<br>
&gt;&gt; }<br>
&gt;&gt;<br>
&gt;&gt; In this scenario, “subject” can be changed.. and that changes the result of “phrase”. Things like this are why computed properties are “var”.<br>
&gt;<br>
&gt; This example would still be required to be var because it accesses a var in its implementation.<br>
&gt;<br>
&gt; I like the idea of allowing this feature, but only in cases where the compiler can verify immutable semantics.  Having it may help drive other features that could expand the cases the compiler can verify.  That would be great as this is a direction I would like to see Swift take in the future.<br>
<br>
</span>Yeah, this is why we don&#39;t currently allow computed &quot;let&quot; properties. We&#39;d only want to do so once we have the language facilities to ensure a computed &#39;let&#39; property is immutable and has no observable side effects.<br>
<span class="HOEnZb"><font color="#888888"><br>
-Joe<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
&gt;&gt;<br>
&gt;&gt; l8r<br>
&gt;&gt; Sean<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;&gt; On May 11, 2016, at 8:25 AM, Alexander Momchilov via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt; wrote:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; I came an interesting SO question which pointed out a strange quirk: a computed property must always use the &quot;var&quot; keyword, even if it&#39;s read-only, and only referencing other immutable data.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; class Test {<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; let hello = &quot;hello&quot;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; let world = &quot;world&quot;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; var phrase: String { //why must this be &#39;var&#39;?<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; return self.hello + self.<br>
&gt;&gt;&gt; world<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; }<br>
&gt;&gt;&gt; }<br>
&gt;&gt;&gt; It would be more appropriate for such a read-only, immutable property, to use the &quot;let&quot; syntax, so that its immutability is correctly expressed.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Thoughts?<br>
&gt;&gt;&gt; _______________________________________________<br>
&gt;&gt;&gt; swift-evolution mailing list<br>
&gt;&gt;&gt; <a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a><br>
&gt;&gt;&gt; <a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
&gt;&gt;<br>
&gt;&gt; _______________________________________________<br>
&gt;&gt; swift-evolution mailing list<br>
&gt;&gt; <a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a><br>
&gt;&gt; <a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; swift-evolution mailing list<br>
&gt; <a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a><br>
&gt; <a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
<br>
</div></div></blockquote></div><br></div>