If the intent of classes is to provide a declarative syntax for its 'shape' 
then dropping the private syntax in lieu of private name objects seems to run 
counter to this philosophy. 
As I understand it, private name objects are a runtime construct dependent on 
the '@name' module and thus have no declarative definition. 
Are there yet to be defined ways to declaratively define/discover an instances 
private namespace?



________________________________
From: Axel Rauschmayer <[email protected]>
To: Mark S. Miller <[email protected]>
Cc: es-discuss <[email protected]>
Sent: Sunday, September 25, 2011 8:59 AM
Subject: Re: Class literals: does "public" still make sense?


Static analysis of the constructor should be able to do most of what "public" 
does, but after consulting the spec again, I see its advantages:
- Const classes make public properties unconfigurable and read-only.
- Shouldn’t public properties in non-const classes be unconfigurable, too? Are 
such properties expected to be configured? Read-only properties could be 
created via "public const".

On Sep 25, 2011, at 4:09 , Mark S. Miller wrote:

Hi Axel,
>
>
>This was one of the options we considered. At one point it was the main class 
>proposal. The problem is that since it looks exactly like an imperative 
>assignment to a property of "this", it should have the semantics of an 
>imperative assignment to a property of "this". In fact, the current class 
>proposal does not disallow it, and gives it exactly these semantics.
>
>
>However, when used as the only or main means of initializing an instance, it 
>defeats one of the main purpose of classes: The shape of the instances of a 
>given class are no longer a static declarative feature of the class itself. 
>Again, the contrast with modules is instructive. A CommonJS module exports 
>only by imperative assignment to properties of an "exports" object. A proposed 
>ES-next module exports by annotating top level declarations with "export". As 
>an abstraction mechanism, it would be bizarre to have good abstraction 
>properties only for abstractions that cannot be multiply instantiated.
>
>
>
>On Sat, Sep 24, 2011 at 4:17 PM, Axel Rauschmayer <[email protected]> wrote:
>
>Without private members, do we still need the keyword "public" in class 
>literals?
>>
>>For example, instead of
>> constructor(geometry, materials) {
>>   super(geometry, materials);
>>
>>   public identityMatrix = new THREE.Matrix4();
>>   public bones = [];
>>   public boneMatrices = [];
>>   ...
>> }
>>I find the following just as intuitive, without the need for the keyword 
>>"public":
>> constructor(geometry, materials) {
>>   super(geometry, materials);
>>
>>   this.identityMatrix = new THREE.Matrix4();
>>   this.bones = [];
>>   this.boneMatrices = [];
>>   ...
>> }
>>
>>Similarly intuitive is something that I’ve seen somewhere – passing through 
>>constructor arguments as members.
>> class Point {
>>   constructor(this.x, this.y) {
>>   }
>> }
>>
>>I don’t think "public" helps, I think it makes things *less* intuitive.
>>
>>--
>>Dr. Axel Rauschmayer
>>
>>[email protected]
>>twitter.com/rauschma
>>
>>home: rauschma.de
>>blog: 2ality.com
>>
>>
>>
>>_______________________________________________
>>es-discuss mailing list
>>[email protected]
>>https://mail.mozilla.org/listinfo/es-discuss
>>
>
>
>
>-- 
>    Cheers,
>    --MarkM
>

-- 
Dr. Axel Rauschmayer

[email protected]
twitter.com/rauschma

home: rauschma.de
blog: 2ality.com



_______________________________________________
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