On Wed, Nov 22, 2017 at 3:34 PM, Denis Kudriashov <[email protected]> wrote:
> Hi. > > Just to notice: it is here long time (I checked Pharo 1 and current > Squeak). > > Probably some Spur changes to integrate in the image then. > > 2017-11-22 14:35 GMT+01:00 Clément Bera <[email protected]>: > >> Hi All, >> >> It seems Pharo is lacking the slotAt: / slotAt:put: primitive and that >> the instVarAt: / instVarAt:put: primitive is not doing what it says it >> does. When I look at Object>>#instVarAt: I see: >> >> "[...]Answer a fixed variable in an object. The numbering of the variables >> corresponds to the named instance variables, followed by the indexed >> instance >> variables. Fail if the index is not an Integer or is not the index of a >> fixed variable[...]" >> >> Now in Pharo 7 when one does: >> >> #(iv1) instVarAt: 1, one gets #iv1. >> >> So the comment is wrong. >> >> The reason for this is that instVarAt: / instVarAt:put: should be >> primitive 73/74, while they are in Pharo 173/174 (primitive >> slotAt:/slotAt:put:). The slot primitive access pointer slots of objects, >> whichever inst var or variable fields. A good example would be: >> >> | t | >> t := #temp. >> [ t ] instVarAt: 4, one gets #temp >> >> So I have two solutions for this problem: >> 1) We change the instVarAt: / instVarAt:put: primitives comments to match >> the slotAt: / slotAt:put: behavior, and in Pharo instVarAt: / >> instVarAt:put: means in factslotAt: / slotAt:put: . >> 2) We change the instVarAt: / instVarAt:put: primitives to primitive 73 >> and 74, we introduce slotAt: / slotAt:put: with primitive 173/174 and we >> ask everyone to fix their code relying on instVarAt: / instVarAt:put: >> acting as slotAt: / slotAt:put: >> > > I prefer explicit behaviour. These methods have clear intention in names: > inst var accessing. It should be error when given index is out of #instSize > range. > > For new methods I would not use slot based naming because slots in Pharo > is already something more then just object fields. > Maybe #fieldAt:, #fieldAt:put: would be good? And also #fieldSize for > consistency > fieldSize is not a primitive in this case, Object>>#fieldSize ^ self class instSize + self basicSize > >> >> What do you think ? >> >> Best, >> >> >> -- >> Clément Béra >> Pharo consortium engineer >> https://clementbera.wordpress.com/ >> Bâtiment B 40, avenue Halley 59650 >> <https://maps.google.com/?q=40,+avenue+Halley+59650%C2%A0Villeneuve+d'Ascq&entry=gmail&source=g>Villeneuve >> d >> <https://maps.google.com/?q=40,+avenue+Halley+59650%C2%A0Villeneuve+d'Ascq&entry=gmail&source=g> >> 'Ascq >> <https://maps.google.com/?q=40,+avenue+Halley+59650%C2%A0Villeneuve+d'Ascq&entry=gmail&source=g> >> > > -- Clément Béra Pharo consortium engineer https://clementbera.wordpress.com/ Bâtiment B 40, avenue Halley 59650 Villeneuve d'Ascq
