> Anyway, my point is that decorators in front of functions and classes or > other declarative forms work. In front of every property assignment in an > object literal? Not so much.
The defaults outlined in “Object Literal Extensions” should work well, I especially like the shorter syntax for methods. What other needs are there? @const (=non-configurable and non-writable) and @private? That would move things a little more into the direction of Java, but I wouldn’t mind that. A little more verbose, yes, but one would also immediately understand what is going on. > It may be that we require @decorators to start on a new line (with leading > horizontal space allowed, of course), in order to enable @ as an operator in > expressions where [no LineTerminator here] would apply to the left of the @. That makes sense. I always format my code like this, anyway. Syntax coloring displays them in gray which greatly minimizes *perceived* clutter. > What are the few special characters that you can handle, right now, as > additions mooted for JS? I can handle everything except for some of the proposed object literal shorthands (see code at the bottom of this email). Read on. > Quasi-literals rule, and `` is the right quoting system given the characters > left that can be easily typed and that don't ding readability. Yes, I love them and hope that assignment via ${=x} makes it into ES.next, because that’ll enable us to do all kinds of matching. > We have <| but it is a bit contentious. No one has topped it, though, and a > keyword instead seems to lose on both restricted-production and > no-better-word-than-<| grounds. I like that one, it’s very visual; I find it more descriptive than the keyword "proto". > Some find -> and => cryptic, but it's hard to say the only alternative is to > stick to eight-letter 'function'. ('lambda' is not reserved and can't be used > without breaking compatibility; and it's six letters.) > > Some find block-lambdas with their Ruby- (and to a lesser extend Smalltalk-) > inspired {||...} bracketing cryptic. - Pro block-lambdas: A new construct that can be used in places where dynamic |this| (that normal functions are always going to have) would be a burden. - Pro arrows: little semantic change. With the shorthand for methods in object literals, there is the question whether dynamic |this| is ever needed. But if we need both dynamic and lexical |this|, then the arrows are nice in that they look similar, but are still different. - Pro ƒ: short, syntactically very similar to current semantics *and* syntax. And as easy to type on a German Mac keyboard as curly braces and square brackets. But I respect the reasoning against it and am in awe that you still have the patience to discuss this kind of issue. > There are other options, but they all face genreric "too much line noise!" > objections. Programming language syntax is in the same category as politics and religion: There are few simple compromises. This is me being oblivious to many of the gory details, but if only my taste mattered, then I would do the following: ==== Instead of (example in the proposal) ... ==== var obj = theProtoObj <| {.seal, ~konst:= f(), handler: defaultHandler, ~get super set name(v) {throw Error("some message")}, source() {throw Error("another message")}, toString() {return "d "+super.toString()} }; ==== ... write the following ==== var obj = theProtoObj <| {.seal, @const konst: f(), handler: defaultHandler, get name() { return super.name; }, set name(v) { throw Error("some message"); }, source() {throw new Error("another message")}, toString() {return "d "+super.toString()}, ]; ==== Rationale ==== - Does enumerability ever matter? - Passing the getter through to the super-class seems like a rare use case. Doing so manually could be optimized by a compiler and while it is a tiny bit verbose, it clearly expresses what is going on. The proposed shorthand is hard to parse for me. Alternative: get name() super, set name(v) { throw Error("some message"); }, -- Dr. Axel Rauschmayer a...@rauschma.de twitter.com/rauschma home: rauschma.de blog: 2ality.com _______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss