WeakXxx and Pharo7+ (was: Re: Package extension. Adding instance variables to classes)
Guillermo Polito wrote:
On Sun, May 13, 2018 at 6:37 PM, Herbert VojÄÃk <herby@mailbox.sk <mailto:herby@mailbox.sk>> wrote:
Guillermo Polito wrote:
Just be careful, that privateState thing looks like a Moose only Famix feature. It't not available in plain Pharo objects :)
In ES6 mailing list, they had this problem re how to do private state for objects, and it was shown that having private state is sort of isomorphic to having WeakMap indexed by objects. So in case of Pharo, I'd say using WeakIdentitityKeyDictionary can do the trick. Without resorting to any external dependency.
This works if the WeakMap is ephemeral. We should see in latest Pharo7 if Ephemerons are working.
Isn't Weak[Identity]KeyDictionary meant to have weak keys? Since it is named after that and contains it in its docs? Or is Pharo7 thinking about removing WeakXxx from the vm / image completely :-o ?
Herby
On Wed, May 9, 2018 at 2:09 AM, Alidra Abdelghani via Pharo-users <pharo-users@lists.pharo.org <mailto:pharo-users@lists.pharo.org> <mailto:pharo-users@lists.pharo.org <mailto:pharo-users@lists.pharo.org>>> wrote:
---------- Forwarded message ---------- From: Alidra Abdelghani <alidrandco@yahoo.fr <mailto:alidrandco@yahoo.fr> <mailto:alidrandco@yahoo.fr <mailto:alidrandco@yahoo.fr>>> To: Pavel Krivanek <pavel.krivanek@gmail.com <mailto:pavel.krivanek@gmail.com> <mailto:pavel.krivanek@gmail.com <mailto:pavel.krivanek@gmail.com>>> Cc: Any question about pharo is welcome <pharo-users@lists.pharo.org <mailto:pharo-users@lists.pharo.org> <mailto:pharo-users@lists.pharo.org <mailto:pharo-users@lists.pharo.org>>> Bcc: Date: Wed, 9 May 2018 01:09:06 +0100 Subject: Re: Package extension. Adding instance variables to classes Hi Pavel,
Thank you for your answer. I actually didnât know about this mechanism. I think it is will do the job :) I have probably to rewrite some parts pf my code to access my variables through privateState. no?
Thanks again Abdelghani
On 07 May 2018, at 13:15, pharo-users-request@lists.pharo.org <mailto:pharo-users-request@lists.pharo.org> <mailto:pharo-users-request@lists.pharo.org <mailto:pharo-users-request@lists.pharo.org>> wrote:
Message: 1 Date: Mon, 7 May 2018 13:43:56 +0200 From: Pavel Krivanek <pavel.krivanek@gmail.com <mailto:pavel.krivanek@gmail.com> <mailto:pavel.krivanek@gmail.com <mailto:pavel.krivanek@gmail.com>>> To: Any question about pharo is welcome <pharo-users@lists.pharo.org <mailto:pharo-users@lists.pharo.org> <mailto:pharo-users@lists.pharo.org <mailto:pharo-users@lists.pharo.org>>> Subject: Re: [Pharo-users] Package extension. Adding instance variables to classes Message-ID:
<CAHN2FzeMiBL4Y8asJ0XCjS2AQdxycoN+pbc+Hsd=trMnmuiJqw@mail.gmail.com <mailto:trMnmuiJqw@mail.gmail.com> <mailto:CAHN2FzeMiBL4Y8asJ0XCjS2AQdxycoN+pbc+Hsd <mailto:CAHN2FzeMiBL4Y8asJ0XCjS2AQdxycoN%2Bpbc%2BHsd>=trMnmuiJqw@mail.gmail.com <mailto:trMnmuiJqw@mail.gmail.com>>> Content-Type: text/plain; charset="utf-8"
2018-05-07 12:25 GMT+02:00 Alidra Abdelghani via Pharo-users < pharo-users@lists.pharo.org <mailto:pharo-users@lists.pharo.org> <mailto:pharo-users@lists.pharo.org <mailto:pharo-users@lists.pharo.org>>>:
---------- P?eposlan? zpr?va ---------- From: Alidra Abdelghani <alidrandco@yahoo.fr <mailto:alidrandco@yahoo.fr> <mailto:alidrandco@yahoo.fr <mailto:alidrandco@yahoo.fr>>> To:pharo-users@lists.pharo.org <mailto:To%3Apharo-users@lists.pharo.org> <mailto:pharo-users@lists.pharo.org <mailto:pharo-users@lists.pharo.org>> Cc: Bcc: Date: Mon, 7 May 2018 11:25:49 +0100 Subject: Package extension. Adding instance variables to classes Hi,
I am working on a package named ClassNamesAnalyzer and I need to add code to third party classes in other packages (for instance the FAMIX-Core package). ?Extending? third party classes with methods is easy; I just need to categorise my methods under the *ClassNamesAnalyzer protocole so that loading my package will load them in the image. However, if I want to add instance variables to theses classes, they are not there when I load the package in a new image.
*So my question is* : is there a way to include instance variables addition to other packages in my package?
Currently not, you should use privateState
*Another question is* : is it good practice to add instance variables to classes in third party packages and is there a way to avoid it (because I am not very confortable with that idea)?
It is not, see FAMIXContainerEntity>>#definedAnnotationTypes how this issue is currently being solved using the privateState.
Cheers, -- Pavel
Thanks in advance, Abdelghani
--
Guille Polito
Research Engineer
Centre de Recherche en Informatique, Signal et Automatique de Lille
CRIStAL - UMR 9189
French National Center for Scientific Research - _http://www.cnrs.fr_
*Web:* _http://guillep.github.io_
*Phone: *+33 06 52 70 66 13
--
Guille Polito
Research Engineer
Centre de Recherche en Informatique, Signal et Automatique de Lille
CRIStAL - UMR 9189
French National Center for Scientific Research - _http://www.cnrs.fr_
*Web:* _http://guillep.github.io_
*Phone: *+33 06 52 70 66 13
On Mon, May 14, 2018 at 11:22 AM, Herbert VojÄÃk <herby@mailbox.sk> wrote:
Guillermo Polito wrote:
On Sun, May 13, 2018 at 6:37 PM, Herbert VojÄÃk <herby@mailbox.sk <mailto:herby@mailbox.sk>> wrote:
Guillermo Polito wrote:
Just be careful, that privateState thing looks like a Moose only Famix feature. It't not available in plain Pharo objects :)
In ES6 mailing list, they had this problem re how to do private state for objects, and it was shown that having private state is sort of isomorphic to having WeakMap indexed by objects. So in case of Pharo, I'd say using WeakIdentitityKeyDictionary can do the trick. Without resorting to any external dependency.
This works if the WeakMap is ephemeral. We should see in latest Pharo7 if Ephemerons are working.
Isn't Weak[Identity]KeyDictionary meant to have weak keys?
Yes
Since it is named after that and contains it in its docs? Or is Pharo7 thinking about removing WeakXxx from the vm / image completely :-o ?
No, what makes you say so? What I said is that there is a (not so) "new" finalization mechanism called ephemerons implemented in the VM since some time ago, that avoids memory leaks when using weak dictionarys. WeakArrays work ok. WeakDictionaries may generate a memory leak if a **strong** value has a reference to a __weak__ key.
Herby
On Wed, May 9, 2018 at 2:09 AM, Alidra Abdelghani via Pharo-users <pharo-users@lists.pharo.org <mailto:pharo-users@lists.pharo.org> <mailto:pharo-users@lists.pharo.org <mailto:pharo-users@lists.pharo.org>>> wrote:
---------- Forwarded message ---------- From: Alidra Abdelghani <alidrandco@yahoo.fr <mailto:alidrandco@yahoo.fr> <mailto:alidrandco@yahoo.fr <mailto:alidrandco@yahoo.fr>>> To: Pavel Krivanek <pavel.krivanek@gmail.com <mailto:pavel.krivanek@gmail.com> <mailto:pavel.krivanek@gmail.com <mailto:pavel.krivanek@gmail.com>>> Cc: Any question about pharo is welcome <pharo-users@lists.pharo.org <mailto:pharo-users@lists.pharo.org> <mailto:pharo-users@lists.pharo.org <mailto:pharo-users@lists.pharo.org>>> Bcc: Date: Wed, 9 May 2018 01:09:06 +0100 Subject: Re: Package extension. Adding instance variables to classes Hi Pavel,
Thank you for your answer. I actually didnât know about this mechanism. I think it is will do the job :) I have probably to rewrite some parts pf my code to access my variables through privateState. no?
Thanks again Abdelghani
On 07 May 2018, at 13:15, pharo-users-request@lists.pharo.org <mailto:pharo-users-request@lists.pharo.org> <mailto:pharo-users-request@lists.pharo.org <mailto:pharo-users-request@lists.pharo.org>> wrote:
Message: 1 Date: Mon, 7 May 2018 13:43:56 +0200 From: Pavel Krivanek <pavel.krivanek@gmail.com <mailto:pavel.krivanek@gmail.com> <mailto:pavel.krivanek@gmail.com <mailto:pavel.krivanek@gmail.com>>> To: Any question about pharo is welcome <pharo-users@lists.pharo.org <mailto:pharo-users@lists.pharo.org> <mailto:pharo-users@lists.pharo.org <mailto:pharo-users@lists.pharo.org>>> Subject: Re: [Pharo-users] Package extension. Adding instance variables to classes Message-ID: <CAHN2FzeMiBL4Y8asJ0XCjS2AQdxycoN+pbc+Hsd= trMnmuiJqw@mail.gmail.com <mailto:trMnmuiJqw@mail.gmail.com> <mailto:CAHN2FzeMiBL4Y8asJ0XCjS2AQdxycoN+pbc+Hsd <mailto:CAHN2FzeMiBL4Y8asJ0XCjS2AQdxycoN%2Bpbc%2BHsd>=trMnmu iJqw@mail.gmail.com <mailto:trMnmuiJqw@mail.gmail.com>>> Content-Type: text/plain; charset="utf-8"
2018-05-07 12:25 GMT+02:00 Alidra Abdelghani via Pharo-users < pharo-users@lists.pharo.org <mailto:pharo-users@lists.pharo.org> <mailto:pharo-users@lists.pharo.org <mailto:pharo-users@lists.pharo.org>>>:
---------- P?eposlan? zpr?va ---------- From: Alidra Abdelghani <alidrandco@yahoo.fr <mailto:alidrandco@yahoo.fr> <mailto:alidrandco@yahoo.fr <mailto:alidrandco@yahoo.fr>>> To:pharo-users@lists.pharo.org <mailto:To%3Apharo-users@lists.pharo.org> <mailto:pharo-users@lists.pharo.org <mailto:pharo-users@lists.pharo.org>> Cc: Bcc: Date: Mon, 7 May 2018 11:25:49 +0100 Subject: Package extension. Adding instance variables to classes Hi,
I am working on a package named ClassNamesAnalyzer and I need to add code to third party classes in other packages (for instance the FAMIX-Core package). ?Extending? third party classes with methods is easy; I just need to categorise my methods under the *ClassNamesAnalyzer protocole so that loading my package will load them in the image. However, if I want to add instance variables to theses classes, they are not there when I load the package in a new image.
*So my question is* : is there a way to include instance variables addition to other packages in my package?
Currently not, you should use privateState
*Another question is* : is it good practice to add instance variables to classes in third party packages and is there a way to avoid it (because I am not very confortable with that idea)?
It is not, see FAMIXContainerEntity>>#definedAnnotationTypes how this issue is currently being solved using the privateState.
Cheers, -- Pavel
Thanks in advance, Abdelghani
--
Guille Polito
Research Engineer
Centre de Recherche en Informatique, Signal et Automatique de Lille
CRIStAL - UMR 9189
French National Center for Scientific Research - _http://www.cnrs.fr_
*Web:* _http://guillep.github.io_
*Phone: *+33 06 52 70 66 13
--
Guille Polito
Research Engineer
Centre de Recherche en Informatique, Signal et Automatique de Lille
CRIStAL - UMR 9189
French National Center for Scientific Research - _http://www.cnrs.fr_
*Web:* _http://guillep.github.io_
*Phone: *+33 06 52 70 66 13
-- Guille Polito Research Engineer Centre de Recherche en Informatique, Signal et Automatique de Lille CRIStAL - UMR 9189 French National Center for Scientific Research - *http://www.cnrs.fr <http://www.cnrs.fr>* *Web:* *http://guillep.github.io* <http://guillep.github.io> *Phone: *+33 06 52 70 66 13
Guillermo Polito wrote:
On Mon, May 14, 2018 at 11:22 AM, Herbert VojÄÃk <herby@mailbox.sk <mailto:herby@mailbox.sk>> wrote:
Guillermo Polito wrote:
On Sun, May 13, 2018 at 6:37 PM, Herbert VojÄÃk <herby@mailbox.sk <mailto:herby@mailbox.sk> <mailto:herby@mailbox.sk <mailto:herby@mailbox.sk>>> wrote:
Guillermo Polito wrote:
Just be careful, that privateState thing looks like a Moose only Famix feature. It't not available in plain Pharo objects :)
In ES6 mailing list, they had this problem re how to do private state for objects, and it was shown that having private state is sort of isomorphic to having WeakMap indexed by objects. So in case of Pharo, I'd say using WeakIdentitityKeyDictionary can do the trick. Without resorting to any external dependency.
This works if the WeakMap is ephemeral. We should see in latest Pharo7 if Ephemerons are working.
Isn't Weak[Identity]KeyDictionary meant to have weak keys?
Yes
Since it is named after that and contains it in its docs? Or is Pharo7 thinking about removing WeakXxx from the vm / image completely :-o ?
No, what makes you say so?
"This works if ... Ephemerons are working" of yours. Not a correct understanding, it seems. :-)
What I said is that there is a (not so) "new" finalization mechanism called ephemerons implemented in the VM since some time ago, that avoids memory leaks when using weak dictionarys.
WeakArrays work ok.
WeakDictionaries may generate a memory leak if a **strong** value has a reference to a __weak__ key.
Ah. Didn't know that, sorry.
Herby
On Wed, May 9, 2018 at 2:09 AM, Alidra Abdelghani via Pharo-users <pharo-users@lists.pharo.org <mailto:pharo-users@lists.pharo.org> <mailto:pharo-users@lists.pharo.org <mailto:pharo-users@lists.pharo.org>> <mailto:pharo-users@lists.pharo.org <mailto:pharo-users@lists.pharo.org> <mailto:pharo-users@lists.pharo.org <mailto:pharo-users@lists.pharo.org>>>> wrote:
---------- Forwarded message ---------- From: Alidra Abdelghani <alidrandco@yahoo.fr <mailto:alidrandco@yahoo.fr> <mailto:alidrandco@yahoo.fr <mailto:alidrandco@yahoo.fr>> <mailto:alidrandco@yahoo.fr <mailto:alidrandco@yahoo.fr> <mailto:alidrandco@yahoo.fr <mailto:alidrandco@yahoo.fr>>>> To: Pavel Krivanek <pavel.krivanek@gmail.com <mailto:pavel.krivanek@gmail.com> <mailto:pavel.krivanek@gmail.com <mailto:pavel.krivanek@gmail.com>> <mailto:pavel.krivanek@gmail.com <mailto:pavel.krivanek@gmail.com> <mailto:pavel.krivanek@gmail.com <mailto:pavel.krivanek@gmail.com>>>> Cc: Any question about pharo is welcome <pharo-users@lists.pharo.org <mailto:pharo-users@lists.pharo.org> <mailto:pharo-users@lists.pharo.org <mailto:pharo-users@lists.pharo.org>> <mailto:pharo-users@lists.pharo.org <mailto:pharo-users@lists.pharo.org> <mailto:pharo-users@lists.pharo.org <mailto:pharo-users@lists.pharo.org>>>> Bcc: Date: Wed, 9 May 2018 01:09:06 +0100 Subject: Re: Package extension. Adding instance variables to classes Hi Pavel,
Thank you for your answer. I actually didnât know about this mechanism. I think it is will do the job :) I have probably to rewrite some parts pf my code to access my variables through privateState. no?
Thanks again Abdelghani
On 07 May 2018, at 13:15, pharo-users-request@lists.pharo.org <mailto:pharo-users-request@lists.pharo.org> <mailto:pharo-users-request@lists.pharo.org <mailto:pharo-users-request@lists.pharo.org>> <mailto:pharo-users-request@lists.pharo.org <mailto:pharo-users-request@lists.pharo.org> <mailto:pharo-users-request@lists.pharo.org <mailto:pharo-users-request@lists.pharo.org>>> wrote:
Message: 1 Date: Mon, 7 May 2018 13:43:56 +0200 From: Pavel Krivanek <pavel.krivanek@gmail.com <mailto:pavel.krivanek@gmail.com> <mailto:pavel.krivanek@gmail.com <mailto:pavel.krivanek@gmail.com>> <mailto:pavel.krivanek@gmail.com <mailto:pavel.krivanek@gmail.com> <mailto:pavel.krivanek@gmail.com <mailto:pavel.krivanek@gmail.com>>>> To: Any question about pharo is welcome <pharo-users@lists.pharo.org <mailto:pharo-users@lists.pharo.org> <mailto:pharo-users@lists.pharo.org <mailto:pharo-users@lists.pharo.org>> <mailto:pharo-users@lists.pharo.org <mailto:pharo-users@lists.pharo.org> <mailto:pharo-users@lists.pharo.org <mailto:pharo-users@lists.pharo.org>>>> Subject: Re: [Pharo-users] Package extension. Adding instance variables to classes Message-ID:
<CAHN2FzeMiBL4Y8asJ0XCjS2AQdxycoN+pbc+Hsd=trMnmuiJqw@mail.gmail.com <mailto:trMnmuiJqw@mail.gmail.com> <mailto:trMnmuiJqw@mail.gmail.com <mailto:trMnmuiJqw@mail.gmail.com>> <mailto:CAHN2FzeMiBL4Y8asJ0XCjS2AQdxycoN+pbc+Hsd <mailto:CAHN2FzeMiBL4Y8asJ0XCjS2AQdxycoN%2Bpbc%2BHsd>
<mailto:CAHN2FzeMiBL4Y8asJ0XCjS2AQdxycoN%2Bpbc%2BHsd <mailto:CAHN2FzeMiBL4Y8asJ0XCjS2AQdxycoN%252Bpbc%252BHsd>>=trMnmuiJqw@mail.gmail.com <mailto:trMnmuiJqw@mail.gmail.com> <mailto:trMnmuiJqw@mail.gmail.com <mailto:trMnmuiJqw@mail.gmail.com>>>> Content-Type: text/plain; charset="utf-8"
2018-05-07 12:25 GMT+02:00 Alidra Abdelghani via Pharo-users < pharo-users@lists.pharo.org <mailto:pharo-users@lists.pharo.org> <mailto:pharo-users@lists.pharo.org <mailto:pharo-users@lists.pharo.org>> <mailto:pharo-users@lists.pharo.org <mailto:pharo-users@lists.pharo.org> <mailto:pharo-users@lists.pharo.org <mailto:pharo-users@lists.pharo.org>>>>:
---------- P?eposlan? zpr?va ---------- From: Alidra Abdelghani <alidrandco@yahoo.fr <mailto:alidrandco@yahoo.fr> <mailto:alidrandco@yahoo.fr <mailto:alidrandco@yahoo.fr>> <mailto:alidrandco@yahoo.fr <mailto:alidrandco@yahoo.fr> <mailto:alidrandco@yahoo.fr <mailto:alidrandco@yahoo.fr>>>> To:pharo-users@lists.pharo.org <mailto:To%3Apharo-users@lists.pharo.org> <mailto:To%3Apharo-users@lists.pharo.org <mailto:To%253Apharo-users@lists.pharo.org>> <mailto:pharo-users@lists.pharo.org <mailto:pharo-users@lists.pharo.org> <mailto:pharo-users@lists.pharo.org <mailto:pharo-users@lists.pharo.org>>> Cc: Bcc: Date: Mon, 7 May 2018 11:25:49 +0100 Subject: Package extension. Adding instance variables to classes Hi,
I am working on a package named ClassNamesAnalyzer and I need to add code to third party classes in other packages (for instance the FAMIX-Core package). ?Extending? third party classes with methods is easy; I just need to categorise my methods under the *ClassNamesAnalyzer protocole so that loading my package will load them in the image. However, if I want to add instance variables to theses classes, they are not there when I load the package in a new image.
*So my question is* : is there a way to include instance variables addition to other packages in my package?
Currently not, you should use privateState
*Another question is* : is it good practice to add instance variables to classes in third party packages and is there a way to avoid it (because I am not very confortable with that idea)?
It is not, see FAMIXContainerEntity>>#definedAnnotationTypes how this issue is currently being solved using the privateState.
Cheers, -- Pavel
Thanks in advance, Abdelghani
--
Guille Polito
Research Engineer
Centre de Recherche en Informatique, Signal et Automatique de Lille
CRIStAL - UMR 9189
French National Center for Scientific Research - _http://www.cnrs.fr_
*Web:* _http://guillep.github.io_
*Phone: *+33 06 52 70 66 13
--
Guille Polito
Research Engineer
Centre de Recherche en Informatique, Signal et Automatique de Lille
CRIStAL - UMR 9189
French National Center for Scientific Research - _http://www.cnrs.fr_
*Web:* _http://guillep.github.io_
*Phone: *+33 06 52 70 66 13
--
Guille Polito
Research Engineer
Centre de Recherche en Informatique, Signal et Automatique de Lille
CRIStAL - UMR 9189
French National Center for Scientific Research - _http://www.cnrs.fr_
*Web:* _http://guillep.github.io_
*Phone: *+33 06 52 70 66 13
participants (2)
-
Guillermo Polito -
Herbert VojÄÃk