[squeak-dev] The defaullt implementation of isEmpty might do too much work

Tobias Pape Das.Linux at gmx.de
Tue Oct 25 23:09:39 UTC 2016


On 25.10.2016, at 23:54, Chris Muller <ma.chris.m at gmail.com> wrote:

> Hi Tobias and Eliot,
> 
>>>> Folks there is NO BASIS at the level of Collection for assuming that
>>>> do: [ : each | ^
>>>> false ] is faster than ^self size=0.  In fact, the proper assumption
>>>> is the opposite -- that #size is the optimized method, not #do:.
>>> 
>>> I don't understand on what _either_ performance-assumption is grounded.
> 
> Exactly.  The original basis for making this change is groundless.

No Chris, I said I don't understand _both_ assumptions.

> 
>> self size = 0 doesn't work for infinite collections.
> 
> What's an infinite collection,

For example, a generator…
or a right-open interval?

[...]
>> ts or more the "clever" implementation is faster.
> 
> Then add Bag>>#isEmpty, don't change Collection>>#isEmpty, because it
> changes a 30-year old assumption about how #isEmpty works for every
> other kind of Collection.

Kent Beck gives this example for 'Simple Delegation':

Object subclass: #Vector
  instanceVariableNames: ‘elements’

Vector>>do: aBlock
  elements do: aBlock

It seems the #do:-based implementation is 'more correct' here.

I found no other recommendation in either Beck's or Thomas' style guides.
To _me_ this suggests that what you perceive as 30-year-old-assumption
is not as universal as '#do: should suffice'.


Best regards
	-Tobias



More information about the Squeak-dev mailing list