jgfoster wrote
> Werner,
>
> I would say that you are right, this is a problem. A (not un-common)
> source of subtle bugs in Smalltalk is missing this rule that equivalent
> objects must have the same hash. In GemStone the objects are not
> equivalent (I’m not arguing that this is right, just that it avoids the
> problem you identify).
>
> I wonder what would happen if the hash comparison were added to the
> equivalence operator (#’=‘)!
>
> James
>
>> On Jul 30, 2018, at 5:07 AM, werner kassens <
> wkassens@
> > wrote:
>>
>> Hi,
>> i guess i can subsume almost everything i know about hashes in one
>> sentence:
>> it is my understanding that two objects that are equal (obj1=obj2.
>> -->true) have to have the same hash value (which is used for some
>> collection types), whereas objects where obj1=obj2 returns false should
>> have different hash values although it may happen that they have the
>> same one.
>>
>> now here things don't turn out exactly like that:
>> (1 to:4) = #(1 2 3 4). "true"
>> (1 to:4)hash = #(1 2 3 4)hash. "false"
>> well ok, actually these results make - pfffh, in a certain way - sense
>> to me, but i wonder what arguments the people in the know would use to
>> defend that result, if i would have another opinion?
>> werner
>>
>>
>>
+1, this is a bug.
Either Interval >> #hash needs to change*, or the equivalency be broken**.
Fun fact:
#(1 2 3 4) = #[1 2 3 4] false
You'd think they might be more similar than an Interval and an Array, or a
LinkedList containing ValueLinks and an Interval, but no ;)
Cheers,
Henry
*Interval >> hash
"Hash is reimplemented because = is implemented.
Since we are equivalent to other collections of our species, we must
also
hash equivalently"
| hash |
hash := self species hash.
start to: stop by: step do: [:element | hash := (hash + element hash)
hashMultiply].
^hash
**both ways, which is challenging, if one neither wants to:
- change species of Interval (which has bad consequences)
- add hash comparison to sequenceablecollection = (which slows it down even
further)
--
Sent from: http://forum.world.st/Pharo-Smalltalk-Users-f1310670.html