> (regarding hypothetical implementation of a multi-core capable Squeak VM)
>
> On 4/30/09, Nicolas Cellier <
[hidden email]> wrote:
>> 2009/4/30 Michael van der Gulik <
[hidden email]>:
>
>>> *Most* parts of the VM will continue working fine. The parts that will
>>> break... er... some of the parts that will break are:
>>>
>>> * garbage collection.
>>> * allocating memory for new objects.
>>> * primitives and devices.
>>> * pointer swapping *might* need to be atomic (become:, becomeForward:).
>>> * Semaphore signalling.
>>> * (more things???)
>>>
>>
>> I love the *might*
>>
>> What happens for example if you change a class definition... Say add
>> or remove an instance slot.
>> What would happen if the becomeForward on the array of instances and
>> subinstances and method dictionaries were not atomic?
>
> Umm... brain cogs turning... umm...
>
> To retain the behaviour that Squeak has now, the safest, least buggy
> and easiest way is to do the above operation with a lock on the entire
> VM. Currently this is done in ClassBuilder>>update:to: by using
> BlockContext>>valueUnpreemptively. Whole VM locks suck, but nobody has
> the right to complain unless they've written a better solution.
>
> I'm not even going to bother trying to work out how this could be done
> concurrently. There are so many possible bugs. See the loads of
> comments in ClassBuilder>>update:to:. Infact, as Philippe Marschall
> points out in this thread, there are even existing bugs related to
> this - it's even commented as such in
> ClassDescription>>updateInstancesFrom:.
>
> Another option is to make classes and method immutable, so that they
> need to be copied when modifications are wanted. This is the approach
> I've taken in my Namespaces implementation, but unfortunately you lose
> a lot of the malleability of code that makes Smalltalk nice.
>
>> Don't forget Smalltalk environment rely on such in vivo chirurgical
>> operations.
>> You should better stop running while you or another thread is
>> replacing your own leg.
>
> A heart surgeon went to a mechanic to get his motorbike serviced. The
> mechanic started some small talk with the heart surgeon: "You know,
> our jobs are quite similar. We both take a body, pull it to pieces,
> fix or replace any broken parts and put it all back together again. So
> how come you get paid so much more than I do?". The surgeon retorted:
> "Try doing it with the motor running!".
>
> Gulik.
>
> --
>
http://gulik.pbwiki.com/>