[Cuis-dev] [DEFECT] #copyFrom:count: for OrderedCollections
Juan Vuletich
juan at cuis.st
Tue Feb 6 08:07:47 PST 2024
On 2/6/2024 12:44 PM, Gerald Klix via Cuis-dev wrote:
> OMG, what have I done!
>
> PLEASE DON'T!!!!!!!!!!!!!
>
> See below.
>
>
> On 2/6/24 3:56 PM, Juan Vuletich via Cuis-dev wrote:
>> On 2/1/2024 5:43 PM, Gerald Klix via Cuis-dev wrote:
>>> Hi all, Hi Juan,
>>>
>>> I found a glitch in #copyFrom:count.
>>> IHMO both expression should work:
>>>
>>> --- snip ---
>>> 1 to: 10 :: copyFrom: 1 count: 3.
>>>
>>> 1 to: 10 :: asOrderedCollection copyFrom: 1 count: 3.
>>> --- snap ---
>>>
>>> The later creates an empty OrderedCollection and fails.
>>>
>>> I attached a change set, that replaces sends of #new: with
>>> sends of #sizeOf: in various methods,
>>> although some of these methods are special cased
>>> in OrderedCollection.
>>>
>>>
>>> Best Regards,
>>>
>>> Gerald
>>
>> Thanks Gerald. I integrated this a few days ago. Still, I think that
>>
>> | n |
>> n := whatever number.
>> (AnyCollectionClass new: n) size = n
>>
>> should _always_ evaluate to true (or fail if it doesn't make sense).
>> So I pushed some very substantial changes that kept me quite busy for
>> several days. Now `OrderedCollection new: 10` will fail. Same for
>> Set, Dictionary, Bag and a few others. I've adjusted many packages
>> accordingly.
>>
>> Cheers,
>>
> Oh my goodness, that breaks so much of my and everyone else's code.
> Please don't!!!!!
>
> This behavior was already present in Smalltalk/V for MSDos
> and in Smalltalk-80 (see: https://github.com/dbanay/Smalltalk)
>
> Please note, 40 year ago my computer science education
> began more or less with Algebraic Specification:
> I am acutely aware of this inconsistency!
>
> Everyone – even language lawyers – can like with this invariant:
> (AnyCollectionClass sizeOf: n) size = n
>
> Please follow my advice!
>
>
> Best Regards,
>
> Gerald
:D
I know it was like that in Smalltalk-80. That's why I made it give an
error, and not just answer `OrderedCollection ofSize: n` that would be
the correct answer!
It is trivial to define:
new: n
^self new
in Collection, or OrderedCollection or anywhere you need it. Or fix the
code, and just call `OrderedCollection new`. Current systems can handle
some GC stress without much drama...
Besides, check the senders of #newWithRoomForMoreThan: . Don't they
start making sense now?
Cheers,
--
Juan Vuletich
cuis.st
github.com/jvuletich
researchgate.net/profile/Juan-Vuletich
independent.academia.edu/JuanVuletich
patents.justia.com/inventor/juan-manuel-vuletich
linkedin.com/in/juan-vuletich-75611b3
twitter.com/JuanVuletich
More information about the Cuis-dev
mailing list