[squeak-dev] WeakArray>>grownBy: question (was: The Inbox: Collections-cmm.673.mcz)

Chris Muller asqueaker at gmail.com
Sun Jan 3 18:04:32 UTC 2016


Having said that, it seems implausible that "grownBy:" should ever
return a different class than the receiver, because we want the
receiver, "grown by" the specified amount...   Sigh...


On Sun, Jan 3, 2016 at 11:27 AM, Chris Muller <ma.chris.m at gmail.com> wrote:
> We can't assume the comment is correct.  That comment was written back
> when the #species returned a WeakArray, so it could be that the writer
> of the comment simply was speaking "how things were" instead of "how
> they should be".
>
> On Sat, Jan 2, 2016 at 9:19 PM, Levente Uzonyi <leves at caesar.elte.hu> wrote:
>> On Sat, 2 Jan 2016, David T. Lewis wrote:
>>
>>> On Fri, Jan 01, 2016 at 03:45:04PM -0600, Chris Muller wrote:
>>>>>
>>>>> what about using the idea of HashedCollection >> #growSize? It is "self
>>>>> class goodPrimeAtLeast: array size * 3 // 2 + 2". Is it specific to
>>>>> hashing
>>>>> that a prime number is used there?
>>>>
>>>>
>>>> Yes..  and now I understand why it grows linearly; because its a
>>>> linearly-searched Array.  The elements are not interspersed as in a
>>>> HashedCollection, we don't "need" the extra room for that purpose, it
>>>> was just to reduce the number of times it needs to grwo by a factor of
>>>> 10.  My change simply reduces the number of times it must grow even
>>>> more, however, since it appears we have nothing to ever shrink it back
>>>> down, we should not be growing by double right now, because that would
>>>> waste too many slots.  This way, a max of 10 slots is wasted.
>>>>
>>>> Still, we need the as: WeakArray fix..
>>>
>>>
>>> I have a feeling this has been discussed before, but I am curious. If I
>>> have a WeakArray and I send #grownBy:, and if the method comment for
>>> SequenceableCollection>>grownBy: says this:
>>>
>>>         "Answer a copy of receiver collection with size grown by length"
>>>
>>> Then why is it acceptable to answer an Array rather than a WeakArray?
>>>
>>> I think the answer has to do with this:
>>>
>>> WeakArray>>species
>>>         "More useful to have strongly-referenced results of #select: and
>>> #collect:."
>>>         ^ Array
>>>
>>> So if WeakArray>>species should answer an Array, then should #grownBy:
>>> be reimplemented in WeakArray so that it behaves as advertised? Or
>>> perhaps SequenceableCollection>>grownBy: should use #class rather than
>>> #species to figure out what kind of thing to answer?
>>
>>
>> This is yet another overloaded use of #species. Since the comment of
>> #grownBy: says it's a copy, and #copy doesn't use #species, therefore I
>> think #grownBy: should use #class instead of #species.
>> The question is, what will break if we change it?
>>
>> Levente
>>
>>
>>>
>>> Dave
>>>
>>>
>>
>


More information about the Squeak-dev mailing list