[BUG][FIX] WeakKeyDictionary>>keysAndValuesDo:
Stephan Rudlof
sr at evolgo.de
Thu Jun 17 02:34:00 UTC 2004
Martin Wirblat wrote:
> ...
> Here is a little snippet of code, which computes the number of classes
> which do have state, but are not redefining #= to depend on that state.
My code snippet would be:
| classesWithState classesWithStateAndDefinedEquality |
classesWithState := Smalltalk allClasses select: [ :cls |
cls isVariable or: [
cls instVarNames isEmpty not]].
classesWithStateAndDefinedEquality _ classesWithState select: [:class |
class includesSelector: #= ].
{classesWithState size. classesWithStateAndDefinedEquality size.
Smalltalk allClasses size}
#(1693 104 2596)
If Object>>= will be subtracted, there remain 103 classes with newly
added state *and* redefined #= operator.
If the remaining (1693-103) classes should also redefine #= cannot be
said without taking a look onto them: e.g. LargeIntegersPlugin contains
inst vars, but doesn't need a #= operator.
Greetings
Stephan
>
>
> For 3.6 it evaluates to 1136 out of 1338 classes. The majority of them
> is ignoring your "platonic" equality. Is Squeak grossly constructed
> falsely regarding equality, had it just been forgotten to do it right
> or is this an unsolvable problem? Or does it simply show what the
> average Smalltalk programmer intuitively thinks about equality? In
> that case the current mixed view of equality (state or identity for
> #=) in Smalltalk may fit to the language Smalltalk. And that means
> that Squeak Sets very well could be implemented as they are in other
> Smalltalks.
>
> Regards
> Martin
>
> | classes |
> classes := Smalltalk allClasses select: [ :cls |
> (( cls allSuperclasses add: cls; yourself ) select: [ :c |
> c includesSelector: #= ]) size = 1 ].
>
> classes := classes select: [ :cls |
> cls isVariable or: [
> cls instVarNames isEmpty not or: [
> ( cls allSuperclasses detect: [ :c |
> c instVarNames isEmpty not ] ifNone: []) notNil ]]].
>
> classes size -> Smalltalk allClasses size
>
>
>
>
--
Stephan Rudlof (sr at evolgo.de)
"Genius doesn't work on an assembly line basis.
You can't simply say, 'Today I will be brilliant.'"
-- Kirk, "The Ultimate Computer", stardate 4731.3
More information about the Squeak-dev
mailing list
|