<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Nov 27, 2013 at 1:51 AM, Frank Shearar <span dir="ltr">&lt;<a href="mailto:frank.shearar@gmail.com" target="_blank">frank.shearar@gmail.com</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I realise that we never have &quot;immutable with a capital I&quot;, hence why I<br>
used the term &quot;purely functional&quot; to try work around the ambiguity<br>
[1]. But the point is that Chris thinks that all Numbers behave like<br>
SmallInteger, Boolean and Point in that they are, indeed, &quot;immutable<br>
by convention&quot;. It sounded to me like Levente was saying that this was<br>
not true. If there are Numbers that are not &quot;immutable by convention&quot;<br>
we should _make_ them immutable by convention ASAP!<br></blockquote><div><br></div><div>Agreed.  But note that there are edge cases in this apparently straight-forward case.  The LargeIntegers need to be mutable while they&#39;re being constructed (they&#39;re not all constructed by primitive code and that primitive code is optional). </div>

<div><br></div><div>But on the &quot;we will never have immutable with a capital I&quot; point I disagree.  The VM can easily enforce immutability.  I actually implemented this for the Newspeak interpreter VM in 2007.  It is a &quot;small matter&quot; of implementation to move it into Cog.  It&#39;s probably two weeks work.  But its not a priority yet.  It might be a good thing to introduce when we move to Spur because there will be other things that will disturb too (image segments, ephemerons to be used, etc).</div>

<div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
frank<br>
<br>
[1] &quot;Immutable with a capital I&quot; requires VM support, IIRC<br>
<br>
On 26 November 2013 22:45, Nicolas Cellier<br>
&lt;<a href="mailto:nicolas.cellier.aka.nice@gmail.com" target="_blank">nicolas.cellier.aka.nice@gmail.com</a>&gt; wrote:<br>
&gt; What Levente says is that this immutability is purely conventional and not<br>
&gt; guaranteed.<br>
&gt; Numbers are technically mutable (but SmallInteger).<br>
&gt; Though, I strongly suggest to not play with such mutations, a mutant Number<br>
&gt; would be a frightening thing mathematically speaking...<br>
&gt;<br>
&gt;<br>
&gt; 2013/11/26 Frank Shearar &lt;<a href="mailto:frank.shearar@gmail.com" target="_blank">frank.shearar@gmail.com</a>&gt;<br>
&gt;&gt;<br>
&gt;&gt; On 26 November 2013 18:02, Levente Uzonyi &lt;<a href="mailto:leves@elte.hu" target="_blank">leves@elte.hu</a>&gt; wrote:<br>
&gt;&gt; &gt; On Tue, 26 Nov 2013, <a href="mailto:commits@source.squeak.org" target="_blank">commits@source.squeak.org</a> wrote:<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; Chris Muller uploaded a new version of Kernel to project The Trunk:<br>
&gt;&gt; &gt;&gt; <a href="http://source.squeak.org/trunk/Kernel-cmm.821.mcz" target="_blank">http://source.squeak.org/trunk/Kernel-cmm.821.mcz</a><br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; ==================== Summary ====================<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; Name: Kernel-cmm.821<br>
&gt;&gt; &gt;&gt; Author: cmm<br>
&gt;&gt; &gt;&gt; Time: 26 November 2013, 10:24:26.281 am<br>
&gt;&gt; &gt;&gt; UUID: 591c1ede-81bc-40d7-8591-af7fe29b2bd5<br>
&gt;&gt; &gt;&gt; Ancestors: Kernel-fbs.820<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; - Don&#39;t let Boolean and Number inherit Object&#39;s really slow<br>
&gt;&gt; &gt;&gt; #veryDeepCopy.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Some Numbers are mutable objects, so this doesn&#39;t sound right.<br>
&gt;&gt;<br>
&gt;&gt; Which Numbers are mutable? They _should_ all be purely functional,<br>
&gt;&gt; like Point (which I know is not a Number).<br>
&gt;&gt;<br>
&gt;&gt; frank<br>
&gt;&gt;<br>
&gt;&gt; &gt; Levente<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; =============== Diff against Kernel-fbs.820 ===============<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; Item was added:<br>
&gt;&gt; &gt;&gt; + ----- Method: Boolean&gt;&gt;veryDeepCopy (in category &#39;copying&#39;) -----<br>
&gt;&gt; &gt;&gt; + veryDeepCopy<br>
&gt;&gt; &gt;&gt; +       &quot;Overridden for performance to avoid #fixDependents.&quot;<br>
&gt;&gt; &gt;&gt; +       ^ self!<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; Item was added:<br>
&gt;&gt; &gt;&gt; + ----- Method: Number&gt;&gt;veryDeepCopy (in category &#39;private&#39;) -----<br>
&gt;&gt; &gt;&gt; + veryDeepCopy<br>
&gt;&gt; &gt;&gt; +       &quot;Overridden for performance.&quot;<br>
&gt;&gt; &gt;&gt; +       ^ self!<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
<br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br>best,<div>Eliot</div>
</div></div>