<br><br><div class="gmail_quote">On Mon, Dec 13, 2010 at 6:14 AM, Igor Stasenko <span dir="ltr">&lt;<a href="mailto:siguctua@gmail.com">siguctua@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;">
<br>
| newNil |<br>
newNil := UndefinedObject basicNew.<br>
nil becomeForward: newNil.<br>
(Array new: 1) first == newNil<br>
<br>
In Cog it just hangs VM (under Mac)<br>
<br>
Any ideas how to fix that?<br></blockquote><div><br></div><div>I don&#39;t think it&#39;s worth fixing.  It is advantageous for the performance of the VM to be able to embed nil in machine code without needing to mark it as a GCable object, and nil doesn&#39;t really have to change.  Instead you can change the UndefinedObject class via a become.  So for me it&#39;s not worth fixing and in fact I would actively encourage expecting /not/ to be able to redefine nil, true or false.  For example in Cog better code is generated for conditional branches by assuming that true and false are contiguous (in current images 8 bytes apart).  IMO, there are flexibilities that are so unusual they are not worth paying for, and being able to become nil, true and false are in this category.</div>
<div><br></div><div>best</div><div>Eliot </div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<font color="#888888"><br>
<br>
--<br>
Best regards,<br>
Igor Stasenko AKA sig.<br>
</font></blockquote></div><br>