make #keys answer an Array rather than a Set

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

make #keys answer an Array rather than a Set

Nicolas Cellier
I made a proposal here:
http://code.google.com/p/pharo/issues/detail?id=1353

feel free to comment about it

_______________________________________________
Pharo-project mailing list
[hidden email]
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
Reply | Threaded
Open this post in threaded view
|

Re: make #keys answer an Array rather than a Set

Stéphane Ducasse
so that we can have a discussion in the list:


> I recently carried this change in trunk (many commits).
>
> Context: traditionally st80 #keys answers a Set and #values answers  
> a Bag,
> because both keys and values are unordered in a Dictionary.
>
> Squeak (and Pharo) #keys answer a Set, but #values answers with an  
> Array.
>
> This has some advantages:
> 1) no code does expect a Bag specific protocol
> 2) most code won't need to #add: to nor #remove: from values.
>   (this is not possible to perform these operations on an Array)
> 3) creating and iterating an Array is much faster than a Bag,  
> because no
> indirection, nor hash/lookup: is necessary, and no iteration on  
> empty slots
> is necessary (a Set or Bag necessarily have empty slots).
>
> It happens that the same can be applied to #keys, because very few  
> senders
> are using a Set specific protocol.
> I did analyze this in the trunk image.
>
> There was already a #fasterKeys for that purpose that can happily be  
> cancelled.
>
> Drawbacks:
> 1) break compatibility with a few external packages (that just a  
> matter of
> adding asSet here and there, and this solution is inter dialect  
> compatible).
> 2) changes might span across lot of packages
>  (exagerated in trunk because I adpoted then retracted #fasterKeys...
>  I did not dare breaking compatibility without Andreas agreement)
>
> Advantages:
> 1) make #keys consistent with #values (same order, same class)
> 2) optimize code without complexifying the code
>
> Delete commentComment 1 by nicolas.cellier.aka.nice, Today (11 hours  
> ago)
> The same "optimization" can be applied on #selectors, and this is  
> related to this
> subject because #selectors is defined in term of ^methodDict keys
> On Oct 21, 2009, at 11:15 PM, Nicolas Cellier wrote:
>
>> I made a proposal here:
>> http://code.google.com/p/pharo/issues/detail?id=1353
>>
>> feel free to comment about it
>>
>> _______________________________________________
>> Pharo-project mailing list
>> [hidden email]
>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>

_______________________________________________
Pharo-project mailing list
[hidden email]
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project