<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><div>On Sep 25, 2011, at 2:20 PM, Axel Rauschmayer wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div><blockquote type="cite">We did not agree to drop the private declaration syntax at the July TC39 meeting. Perhaps my understanding of our agreement then does not match Marks?<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">What we agreed to drop was the private(this) straw syntax in the classes proposal, in favor of this[x], this[y], for private-declared private name objects x and y.<br></blockquote><br>For public properties one has two options:<br>1) this.foo = foo;<br>2) public foo = foo;<br><br>Using Mark’s terminology, #1 is imperative, #2 is declarative.<br><br>Private properties would be declared like this (right?)<br>this[myPrivateName] = someData;<br><br>This is imperative (like #1), there is no way to do this declaratively (like #2).<br></div></blockquote><div><br></div>At some point, we had</div><div><br></div><div>  private myPrivateName;</div><div><br></div><div>in the constructor body as the way to declare a private instance variable.</div><div><br></div><div>It's a bit odd to allow an initializer _I_ in such a declaration and have it mean this[myPrivateName] = _I_. This may be the glitch.</div><div><br></div><div>Even with the @ syntax that's not on the boards, a private x, y; declaration would not include the @ sigil, which seemed verbose yet inconsistent.</div><div><br></div><div>What's more, often the ctor takes parameters that one wants to initialize the same-named privates. This led to discussion here (and support in CoffeeScript prefiguring that discussion) of:</div><div><br></div><div><font class="Apple-style-span" face="Courier">  class Point {</font></div><div><font class="Apple-style-span" face="Courier">    constructor(@x, @y) {}</font></div><div><font class="Apple-style-span" face="Courier">    ...</font></div><div><font class="Apple-style-span" face="Courier">  }</font></div><div><br></div><div>as short for</div><div><br></div><div><div><font class="Apple-style-span" face="Courier">  class Point {</font></div><div><font class="Apple-style-span" face="Courier">    constructor(x, y) {</font></div><div><font class="Apple-style-span" face="Courier">      private x = x, y = y;</font></div><div><font class="Apple-style-span" face="Courier">    }</font></div><div><font class="Apple-style-span" face="Courier">    ...</font></div><div><font class="Apple-style-span" face="Courier">  }</font></div><div><font class="Apple-style-span" face="Courier"><br></font></div></div><div>It seems to me we'll quickly run into user push-back if we do not private any private instance variable sugar, not even for declaring and initializing from ctor parameters. But we can "go there" if it's the best way to make progress.</div><div><br></div><div>/be</div><div><br><blockquote type="cite"><div><br>I think it’s a clean solution and am not sure how much private properties are needed for non-security-critical applications. But it does not give you the automatic “const-ification” of “public”.<br><br>-- <br>Dr. Axel Rauschmayer<br><a href="mailto:axel@rauschma.de">axel@rauschma.de</a><br>twitter.com/rauschma<br><br>Home: rauschma.de<br>Blog: 2ality.com<br><br></div></blockquote></div><br></body></html>