WeakXxx and Pharo7+ (was: Re: Package extension. Adding instance variables to classes)

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

WeakXxx and Pharo7+ (was: Re: Package extension. Adding instance variables to classes)

Herby Vojčík


Guillermo Polito wrote:

>
> On Sun, May 13, 2018 at 6:37 PM, Herbert Vojčík <[hidden email]
> <mailto:[hidden email]>> 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 <[hidden email]
>         <mailto:[hidden email]>
>         <mailto:[hidden email]
>         <mailto:[hidden email]>>> wrote:
>
>
>
>              ---------- Forwarded message ----------
>              From: Alidra Abdelghani <[hidden email]
>         <mailto:[hidden email]>
>              <mailto:[hidden email] <mailto:[hidden email]>>>
>              To: Pavel Krivanek <[hidden email]
>         <mailto:[hidden email]>
>              <mailto:[hidden email]
>         <mailto:[hidden email]>>>
>              Cc: Any question about pharo is welcome
>         <[hidden email] <mailto:[hidden email]>
>              <mailto:[hidden email]
>         <mailto:[hidden email]>>>
>              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,
>             [hidden email]
>             <mailto:[hidden email]>
>                  <mailto:[hidden email]
>             <mailto:[hidden email]>> wrote:
>
>
>                  Message: 1
>                  Date: Mon, 7 May 2018 13:43:56 +0200
>                  From: Pavel Krivanek <[hidden email]
>             <mailto:[hidden email]>
>                  <mailto:[hidden email]
>             <mailto:[hidden email]>>>
>                  To: Any question about pharo is welcome
>                  <[hidden email]
>             <mailto:[hidden email]>
>             <mailto:[hidden email]
>             <mailto:[hidden email]>>>
>                  Subject: Re: [Pharo-users] Package extension. Adding
>             instance
>                  variables to classes
>                  Message-ID:
>                
>             <CAHN2FzeMiBL4Y8asJ0XCjS2AQdxycoN+pbc+Hsd=[hidden email]
>             <mailto:[hidden email]>
>             <mailto:CAHN2FzeMiBL4Y8asJ0XCjS2AQdxycoN+pbc+Hsd
>             <mailto:CAHN2FzeMiBL4Y8asJ0XCjS2AQdxycoN%2Bpbc%2BHsd>=[hidden email]
>             <mailto:[hidden email]>>>
>                  Content-Type: text/plain; charset="utf-8"
>
>                  2018-05-07 12:25 GMT+02:00 Alidra Abdelghani via
>             Pharo-users <
>             [hidden email]
>             <mailto:[hidden email]>
>             <mailto:[hidden email]
>             <mailto:[hidden email]>>>:
>
>
>
>                      ---------- P?eposlan? zpr?va ----------
>                      From: Alidra Abdelghani <[hidden email]
>                 <mailto:[hidden email]>
>                      <mailto:[hidden email]
>                 <mailto:[hidden email]>>>
>                 To:[hidden email]
>                 <mailto:To%[hidden email]>
>                 <mailto:[hidden email]
>                 <mailto:[hidden email]>>
>                      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
>

Reply | Threaded
Open this post in threaded view
|

Re: WeakXxx and Pharo7+ (was: Re: Package extension. Adding instance variables to classes)

Guillermo Polito


On Mon, May 14, 2018 at 11:22 AM, Herbert Vojčík <[hidden email]> wrote:


Guillermo Polito wrote:

On Sun, May 13, 2018 at 6:37 PM, Herbert Vojčík <[hidden email] <mailto:[hidden email]>> 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 <[hidden email]
        <mailto:[hidden email]>
        <mailto:[hidden email]
        <mailto:[hidden email]>>> wrote:



             ---------- Forwarded message ----------
             From: Alidra Abdelghani <[hidden email]
        <mailto:[hidden email]>
             <mailto:[hidden email] <mailto:[hidden email]>>>
             To: Pavel Krivanek <[hidden email]
        <mailto:[hidden email]>
             <mailto:[hidden email]
        <mailto:[hidden email]>>>
             Cc: Any question about pharo is welcome
        <[hidden email] <mailto:[hidden email]>
             <mailto:[hidden email]
        <mailto:[hidden email]>>>
             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,
            [hidden email]
            <mailto:[hidden email]>
                 <mailto:[hidden email]
            <mailto:[hidden email]>> wrote:


                 Message: 1
                 Date: Mon, 7 May 2018 13:43:56 +0200
                 From: Pavel Krivanek <[hidden email]
            <mailto:[hidden email]>
                 <mailto:[hidden email]
            <mailto:[hidden email]>>>
                 To: Any question about pharo is welcome
                 <[hidden email]
            <mailto:[hidden email]>
            <mailto:[hidden email]
            <mailto:[hidden email]>>>
                 Subject: Re: [Pharo-users] Package extension. Adding
            instance
                 variables to classes
                 Message-ID:
                            <CAHN2FzeMiBL4Y8asJ0XCjS2AQdxycoN+pbc+Hsd=[hidden email]
            <mailto:[hidden email]>
            <mailto:[hidden email]
            <mailto:[hidden email]>=[hidden email]
            <mailto:[hidden email]>>>
                 Content-Type: text/plain; charset="utf-8"

                 2018-05-07 12:25 GMT+02:00 Alidra Abdelghani via
            Pharo-users <
            [hidden email]
            <mailto:[hidden email]>
            <mailto:[hidden email]
            <mailto:[hidden email]>>>:



                     ---------- P?eposlan? zpr?va ----------
                     From: Alidra Abdelghani <[hidden email]
                <mailto:[hidden email]>
                     <mailto:[hidden email]
                <mailto:[hidden email]>>>
                [hidden email]
                <mailto:[hidden email]>
                <mailto:[hidden email]
                <mailto:[hidden email]>>
                     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

Reply | Threaded
Open this post in threaded view
|

Re: WeakXxx and Pharo7+ (was: Re: Package extension. Adding instance variables to classes)

Herby Vojčík


Guillermo Polito wrote:

>
>
> On Mon, May 14, 2018 at 11:22 AM, Herbert Vojčík <[hidden email]
> <mailto:[hidden email]>> wrote:
>
>
>
>     Guillermo Polito wrote:
>
>
>         On Sun, May 13, 2018 at 6:37 PM, Herbert Vojčík
>         <[hidden email] <mailto:[hidden email]>
>         <mailto:[hidden email] <mailto:[hidden email]>>> 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 <[hidden email]
>         <mailto:[hidden email]>
>                  <mailto:[hidden email]
>         <mailto:[hidden email]>>
>                  <mailto:[hidden email]
>         <mailto:[hidden email]>
>                  <mailto:[hidden email]
>         <mailto:[hidden email]>>>> wrote:
>
>
>
>                       ---------- Forwarded message ----------
>                       From: Alidra Abdelghani <[hidden email]
>         <mailto:[hidden email]>
>                  <mailto:[hidden email] <mailto:[hidden email]>>
>                       <mailto:[hidden email]
>         <mailto:[hidden email]> <mailto:[hidden email]
>         <mailto:[hidden email]>>>>
>                       To: Pavel Krivanek <[hidden email]
>         <mailto:[hidden email]>
>                  <mailto:[hidden email]
>         <mailto:[hidden email]>>
>                       <mailto:[hidden email]
>         <mailto:[hidden email]>
>                  <mailto:[hidden email]
>         <mailto:[hidden email]>>>>
>                       Cc: Any question about pharo is welcome
>                  <[hidden email]
>         <mailto:[hidden email]>
>         <mailto:[hidden email]
>         <mailto:[hidden email]>>
>                       <mailto:[hidden email]
>         <mailto:[hidden email]>
>                  <mailto:[hidden email]
>         <mailto:[hidden email]>>>>
>                       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,
>         [hidden email]
>         <mailto:[hidden email]>
>                      <mailto:[hidden email]
>         <mailto:[hidden email]>>
>                           <mailto:[hidden email]
>         <mailto:[hidden email]>
>                      <mailto:[hidden email]
>         <mailto:[hidden email]>>> wrote:
>
>
>                           Message: 1
>                           Date: Mon, 7 May 2018 13:43:56 +0200
>                           From: Pavel Krivanek <[hidden email]
>         <mailto:[hidden email]>
>                      <mailto:[hidden email]
>         <mailto:[hidden email]>>
>                           <mailto:[hidden email]
>         <mailto:[hidden email]>
>                      <mailto:[hidden email]
>         <mailto:[hidden email]>>>>
>                           To: Any question about pharo is welcome
>                           <[hidden email]
>         <mailto:[hidden email]>
>                      <mailto:[hidden email]
>         <mailto:[hidden email]>>
>                      <mailto:[hidden email]
>         <mailto:[hidden email]>
>                      <mailto:[hidden email]
>         <mailto:[hidden email]>>>>
>                           Subject: Re: [Pharo-users] Package extension.
>         Adding
>                      instance
>                           variables to classes
>                           Message-ID:
>                                    
>         <CAHN2FzeMiBL4Y8asJ0XCjS2AQdxycoN+pbc+Hsd=[hidden email]
>         <mailto:[hidden email]>
>                      <mailto:[hidden email]
>         <mailto:[hidden email]>>
>                      <mailto:CAHN2FzeMiBL4Y8asJ0XCjS2AQdxycoN+pbc+Hsd
>         <mailto:CAHN2FzeMiBL4Y8asJ0XCjS2AQdxycoN%2Bpbc%2BHsd>
>                    
>         <mailto:CAHN2FzeMiBL4Y8asJ0XCjS2AQdxycoN%2Bpbc%2BHsd
>         <mailto:CAHN2FzeMiBL4Y8asJ0XCjS2AQdxycoN%252Bpbc%252BHsd>>=[hidden email]
>         <mailto:[hidden email]>
>                      <mailto:[hidden email]
>         <mailto:[hidden email]>>>>
>                           Content-Type: text/plain; charset="utf-8"
>
>                           2018-05-07 12:25 GMT+02:00 Alidra Abdelghani via
>                      Pharo-users <
>         [hidden email] <mailto:[hidden email]>
>                      <mailto:[hidden email]
>         <mailto:[hidden email]>>
>                      <mailto:[hidden email]
>         <mailto:[hidden email]>
>                      <mailto:[hidden email]
>         <mailto:[hidden email]>>>>:
>
>
>
>                               ---------- P?eposlan? zpr?va ----------
>                               From: Alidra Abdelghani
>         <[hidden email] <mailto:[hidden email]>
>                          <mailto:[hidden email]
>         <mailto:[hidden email]>>
>                               <mailto:[hidden email]
>         <mailto:[hidden email]>
>                          <mailto:[hidden email]
>         <mailto:[hidden email]>>>>
>         To:[hidden email]
>         <mailto:To%[hidden email]>
>                          <mailto:To%[hidden email]
>         <mailto:To%[hidden email]>>
>                          <mailto:[hidden email]
>         <mailto:[hidden email]>
>                          <mailto:[hidden email]
>         <mailto:[hidden email]>>>
>                               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
>