[Cuis-dev] [DEFECT] #copyFrom:count: for OrderedCollections

Hernán Wilkinson hernan.wilkinson at 10pines.com
Tue Feb 6 08:21:12 PST 2024


Gerald,
 Could you run your stuff with these changes to see the real impact? I’d
like to see that if possible

Thanks!
Hernan


*Hernán WilkinsonAgile Software Development, Teaching & Coaching*
*Phone: +54-011*-4893-2057
*Twitter: @HernanWilkinson*
*site: http://www.10Pines.com <http://www.10pines.com/>*
Address: Alem 896, Floor 6, Buenos Aires, Argentina


On Tue, 6 Feb 2024 at 13:11 Juan Vuletich via Cuis-dev <
cuis-dev at lists.cuis.st> wrote:

> On 2/6/2024 12:57 PM, Gerald Klix via Cuis-dev wrote:
> > On 2/6/24 4:44 PM, Gerald Klix 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
> > I am also inclined to quote the ANSI Smalltalk standard:
> >
> > 5.7.20.2 Message: new: count
> >
> > Synopsis
> > Create a new collection. The parameter count constrains the number of
> > elements in the result.
> >
> > Definition: <collection factory>
> > Return a new collection that has space for at least count elements.
> > Conforming protocols may refine this message. In particular, the
> > effect of the parameter count
> > should be specified in refinements. It can be used to specify the
> > exact number of elements, the
> > minimum number, or in some cases can even be interpreted as a hint
> > from the programmer, with
> > no guarantee that the requested number of instance variables will
> > actually be allocated.
> > Unless otherwise stated the initial values of elements, if any, of the
> > new collection are unspecified.
> >
> > Parameters
> > count <integer> unspecified
> >
> > Return Values
> > <collection> new
> >
> > Errors
> > none
> >
> > Quoted from
> > https://wiki.squeak.org/squeak/uploads/172/standard_v1_9-indexed.pdf
> > Page 227
> >
> > Page 239 is even more specific:
> >
> > 5.7.27.1Message Refinement: new
> >
> > Synopsis
> > Create a new object.
> >
> > Definition: <instantiator>
> > Return a newly created object initialized to a standard initial state.
> >
> > Refinement: <collection factory>
> > This message has the same effect as sending the message#new:with the
> > argument0, and will
> > return an empty collection.
> >
> > Refinement: <OrderedCollection factory>
> >
> > Create a new <OrderedCollection> that is optimized to store an
> > implementation defined number of
> > elements. The new collection initially contains no elements.
> >
> > Return Values
> > <OrderedCollection>new
> >
> > Errors
> > none
> >
> >
> > Best Regards,
> >
> > Gerald
>
> I really don't give crap for ANSI Smalltalk.
>
> But if everyone goes nuts like you about this, we can add a preference.
>
> Cheers,
>
> PS: Please don't take offense for my wording. I'm just kidding. We'll do
> what is best for the community.
>
> --
> 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
>
> --
> Cuis-dev mailing list
> Cuis-dev at lists.cuis.st
> https://lists.cuis.st/mailman/listinfo/cuis-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.cuis.st/mailman/archives/cuis-dev/attachments/20240206/e49e5a3a/attachment.htm>


More information about the Cuis-dev mailing list