Re: [Pharo-users] adding instance variables (data) to the Object class
On Jan 16, 2019, at 6:28 AM, Petr Fischer via Pharo-users <pharo-users@lists.pharo.org> wrote:
From: Petr Fischer <petr.fischer@me.com> Subject: Re: [Pharo-users] adding instance variables (data) to the Object class Date: January 16, 2019 at 6:28:44 AM PST To: pharo-users@lists.pharo.org
Yes, due to the object layouts and strong connection of Object with VM, my idea can not be done that easily.
I want to add some information (instance variables like OID [object id]) to some objects of any kind (some objects = persistent objects).
I can do it with map (idenity as key, OID + other info as value), but I was afraid that the map would tend to be enormous. Now (with all your feedback) I am inclined to think that this (map/dictionary) will be the only way.
Also - on some systems (like Gemstone), there is "dynamic instance variables" (just key/value pairs) and you can add some information to any object instance you want. I like this, but not possible in Pharo, right?
While GemStone allows dynamic instance variables on most objects (to support Ruby), it is not allowed on âspecialâ objects like SmallInteger instances that are encoded completely in the OOP.
Thanks! pf
I am having a little trouble understanding how adding instance variables to Object is supposed to work. Where would an immediate object like a SmallInteger *put* such variables? What does it even *mean* for 0 and 1 to have instance variables? Do you really want to give an extra word of storage to *every* object in your system, or to just some, but potentially of any kind?
The usual technique is to use something like a WeakIdentityKeyDictionary.
On Mon, 14 Jan 2019 at 13:54, Petr Fischer via Pharo-users < pharo-users@lists.pharo.org> wrote:
It looks like I can't simply add statefull trait to the Object like this:
ProtoObject subclass: #Object uses: TMyTrait instanceVariableNames: '' classVariableNames: 'DependentsFields' package: 'Kernel-Objects'
After this, Pharo 7 VM goes to 100% of CPU usage, several GB of RAM usage and then crash.
Or... what do you mean by "talents"? I found also this: https://github.com/tesonep/pharo-talents
Thanks, pf
Talents with statefull traits will help you
пÑ, 7 ÑенÑ. 2018 г., 9:08 Marcus Denker <marcus.denker@inria.fr>:
On 6 Sep 2018, at 23:35, Petr Fischer via Pharo-users < pharo-users@lists.pharo.org> wrote:
*From: *Petr Fischer <petr.fischer@me.com> *Subject: **adding instance variables (data) to the Object class* *Date: *6 September 2018 at 23:35:26 CEST *To: *pharo-users@lists.pharo.org
Hello! Weird question: why I can't add instance variables to the Object class (for example "oid" or something else)? Is it due to some internal (and different) VM "class layouts"?
Or - can I inject my own information to all existing objects (any
class)?
Behavior is a subclass of Object, too. So that means that you would
add a
ivar to all the classes, but for the VM an object can only be a class that has three ivars, and those are accessed by offset. So if you add an ivar, you shift the offset â> problem.
As for âI want to add object specific stateâ: it would be nice to add an easy to use (and efficient) mechanism to do it.
Marcus
participants (1)
-
James Foster