50% of all instance-methods are unary ! was: 84% of all
instance-methods are unary !
Markus Gaelli
gaelli at emergent.de
Fri Jun 13 10:19:47 UTC 2003
Hi again,
having thought about my mistakes a bit,
I think, they arouse because I was to blind
to use String >> numArgs, as they where not defined in
Symbol but its superclass, where I
didn't look for them.
I saw "isUnary" and "isInfix" or "isKeyword" in Symbol,
and so I was somehow convinced, that all
"Symbol plays the role of a selector"-methods
are found there. And I didn't see a numArgs-method.
(Next time I won't browse code, but use the
method-finder...)
Maybe we should move them also to String,
so that the role of Symbol/String as selector
is stored in only one place?
I will add that to the KCP-Swiki.
Markus
> Hi Torge,
>
> I certainly agree with all your corrections.,
> thanks for posting them.
> Where was my mind, when I coded that,
> I think I do better on the average...
>
> 84% seemed really high.
>
> Markus
>
>> Please look at String>>numArgs and the Class Bag.
>
>> Second: since you're using one-based arrays your unary selectors
>> (selectors
>> with no argument) are assigned the position _one_. So are binary
>> keyword selectors.
>> Third: why are you limiting the range of argument counts beforehand?
>> If you were only interested
>> in the finding you promoted in the subject a two elemented array
>> would have sufficed.
>> So here's the correct code and the answers my (not so virgin) image
>> geve me.
>>
>> result _ Bag new.
>> Class allSubInstances do:[:aClass |
>> aClass selectors do:[:sel |
>> result add: sel numArgs]].
>> {result sortedCounts. result cumulativeCounts}
>> #(a SortedCollection(13905->0 9594->1 2682->2 802->3 382->4 202->5
>> 71->6 29->7 14->8 5->9 3->10 1->11 1->12 1->13 1->14) #(50.2->0
>> 84.9->1 94.5->2 97.4->3 98.8->4 99.5->5 99.8->6 99.9->7 100.0->8
>> 100.0->9 100.0->10 100.0-
>>> 11 100.0->12 100.0->13 100.0->14))
>>
>> That means a mere 50% for the unary selectors. May be quite a
>> disappointment compared to your numbers.
>>
>> Cheers,
>> Torge
>>
>> P.S.: I didn't mean to sound so rude; it just came out that way. Hey
>> code on! Just remember to look for some conveiniences the system
>> offers you now and then.
>>
>> On Tue, 10 Jun 2003 18:29:00 +0200, Markus Gaelli
>> <gaelli at emergent.de> wrote:
>>
>>> Hi,
>>>
>>> If my code below is right, around _84 %_ (!) of all instance-methods
>>> in Squeak 3.6-5247 are unary, thus easy executable, if there were
>>> examples
>>> for their objects.
>>> Think of the coverage we could gain, if we had more examples.
>>> Put in assertions in your code, and we have lots of real failure
>>> checking
>>> tests too.
>>>
>>> Markus
>>>
>>> ----------
>>>
>>> |aMethodSigBlock anArray maxParameters|
>>> maxParameters:=20.
>>> aMethodSigBlock :=
>>> [:aClass || myArray |
>>> myArray _ Array new: maxParameters withAll: 0.
>>> aClass selectors
>>> do: [:aSel |
>>> aSel isUnary
>>> ifTrue: [myArray at: 1 put: (myArray at: 1) + 1].
>>> aSel isInfix
>>> ifTrue: [myArray at: 2 put: (myArray at: 2) + 1].
>>> aSel isKeyword
>>> ifTrue: [| anIndex |
>>> anIndex _ (aSel findTokens: ':') size.
>>> myArray at: anIndex put: (myArray at: anIndex) + 1]].
>> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>> ^^^^^^^^^^^^^
>> here you could have solved the problem by usin anIndex+1 (please
>> rename that numArgs + 1) as in:
>> vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
>> vvvvvvvvvvvvv
>> myArray at: numArgs + 1 put: (myArray at: numArgs +1) + 1]].
>>
>>> myArray].
>>>
>>> anArray := Array new: maxParameters withAll: 0.
>>> Object withAllSubclasses do: [:e | e isMeta ifFalse: [anArray :=
>>> anArray + (aMethodSigBlock value: e)]].
>>> anArray,{(anArray first / anArray sum) asFloat}
>>>
>>> #(22787 2854 796 381 202 71 28 13 5 3 1 1 0 1 0 0 0 0 0 0
>>> 0.839516634122978)
>>>
>>>
>>>
>>
>>
>>
>> --
>> Using M2, Opera's revolutionary e-mail client:
>> http://www.opera.com/m2/
>>
>
More information about the Squeak-dev
mailing list
|