> On 28 Sep 2016, at 23:41, Holger Freyther <hol...@freyther.de> wrote:
> 
> Hi,
> 
> Magritte and my TagLengthValue (TLV) both use 
> >>#instVarNamed:/>>#instVarNamed:put: to read and write from an object. I was 
> just running >>#bench on my SMPP library and noticed that besides Spur Pharo5 
> is slower than Pharo3.
> 
> 
> I added this to PointerLayout:
> 
>>> # instVarIndexFor: aString ifAbsent: aBlockClosure 
>       | idx |
>       idx := 1.
>       slotScope do: [:each |
>               each isVisible ifTrue: [
>                       each name = aString ifTrue: [^idx].
>                       idx := idx +1]].
>       ^aBlockClosure value
> 
> and modified ClassDescription/TClassDescription to use it:
> 
> "protocol: instance variables"
> instVarIndexFor: instVarName ifAbsent: aBlock
>       "Answer the index of the named instance variable."
> 
>       | index |
>       index := self classLayout instVarIndexFor: instVarName ifAbsent: [0].
>       index = 0 ifTrue: 
>               [^self superclass == nil 
>                       ifTrue: [aBlock value]
>                       ifFalse: [self superclass instVarIndexFor: instVarName 
> ifAbsent: aBlock]].
>       ^self superclass == nil         
>               ifTrue: [index]
>               ifFalse: [index + self superclass instSize]
> 
> 
> The speed-up comes from filtering allSlots to allVisibleSlots (and creating 
> an Array), then collecting the slot names and finally searching the name. 
> Does it make sense to integrate such speed-ups?
> 
> 

Yes! I will add it. 

        Marcus


Reply via email to