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? 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