On Nov 2, 2011, at 10:52 AM, David Flanagan wrote:

> On 11/1/11 11:53 PM, Brendan Eich wrote:
>> 
>> On Nov 1, 2011, at 10:27 PM, David Flanagan wrote:
>>> 1) Class bodies are new syntax, so you can introduce new keywords, right?  
>>> So 'prop' or 'proto'?  'static' puts a property on the class.  'private' 
>>> puts a (private) property on the instance.  So 'proto' could put a property 
>>> on the prototype.
>> 
>> Yes, but prefix keywords in front of every member? Too heavy. Labeled 
>> sections are problematic grammatically and most on TC39 hate 'em. prefixed 
>> braced sub-bodies over-indent.
>> 
>> There ought to be a sane unprefixed default. Then, though, we still have two 
>> choices:
>> 
>> (a) Data property initialiser syntax (x: v with comma separator).
>> 
>> (b) Assignment expression form (x = v with semicolon separator or terminator 
>> and some kind of ASI consistency).
>> 
>> Neither is great. I lean toward (b). You?
>> 
>> 
> I don't see why you can't use var syntax but with 'proto' as the keyword 
> instead of 'var':

I lean toward (a) now. I've made my peace with object initialiser syntax -- but 
with the Cordoba extensions for classes and object literals, as discussed with 
Jeremy today.


>>> Your private instance variables are quite interesting.
>> 
>> Yes, that is a missing ingredient in most proposals we've seen.
>> 
> And inquiring minds want to know more about them.  I assume they're scoped to 
> the entire class body, right?

Certainly.


> And they hoist to the top?

That's how we roll where possible.


>   Could they have initializers that were automatically included in the 
> constructor?

I answered that in a gist comment. Yes, I like the CoffeeScript constructor(@x, 
@y){} shorthand. Dart picked up on it, but requires this. instead of @. I'll 
put it in the gist.


> A comment in your gist (lines 186-187) seems to say that with 'private x', we 
> can use @x or this[x].  Is that really what you meant?

Sorry, not quite. I will fix that comment.


>   Plain 'x' is bound to the Name object and @x is the value of the property 
> with that name?  Is x a variable?

x is a const binding in the "@ scope" of the class body. It does not collide 
with any lexically bound x (formal parameter name, e.g.). That's important -- 
see the Monster constructor with its name and health parameters and private 
property names.

So, o@x is *not* o[x] for such a private-declared x.

Some argue @ should work for any x, so if there were some x = "y" in scope, 
then o@x would be o[x] would be o.y. I think that's too error-prone. What if I 
typo @heath instead of @health and there's a non-private-declared heath in 
scope?


> Does this mean that the class desugars into something that has a let 
> statement surrounding the all the methods?

No, because private x does not bind a lexical name 'x' usable freely.

private/@ is new, the semantics are a slight extension to today's, not 
desugarable without gensym. I'll consult with my semantic betters on this one.


>>> One nit: you're using @ as both a sigil in @name and as an operator in 
>>> other@name.  I would expect other.@name instead.
>> 
>> No, it's a prefix operator if in operand context (like / starting a regexp), 
>> a binary operator in operator context (/ as division).
>> 
>> Trying to avoid .@ all over, and this.@ noise.
>> 
> I think ordinary unary @ would dominate and .@ would be relatively rare.  But 
> when used, it would at least look like noisy property access rather than an 
> email address.  My gut says that regularity of     syntax wins over 
> conciseness and noise here.

Oh, I see -- you are suggesting @x as short for this.@x, and requiring other.@x 
for non-this-based references. That could work. IINM it even avoids the [no 
LineTerminator here] to the left of unary prefix @. Nice!

I hear you on the email thing. I'm big on grep, and I mourn the coming demise 
of codesearch.google.com.


> Do you expect the performance of private property lookup to be equivalent to 
> public property lookup?  That is will @foo take the same time as this.foo?

That is a requirement in my view.

/be

_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to