[Pharo-users] adding instance variables (data) to the Object class

2018-09-06 Thread Petr Fischer via Pharo-users
--- Begin Message ---
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)?

Thanks! pf

--- End Message ---


Re: [Pharo-users] adding instance variables (data) to the Object class

2018-09-07 Thread Marcus Denker


> On 6 Sep 2018, at 23:35, Petr Fischer via Pharo-users 
>  wrote:
> 
> 
> From: Petr Fischer 
> 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

Re: [Pharo-users] adding instance variables (data) to the Object class

2018-09-07 Thread Denis Kudriashov
Talents with statefull traits will help you

пт, 7 сент. 2018 г., 9:08 Marcus Denker :

>
>
> On 6 Sep 2018, at 23:35, Petr Fischer via Pharo-users <
> pharo-users@lists.pharo.org> wrote:
>
>
> *From: *Petr Fischer 
> *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
>


Re: [Pharo-users] adding instance variables (data) to the Object class

2018-09-07 Thread Petr Fischer via Pharo-users
--- Begin Message ---
I see... will test them, thanks! pf


> Talents with statefull traits will help you
> 
> пт, 7 сент. 2018 г., 9:08 Marcus Denker :
> 
> >
> >
> > On 6 Sep 2018, at 23:35, Petr Fischer via Pharo-users <
> > pharo-users@lists.pharo.org> wrote:
> >
> >
> > *From: *Petr Fischer 
> > *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
> >

--- End Message ---


Re: [Pharo-users] adding instance variables (data) to the Object class

2019-01-13 Thread Petr Fischer via Pharo-users
--- Begin Message ---
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 :
> 
> >
> >
> > On 6 Sep 2018, at 23:35, Petr Fischer via Pharo-users <
> > pharo-users@lists.pharo.org> wrote:
> >
> >
> > *From: *Petr Fischer 
> > *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
> >

--- End Message ---


Re: [Pharo-users] adding instance variables (data) to the Object class

2019-01-14 Thread Sean P. DeNigris
Pharo Smalltalk Users mailing list wrote
> Or... what do you mean by "talents"?

IIUC a talent is behavior like a trait, but that can be dynamically added
and removed from anObject instead of being permanently bound to the class



-
Cheers,
Sean
--
Sent from: http://forum.world.st/Pharo-Smalltalk-Users-f1310670.html



Re: [Pharo-users] adding instance variables (data) to the Object class

2019-01-16 Thread Richard O'Keefe
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 :
> >
> > >
> > >
> > > On 6 Sep 2018, at 23:35, Petr Fischer via Pharo-users <
> > > pharo-users@lists.pharo.org> wrote:
> > >
> > >
> > > *From: *Petr Fischer 
> > > *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
> > >
>
>


Re: [Pharo-users] adding instance variables (data) to the Object class

2019-01-16 Thread Petr Fischer via Pharo-users
--- Begin Message ---
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 :
> > >
> > > >
> > > >
> > > > On 6 Sep 2018, at 23:35, Petr Fischer via Pharo-users <
> > > > pharo-users@lists.pharo.org> wrote:
> > > >
> > > >
> > > > *From: *Petr Fischer 
> > > > *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
> > > >
> >
> >

--- End Message ---


Re: [Pharo-users] adding instance variables (data) to the Object class

2019-01-16 Thread James Foster


> On Jan 16, 2019, at 6:28 AM, Petr Fischer via Pharo-users 
>  wrote:
> 
> 
> From: Petr Fischer 
> 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 :
>>>> 
>>>>> 
>>>>> 
>>>>> On 6 Sep 2018, at 23:35, Petr Fischer via Pharo-users <
>>>>> pharo-users@lists.pharo.org> wrote:
>>>>> 
>>>>> 
>>>>> *From: *Petr Fischer 
>>>>> *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
>>>>> 
>>> 
>>> 
> 
> 
> 
> 



Re: [Pharo-users] adding instance variables (data) to the Object class

2019-01-16 Thread Benoit St-Jean via Pharo-users
--- Begin Message ---

Petr,

Since you seem to want to add this (these) extra instance variable(s) in 
the context of some kind of persistence (objects being retrieved/created 
from/to some kind of database), perhaps subclassing all your objects 
from a PersistentObject class (that inherits from Object) would be the 
simplest solution.




--- End Message ---


Re: [Pharo-users] adding instance variables (data) to the Object class

2019-01-16 Thread Stephan Eggermont
Petr Fischer via Pharo-users
 wrote:
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)?

You might want to take a look at the documentation of Magma.
http://wiki.squeak.org/squeak/2665

Stephan