[Cuis-dev] [DEFECT] #copyFrom:count: for OrderedCollections
Gerald Klix
cuis.01 at klix.ch
Tue Feb 6 09:27:08 PST 2024
On 2/6/24 6:23 PM, Gerald Klix via Cuis-dev wrote:
>
> On 2/6/24 5:07 PM, Juan Vuletich via Cuis-dev wrote:
>> 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,
>
> consistency-wise, this all makes sense!
>
> In an implementation that is used for real work,
> you should not changes semantics so lightheartedly.
>
> If you really want to do this you should proceed it like this:
>
> For current Cuis 6.3 you should mark these methods,
> as "to be deprecated" (by some means yet to be invented).
>
> For Cuis 6.4 you could mark them as deprecated
> and write messages to the transcript or bother the user/programmer
> with a (Pre)-Debugger.
>
> For Cuis 6.5 or later you may enforce that semantics.
>
> Of course there still will be hue and cry,
> but people had their time to adapt and
> after a lot of complaining, event I would have found
> a way to live with it :)
>
> Now I am in the middle of an important project (money-wise)
> and I have to deal with that – ah, äm, well – shit!
>
>
> I hope you understand,
>
> Gerald
One final remark:
If there is no outcry, nobody cares, because nobody uses Cuis.
It is as sad as this.
Gerald
More information about the Cuis-dev
mailing list