On Aug 3, 2011, at 8:45 AM, Pat Maddox wrote:

> On Aug 2, 2011, at 11:40 PM, Sean P. DeNigris wrote:
> 
>> 
>> Pat Maddox-3 wrote:
>>> 
>>> become: swaps the two objects entirely, becomeForward: "replaces"
>>> references with the argument.
>>> 
>> 
>> Got it, thanks. The system tests (duh) for these are really clear.
> 
> it's generally better to use becomeForward: unless you have a really good 
> reason to use become:  and it's generally better to use anything other than 
> becomeForward: if you can. It's what dubya would call "the nukular opshin"
> 

And you need to take care: #become can be very slow. It can (if not both 
objects are in the newspace of the GC) require to scan the *whole* memory.
This is slow and performance degrades the more memory you use.

The "fast bulk become" that is sometimes listed as a major innovation of the 
squeak vm is only related to becomming multiple objects: you can
become a group of objects and traverse the memory only once. But as it does 
scan the whole memory.

The sad thing is that a fast become would be really nice for many things... 
e.g. if you want to do highly dynamic stuff with proxies. Making
objects remote, swap them, or have proxies for objects-not-yet there 
(futures)...

But in practice #become is far too slow for these. We should change that.

        Marcus

--
Marcus Denker -- http://marcusdenker.de


Reply via email to