On Mar 3, 2012, at 1:02 PM, Dario Trussardi wrote:

> Ciao,
> 
>       i work with: 
> 
>               Pharo-1.0
>               Latest update: #10517.
> 
>       ( but i found the same answer into 
>                               Pharo1.2.2
>                               Latest update: #12353  )
> 
> 
> 
> I have a browser open on Boolean class.
> 
> 
> When i select the              or:             method   and click on  the     
>  sender button   the system answer only   ten   methods.
> 
> 
> Because ?
> 
It is compiled to jumps, the message send is optimized away. 
e.g   "true or: [false]" is compiled to:

17 <71> pushConstant: true
18 <99> jumpFalse: 21
19 <71> pushConstant: true
20 <90> jumpTo: 22
21 <72> pushConstant: false
22 <7C> returnTop

This means that then in the compiledmethod, there is no symbol needed for or: 
to execute the code.

It is omited for space reasons (keep in mind that the original target machine 
of this system had 512 Kb 
of RAM maximum)

The "senders of" iterates over all methods and looks if a symbol is there, it 
does not look at source code.
(that's why it is so fast and works even without sources...)

These days where a $25 computer is shipped witth 256MB of RAM, of course adding 
in 1000 methods 
pointers to a symbol is not that of a problem, and therefore, in 1.4, the 
selector of optimized-away messages 
is now added to the literalframe (if there is space), even though it's pure 
waste from the execution point of
view.

So now, senders of #or: gives you 1092 methods.

Same for ifTrue: and all the other inlined methods.

        Marcus

--
Marcus Denker -- http://marcusdenker.de


Reply via email to