Hmmm... I'm referencing http://wiki.ecmascript.org/doku.php?id=harmony:classes.
Is this one incorrect?

On Jun 8, 2011, at 11:13 AM, Bob Nystrom <[email protected]> wrote:

> Either I'm out-of-date or the wiki page is. My understanding is that at the 
> TC39 meetings we decided to move instance and private record declarations out 
> of the class body and into the constructor. If that's the case, this should 
> be less confusing. You can no longer use "public" or "private" at the class 
> body level. So that example becomes:
> 
> class Monster {
>   // "static" places the property on the constructor.
>   static allMonsters = [];
> 
>   // No modifier declares on the prototype.
>   numAttacks = 0;
> 
>   constructor() {
>     // "private" places it on the private record of the new instance.
>     private health;
>   }
> }
> 
> That's better, but "public" and "private" are still less than ideal keywords 
> here since Javascript's use of them is distinctly different from other 
> languages. Alas, they were the best we could come up with.
> 
> As far as your original question, Mark is right. You can have private 
> "static" state by just having a variable in the closure that surrounds the 
> class declaration but that isn't otherwise visible. Modules are one way to do 
> that. This is another:
> 
> var Monster;
> {
>   let allMonsters = [];
>   Monster = class {
>     // can access allMonsters here...
>   }
> }
> 
> (Hopefully I have that right.)
> 
> - bob
> 
> On Wed, Jun 8, 2011 at 1:11 AM, Kam Kasravi <[email protected]> wrote:
> Thanks Allen, more than I was hoping for ... 
> 
> 
> On Jun 7, 2011, at 10:11 PM, Allen Wirfs-Brock <[email protected]> wrote:
> 
>> There are lots of sources about this
>> 
>> The classic but somewhat technical paper that coined the phrase that I 
>> misquoted is William Cook's:  
>> http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.102.8635&rep=rep1&type=pdf
>>  
>>  some overviews http://c2.com/cgi/wiki?SubTypingAndSubClassing 
>>   another good overview, from more of a java 
>> perspectivehttp://www.mit.edu/~6.170/lectures/lect09-subtyping-handouts.pdf 
>> 
>> Basically, subtyping typically is taken to imply strict substitutability.  
>> An instance of a subtype can be used anywhere an instance of its supertype 
>> is expected.   This isn't just about what public methods are available (a 
>> subtype have can only add to the supertypes interface).  It is also about 
>> what can be passed to and returned form each method, recursively applied.  
>> It is trivial to break such substitutability with JavaScript objects, even 
>> those created by the proposed class declarations.  It is possible to create 
>> JavaScript objects that behave as subtypes but it takes work.  It may not 
>> always be worth the effort.
>> 
>> Statically typed languages and their users are often very concerned about 
>> correct subtyping because the memory safety of such languages often depends 
>> upon the fact that subtype substitutability invariants are guaranteed.  
>> Dynamic language folks are often less concerned because any such broken 
>> invariants will at worst cause the program to perform the wrong computation 
>> but dynamic runtime checks will still guarantee memory safety.  Your actual 
>> milage may vary. 
>> 
>> Allen
>> (I am not a type theorists)
>> 
>> 
>> 
>> On Jun 7, 2011, at 8:17 PM, Kam Kasravi wrote:
>> 
>>> Yes I puzzled over that a bit :)
>>> 
>>> I realize that types within a typed language need to provide certain 
>>> guarantees in terms of schema, equivalence, etc. For the those of us more 
>>> 'untyped' than others, could you expound very briefly on the type vs class 
>>> distinction? Is it due to javascript's ability to morph a class definition 
>>> both in terms of its properties and its prototype chain? I also ask due to 
>>> Dave's suggestion in relation to modules that ES.next is much more amenable 
>>> to static analysis (paraphrasing) which I would think an IDE would exploit 
>>> to provide some level of type-checking. In Allen's mirrors article, it 
>>> seems like types would be important to reflection.
>>> Although wouldn't you know, I searched Allen's article 
>>> (http://www.wirfs-brock.com/allen/posts/228) and he never once mentions 
>>> 'type' :)
>>> 
>>> On Jun 7, 2011, at 6:47 PM, Allen Wirfs-Brock <[email protected]> wrote:
>>> 
>>>> Oops, obviously I meant: JavaScript subclassing is definitely not 
>>>> equivalent to subtyping.  
>>>> 
>>>> Time for dinner-at keyboard too long.
>>>> 
>>>> On Jun 7, 2011, at 6:34 PM, Mark S. Miller wrote:
>>>> 
>>>>> On Tue, Jun 7, 2011 at 6:11 PM, Allen Wirfs-Brock <[email protected]> 
>>>>> wrote:
>>>>> 
>>>>>  In a language as dynamic as JavaScript subtyping is definitely not 
>>>>> equivalent to subtyping.
>>>>> 
>>>>> 
>>>>> Wow, JavaScript is even more dynamic than I thought ;). 
>>>>> 
>>>>> 
>>>>> 
>>>>> -- 
>>>>>     Cheers,
>>>>>     --MarkM
>>>> 
>> 
> 
> _______________________________________________
> es-discuss mailing list
> [email protected]
> https://mail.mozilla.org/listinfo/es-discuss
> 
> 
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to