<div dir="ltr"><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small;color:rgb(0,0,0)"><span style="font-family:arial,sans-serif;color:rgb(34,34,34)">On Sat, Oct 7, 2017 at 2:17 AM, David T. Lewis </span><span dir="ltr" style="font-family:arial,sans-serif;color:rgb(34,34,34)"><<a href="mailto:lewis@mail.msen.com" target="_blank">lewis@mail.msen.com</a>></span><span style="font-family:arial,sans-serif;color:rgb(34,34,34)"> wrote:</span><br></div><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span>On Fri, Oct 06, 2017 at 03:48:56PM +0200, Bert Freudenberg wrote:<br></span><span>> It's all class-based. E.g. if the shape of a class changed (new / renamed<br>
> inst vars) that class can provide a "conversion method" that creates an<br>
> instance with the new layout from the old inst vars (that are loaded as a<br>
> dictionary). There still is a preference (conversionMethodsAtFileOut) that<br>
> used to prompt people to provide these conversion methods when they changed<br>
> a class. But it didn't survive the transition to Monticello, we now have to<br>
> remember to write conversion methods for instances that may be stored in a<br>
> project.<br>
<br>
</span>To check my understanding, the "conversion method" might be something like<br>
#storeDataOn: and #readDataFrom:size: like what I described for DateAndTime,<br>
is that right?<br></blockquote><div><br></div><div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small;color:rgb(0,0,0)">​No, it's those weirdly-named methods like Hannes just made in Morphic-hjh.1349.mcz. The <span style="font-family:arial,sans-serif;color:rgb(34,34,34)">store / read methods aren't used per-object. </span><span style="color:rgb(34,34,34);font-family:arial,sans-serif">This would have been too expensive back in the interpreter days on slow CPUs, that's why the project is stored as an image-segment, and the segment is written to a SmartRefStream with its out-pointers (references to objects outside the segment, e.g. classes).</span></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small;color:rgb(0,0,0)"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small;color:rgb(0,0,0)">The SmartRefStream is only used to resolve the class references from the ImageSegment that stores the project. </div></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small;color:rgb(0,0,0)"><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span>
> This is different from the Etoys home screen (the clouds and drive-a-car)<br>
> which is simply a project that would be loaded by the deployment script<br>
> that creates an Etoys image. It does not have to ship with the general<br>
> Squeak image.<br>
<br>
</span>I do not know if it will make sense, but I guess my mental image is an<br>
Etoys "deployed image" hosted inside my regular Squeak trunk image. So I<br>
guess that I am thinking of the "clouds and drive-a-car" project being<br>
loaded the first time that I create a new EtoysProject from normal Squeak,<br>
and that somehow the subsequent project navigation within that new "hosted"<br>
Etoys would behave is if I were in a stand-alone Etoys image. Finally,<br>
I would want to be able to escape back to my normal Squeak.</blockquote><div><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small;color:rgb(0,0,0)">​That sounds good :)</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small;color:rgb(0,0,0)"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small;color:rgb(0,0,0)">- Bert -​</div></div></div></div>