On Tuesday, 2012-04-03 at 01:49 , David Bruant wrote:
> Le 02/04/2012 17:59, Irakli Gozalishvili a écrit :  
> > Hi David,  
> >  
> > Your protected work reminds me a lot of what we did with `namespcase` 
> > module in jetpack:  
> > https://addons.mozilla.org/en-US/developers/docs/sdk/latest/packages/api-utils/namespace.html
> > Which I also blogged about some time ago: 
> > http://jeditoolkit.com/2012/03/15/namespaces.html#post
> >  
>  
> As soon as I first wrote "Protected(this)", I thought of Jetpack namespaces 
> :-)
>  
> I remember that one of your complaints about namespaces was that inheritance 
> was not supported. Do you think there is a workable middleground between 
> namespaces and what I've showed here that would have the benefits of 
> namespaces and inheritance?
>  

Adding inheritance support turned out to be pretty easy and there is a patch in 
a review that would add support to it:
https://github.com/mozilla/addon-sdk/pull/375
  
> > > I have made obvious by juxtaposing both examples that JavaScript
> > > requires from the programmer to choose between encapsulation and
> > > inheritance. Indeed, as demonstarted above, encapsulation requires a
> > > shared scope.
> > >  
> > >  
> > >  
> >  
> >  
> > I totally agree that with this pain point, but hopefully private names will 
> > help this. What drove me to reimplement something like Java's protected is 
> > that I fear private names won't be enough.
>  
> Basically, if an object o is an A and all As are Bs, if you only have private 
> names, then, o's methods inherited from B can access private names related to 
> B. o's methods inherited from A can access private names related to A.
> However, A methods can access private names related to B only if B shares 
> them (like the "secret" and "age" of my example). B can share them "globally" 
> (in the sense of "to anyone", not necessarily as properties of the global 
> object), which effectively makes the private names no longer private, but 
> only unique, or A and B need to share a common scope which, in my opinion, 
> does not scale (it forces A and B to be in the same file which is not always 
> an option if you want to use code written in a library)
>  
>  
> > Still I think that there are other expression problems with classes that 
> > could be elegantly solved using clojure like protocols that I have posted 
> > other day:  
> >  
> > http://jeditoolkit.com/2012/03/21/protocol-based-polymorphism.html#post  
> > https://mail.mozilla.org/pipermail/es-discuss/2012-March/021603.html
> >  
> >  
>  
> I had completely missed that.
>  
> > Unfortunately I did not got much of a feedback ;) I'll need to watch the 
> > video and read more, but that's an interesting idea.
>  
> "Note: That even though both Event and Installable protocols define functions 
> on and off. Also Object implements both still protocols, but there no 
> conflicts arise and functions defined by both protocols can be used without 
> any issues!"
> => This part is rather intriguing. I'm afraid this may lead to confusion. 
> When I write .on, am I installing? adding a listener? Doing both?
They are different functions (not the methods). I was asked a similar it in the 
question and I replied there:
http://jeditoolkit.com/2012/03/21/protocol-based-polymorphism.html#comment-474857390
https://gist.github.com/2175647  
> Also, how are name conflits resolved? Regardless of the exact choice, it 
> seems to be implicit and thus certainly confusing. On that aspect, I would 
> tend to prefer traits or a traits-like solution.
There are no conflicts that's a whole point :)  
>  
> David

_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to