<br><br><div class="gmail_quote">On Thu, Sep 22, 2011 at 11:28 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;">
<div><div></div><div class="h5">On 22 September 2011 20:06, Eliot Miranda &lt;<a href="mailto:eliot.miranda@gmail.com">eliot.miranda@gmail.com</a>&gt; wrote:<br>
&gt; Hi Igor,<br>
&gt;<br>
&gt; On Thu, Sep 22, 2011 at 10:53 AM, Igor Stasenko &lt;<a href="mailto:siguctua@gmail.com">siguctua@gmail.com</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; On 22 September 2011 19:16, Eliot Miranda &lt;<a href="mailto:eliot.miranda@gmail.com">eliot.miranda@gmail.com</a>&gt; wrote:<br>
&gt;&gt; &gt; (apologies for the duplicate reply; someone needs to sort out their<br>
&gt;&gt; &gt; threading for the benefit of the community ;) )<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; On Thu, Sep 22, 2011 at 2:36 AM, Marcus Denker &lt;<a href="mailto:marcus.denker@inria.fr">marcus.denker@inria.fr</a>&gt;<br>
&gt;&gt; &gt; wrote:<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; Hi,<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; There are two changesets waiting for integrating in 1.4 that have<br>
&gt;&gt; &gt;&gt; serious<br>
&gt;&gt; &gt;&gt; consequences:<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; - Ephemerons. The VM level changes are in the Cog VMs build on Jenkins,<br>
&gt;&gt; &gt;&gt; but have not<br>
&gt;&gt; &gt;&gt;  been integrated in the VMMaker codebase.<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;        <a href="http://code.google.com/p/pharo/issues/detail?id=4265" target="_blank">http://code.google.com/p/pharo/issues/detail?id=4265</a><br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; I would *really* like to back out these changes.  The Ephemeron<br>
&gt;&gt; &gt; implementation is very much a prototype, requiring a hack to determine<br>
&gt;&gt; &gt; whether an object is an ephemeron (the presence of a  marker class in<br>
&gt;&gt; &gt; the<br>
&gt;&gt; &gt; first inst var) that I&#39;m not at all happy with.  There is a neater<br>
&gt;&gt; &gt; implementation available via using an unused instSpec which IMO has<br>
&gt;&gt; &gt; significant advantages (much simpler &amp; faster, instSpec is valid at all<br>
&gt;&gt; &gt; times, including during compaction, less overhead, doesn&#39;t require a<br>
&gt;&gt; &gt; marker<br>
&gt;&gt; &gt; class), and is the route I&#39;m taking with the new<br>
&gt;&gt; &gt; GC/object-representation<br>
&gt;&gt; &gt; I&#39;m working on now.  Note that other than determining whether an object<br>
&gt;&gt; &gt; is<br>
&gt;&gt; &gt; an ephemeron (instSpec/format vs inst var test) the rest of Igor&#39;s code<br>
&gt;&gt; &gt; remains the same.  I&#39;d like to avoid too much VM forking.  Would you all<br>
&gt;&gt; &gt; consider putting these changes on hold for now?<br>
&gt;&gt; &gt; If so, I&#39;ll make the effort to produce prototype changes (in the area of<br>
&gt;&gt; &gt; ClassBuilder and class definition; no VM code necessary as yet) to allow<br>
&gt;&gt; &gt; defining Ephemerons via the int spec route by next week at the latest.<br>
&gt;&gt; &gt;<br>
&gt;&gt;<br>
&gt;&gt; i agree that in my implementation this is a weak point. But its hard<br>
&gt;&gt; to do anything without<br>
&gt;&gt; making changes to object format to identify these special objects.<br>
&gt;&gt;<br>
&gt;&gt; The main story behind this is can we afford to change the internals of<br>
&gt;&gt; VM without being beaten hard<br>
&gt;&gt; by &quot;backwards compatibility&quot; party? :)<br>
&gt;<br>
&gt; I don&#39;t think we get stuck in this at all.  The instSpec/format field has an<br>
&gt; unused value (5 i believe) and this can easily be used for Ephemerons. All<br>
&gt; that is needed is a little image work on these methods:<br>
&gt;     Behavior&gt;&gt;typeOfClass<br>
&gt;         needs to answer e.g. #ephemeron for ephemeron classes<br>
&gt;     ClassBuilder&gt;&gt;computeFormat:instSize:forSuper:ccIndex:<br>
&gt;         needs to accept e.g. #ephemeron for type and pass variable: false<br>
&gt; and weak: true for ephemerons to format:variable:words:pointers:weak:.<br>
&gt;     ClassBuilder&gt;&gt;format:variable:words:pointers:weak:<br>
&gt;         needs to respond to variable: false and weak: true by computing the<br>
&gt; ephemeron instSpec.<br>
&gt;<br>
&gt; Class&gt;&gt;weakSubclass:instanceVariableNames:classVariableNames:poolDictionaries:category:<br>
&gt;<br>
&gt; ClassBuilder&gt;&gt;superclass:weakSubclass:instanceVariableNames:classVariableNames:poolDictionaries:category:<br>
&gt;         need siblings, e.g.<br>
&gt;<br>
&gt; ephemeronSubclass:instanceVariableNames:classVariableNames:poolDictionaries:category<br>
&gt;<br>
&gt; superclass:ephemeronSubclass:instanceVariableNames:classVariableNames:poolDictionaries:category:<br>
&gt; Right?  This is easy.  Then in the VM there are a few places where pointer<br>
&gt; indexability (formats 3 and 4) need to be firmed up to exclude 5, but<br>
&gt; nothing difficult.  We talked about this in email last week.<br>
&gt;<br>
<br>
</div></div>Do you think this will require boosting an image format version number?<br></blockquote><div><br></div><div>That would make sense.  Boosting it so that the new VMs can run older images and newer, ephemeron images, but that ephemeron images won&#39;t open on older VMs.  Yes, this makes perfect sense.</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
I think it is, because clearly, an images which expect ephemerons to<br>
function cannot work with older VMs properly without<br>
support of ephemerons.<br>
<br>
And will lead us to numerous reports &quot;cannot open your f*king image&quot;<br>
with my VM :)<br>
Internally, discussing with Marcus and Stef we came to agreement, that<br>
for each Pharo release we should ship<br>
own version of VM (signed appropriately), so then there will be less<br>
confusion. We also thinking that VM versioning<br>
in future should follow the image versioning, again to make things<br>
simpler and to avoid confusion.<br>
<font color="#888888"><br>
--<br>
Best regards,<br>
Igor Stasenko.<br>
<br>
</font></blockquote></div><br><br clear="all"><div><br></div>-- <br>best,<div>Eliot</div><br>