[squeak-dev] The Trunk: Collections-ul.668.mcz

Eliot Miranda eliot.miranda at gmail.com
Tue Oct 13 01:24:26 UTC 2015


I'm guessing

| ed id |
ed := Dictionary with: 'a' -> $a.
id := IdentityDictionary with: 'a' copy -> $a.
{ ed = id. id = ed }

_,,,^..^,,,_ (phone)

> On Oct 12, 2015, at 5:14 PM, Chris Muller <asqueaker at gmail.com> wrote:
> 
> This extra check halves the speed of Dictionary>>= when they are equal, for all cases which consider equivalence symmetrical.  If a=b, then it should be able to be assumed that b=a.  What case is it not?
> 
>> On Mon, Oct 12, 2015 at 7:02 PM, <commits at source.squeak.org> wrote:
>> Levente Uzonyi uploaded a new version of Collections to project The Trunk:
>> http://source.squeak.org/trunk/Collections-ul.668.mcz
>> 
>> ==================== Summary ====================
>> 
>> Name: Collections-ul.668
>> Author: ul
>> Time: 13 October 2015, 1:07:48.216 am
>> UUID: 8abfa05a-70c6-4e38-bc00-7d665183106c
>> Ancestors: Collections-ul.667
>> 
>> In Dictionary >> #=, make sure that the dictionaries agree on what the common keys are. This way the behaviour of #= will be symmetric when the two dictionaries implement key equality differently.
>> 
>> =============== Diff against Collections-ul.667 ===============
>> 
>> Item was changed:
>>   ----- Method: Dictionary>>= (in category 'comparing') -----
>> + = anObject
>> - = aDictionary
>>         "Two dictionaries are equal if
>>          (a) they are the same 'kind' of thing.
>>          (b) they have the same set of keys.
>>          (c) for each (common) key, they have the same value"
>> 
>> +       self == anObject ifTrue: [ ^true ].
>> +       anObject isDictionary ifFalse: [ ^false ].
>> +       self size = anObject size ifFalse: [ ^false ].
>> +       self associationsDo: [ :association |
>> +               (anObject at: association key ifAbsent: [ ^false ]) = association value
>> +                       ifFalse: [ ^false ] ].
>> +       "The two dictionaries may have different ideas about equal keys, so check both ways to avoid any inconsistency."
>> +       anObject associationsDo: [ :association |
>> +               (self at: association key ifAbsent: [ ^false ]) = association value
>> +                       ifFalse:  [ ^false ] ].
>> +       ^true!
>> -       self == aDictionary ifTrue: [ ^ true ].
>> -       aDictionary isDictionary ifFalse: [^false].
>> -       self size = aDictionary size ifFalse: [^false].
>> -       self associationsDo: [:assoc|
>> -               (aDictionary at: assoc key ifAbsent: [^false]) = assoc value
>> -                       ifFalse: [^false]].
>> -       ^true
>> -
>> - !
> 
> 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151012/5462e143/attachment.htm


More information about the Squeak-dev mailing list