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