[squeak-dev] Message>>#= & Message>>#hash

Levente Uzonyi leves at caesar.elte.hu
Wed Nov 21 12:31:28 UTC 2018


On Tue, 20 Nov 2018, Chris Muller wrote:

>> To make things more clear, the current implementation of Behavior >> #hash
>> has two negative side effects:
>> - behaviors stored in collections relying on the hash value (e.g. Set,
>> Dictionary) will have to be rehashed whenever a behavior is renamed
>> - objects using Behavior >> #hash to implement their own #hash, like what
>> Eliot just did to Message will suffer from the same issue. So Sets and
>> Dictionaries holding those kind of objects will have to be rehashed as
>> well upon the rename of the behavior.
>>
>> My questions related to this:
>> - why does Behavior >> #hash rely on the name instead of identity?
>
> If you mean #identityHash, then its because involving an unstable
> value in a #hash calculation is never a good idea.  #identityHash can
> be different for the same class between two different images, or if
> the class was ever becomed or reloaded into a new image, etc.

Is there an actual user of that feature?

Bob found out that #hash had been changed during the developement of 
Squeak 3.9. Therefore this issue is not present in Cuis (forked from 3.7). 
And I just checked Pharo and found that Behavior >> #hash had been removed 
from there.
So, I suggest we remove it as well unless there's a really good reason to 
keep it.

>
>> - do we want to fix those issues mentioned above or do we just say that
>> one should not rename classes and expect things to work?
>
> Neither.  We just say that when one renames a class to rehash all
> relevant HashedCollections.

That's "one should not rename classes and expect things to work", isn't 
it?

Levente

>
> - Chris


More information about the Squeak-dev mailing list