Cool. What the percentage of speedup?
2016-09-28 23:41 GMT+02:00 Holger Freyther <hol...@freyther.de>: > 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? > > > cheers > holger > > >