[Vm-dev] Class checks in the vm

Eliot Miranda eliot.miranda at gmail.com
Wed Apr 18 18:02:17 UTC 2012


On Wed, Apr 18, 2012 at 3:34 AM, Guillermo Polito <guillermopolito at gmail.com
> wrote:

>
>
>
> On Tue, Apr 17, 2012 at 6:13 PM, Eliot Miranda <eliot.miranda at gmail.com>wrote:
>
>>
>> Hi Guillermo,
>>
>> On Tue, Apr 17, 2012 at 8:33 AM, Guillermo Polito <
>> guillermopolito at gmail.com> wrote:
>>
>>>
>>> Hi!
>>>
>>> I'm playing to bootstrap a Pharo image, trying to get a new environment
>>> running into my 'host' image, and after that, dump those new objects into a
>>> new image file.
>>>
>>> Now, to do that, I'm creating new classes for String, Character...
>>> Which are well known by the vm specialObjectsArray.  And trying to
>>> initialize my new image classes, which creates new character objects, and
>>> new string objects which is causing me some troubles :P.
>>>
>>> Now, my question is about this check in vmmaker (and some others that
>>> look similar):
>>>
>>> Interpreter>>#asciiOfCharacter: characterObj  "Returns an integer object"
>>>     <inline: false>
>>>     *self assertClassOf: characterObj is: (self splObj: ClassCharacter).
>>> *
>>>     successFlag
>>>         ifTrue: [^ self fetchPointer: CharacterValueIndex ofObject:
>>> characterObj]
>>>         ifFalse: [^ ConstZero]  "in case some code needs an int"
>>>
>>>
>>> - Can't we put a more intelligent assersion like checking if the object
>>> responds true to #isCharacter?
>>>
>>
>> The issue is performance.  One wants as quick a test here as possible, so
>> testing the class of the receiver is faster than doing a probe on the
>> method lookup cache and much faster than possibly having to do a full class
>> lookup.  So realistically the answer is "no, we shouldn't".
>>
>>
>>> - And removing the static check from the vm and adding the dynamic and
>>> nice #isCharacter check into the image?
>>>
>>
>>  This doesn't make a lot of sense.  asciiOfCharacter: is being used in
>> the VM by various primitives (e.g. at:put: on strings) and its use is to
>> fail if one attempts to store other than a character in a string.  So
>> moving the test to the image means the primitive is not safe.  Keep on
>> moving in this direction and you end up with a system that will crash when
>> one makes an error instead of raising an error message.  Smalltalk is a
>> safe language; it is extremely important that the system not crash and
>> instead provide walkbacks that afford diagnosis of errors.
>>
>>
>> The real issue here is that you want more flexibility in the VM while
>> bootstrapping than one wants or needs in normal use.  Instead of making the
>> VM slow and more general than it need be the right approach is to create a
>> variant of the VM for your bootstrapping use.  You can do this by creating
>> a subclass of Interpreter which reimplements asciiOfCharacter: (and others
>> you may need) and testing it in the simulator.  You can then use your
>> flexible VM for the bootstrap and once complete use the normal VM.
>>
>
> I was not totally aware of the performance issues (I knew there were going
> to be some tradeoffs, but not so critical :) ).  Now, for the bootstrap,
> I'll talk with my mentors to see which should be a nice approach to reach
> where we want to be.
>
> BTW, you were talking about better object representation and inmediate
> characters, can you give me a pointer of what you mean? (just curious)
>

Read the class comment of CogMemoryManager in a Cog VMMaker,
e.g. VMMaker-oscog-EstebanLorenzano.156 or VMMaker.oscog-eem.157

HTH


>
> Thank you!!
> Guille
>
>
>>
>>
>>> Thanks!
>>> Guille
>>>
>>>
>>>
>>
>>
>> --
>> best,
>> Eliot
>>
>>
>>
>
>


-- 
best,
Eliot
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20120418/04dbb07e/attachment.htm


More information about the Vm-dev mailing list