<br><br><div class="gmail_quote">On Fri, Apr 6, 2012 at 10:53 AM, Igor Stasenko <span dir="ltr"><<a href="mailto:siguctua@gmail.com">siguctua@gmail.com</a>></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"><br>
On 6 April 2012 19:26, Eliot Miranda <<a href="mailto:eliot.miranda@gmail.com">eliot.miranda@gmail.com</a>> wrote:<br>
><br>
><br>
><br>
> On Fri, Apr 6, 2012 at 9:45 AM, Igor Stasenko <<a href="mailto:siguctua@gmail.com">siguctua@gmail.com</a>> wrote:<br>
>><br>
>><br>
>> On 6 April 2012 18:37, Hans-Martin Mosner <<a href="mailto:hmm@heeg.de">hmm@heeg.de</a>> wrote:<br>
>> ><br>
>> > Am 06.04.2012 16:41, schrieb Guillermo Polito:<br>
>> ><br>
>> ><br>
>> ><br>
>> ><br>
>> ><br>
>> > Hi!<br>
>> ><br>
>> > I was wandering what are the implications of a class being compact or not.<br>
>> > And also what happens if a class has it's format thinking it's compact but<br>
>> > it's not in the compact classes array?<br>
>> ><br>
>> > I'm looking at the implications of bootstrapping a smalltalk inside the<br>
>> > same environment, and having two CompiledMethod classes, two Array classes,<br>
>> > etc, brings me to this issue :).<br>
>> ><br>
>> > Thanks!<br>
>> > Guille<br>
>> ><br>
>> > Compact classes must be in the compact classes array so their instances know their correct class.<br>
>> > If you want to bootstrap an image inside another one, do it without compact classes.<br>
>> > You can always add them later when needed (which is somewhat questionable, because their space-saving advantage has a corresponding speed disadvantage).<br>
>> ><br>
>><br>
>> yes, basically you can "convert/copy" any compact class to non-compact<br>
>> one. And construct a valid class object with methods etc.<br>
>> Everything will be fine unless you want to also create and use<br>
>> instances of such classes. Then you are in trouble.<br>
>> So, as long as you can guarantee that you don't run any code with<br>
>> those classes which involves instantiation,<br>
>><br>
>> there will be no problems.<br>
><br>
><br>
> Um, no. Only for certain classes can you freely convert between compact and uncompact. The various VMs assume some classes are always compact (because its faster to check their class).<br>
><br>
<br>
> In the Interpreter BlockContext and MethodContext must be at indices 13 and 14.<br>
><br>
</div></div>What i meant is that you can replicate both of those i.e. create a<br>
uncompact BlockContext' and MethodContext'<br>
and can compile methods for them.. but should avoid instantiation.<br></blockquote><div><br></div><div>Right. And you can create compact versions that use unused indices in the array, the last 15 being unused. Then later you could post-process rearrange compact class indices, getting rid of the old ones at the earlier indices.</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div><div></div><div class="h5"><br>
<br>
> In the Stack and Cog VMs the following classes must be at the corresponding indices<br>
> Array at 3<br>
> LargeNegativeInteger at 4<br>
> LargePositiveInteger at 5<br>
> Float at 6<br>
> MethodContext at 14<br>
><br>
> Further, the Stack and Cog VM determines the index of class ByteString at startup and uses it in debug printing, stack dump generation etc.<br>
><br>
> If one needs to freely alter the compactClassesArray with a Stack or Cog VM one needs to generate a special VM where the various compact class indices (ClassArrayCompactIndex, et al, see ObjectMemory class>initializeCompactClassIndices) are zero. This should work, but hasn't been tested.<br>
><br>
><br>
>><br>
>> > Cheers,<br>
>> > Hans-Martin<br>
>><br>
>><br>
>><br>
>> --<br>
>> Best regards,<br>
>> Igor Stasenko.<br>
><br>
><br>
><br>
><br>
> --<br>
> best,<br>
> Eliot<br>
><br>
><br>
<br>
<br>
<br>
--<br>
Best regards,<br>
Igor Stasenko.<br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br>best,<div>Eliot</div><br>