@@new
Dmitry Soshnikov
dmitry.soshnikov at gmail.com
Wed Jun 18 00:40:19 PDT 2014
On Tue, Jun 17, 2014 at 12:21 PM, Jason Orendorff <jason.orendorff at gmail.com
> wrote:
...
>
> ## Benefits
>
> * As with Allen's proposal, we would drop [[Construct]] and the
> `construct`
> trap.
>
> * @@create can be dropped entirely, but we retain the benefit to
> implementers
> that all Maps (for example) can have the same in-memory layout, and
> other
> objects can't become Maps at runtime.
>
>
These are pure implementation details, and only implementation
improvements, that are not that interesting to actual developers.
>
> This would reduce the number of `super` forms to these 3:
>
> super.IdentifierName // allowed in all methods
> super[Expression] // allowed in all methods
> super(arguments) // only allowed in constructors
>
>
I missed that: so we got another restriction, and devs won't be able to use
convenient concise `super()` calls from other methods? I don't think it's
the best direction.
Overall, we got three restrictions:
(1) super only on top of the constructor,
(2) want it or not: parent constructor is always called,
(3) you can't use concise super calls from methods.
+ bonus (4) you have to use some verbose syntax of static [Symbol.new]()
{} to do needed hacks.
What all these for? To exclude [[Construct]]/@@create form the
implementation? But developers are not interested in the implementation.
Developers want to make convenient super-calls, do not call parent
constructors if it's not needed (yes, it's rare, but can be), or to call it
whenever they want after predefined prologue.
Personally I think two traps are more intuitive and convenient (and are
present in many other languages: C++, Ruby, etc) than this
"spec/implementation-optimization", and users would appreciate the `new`
and `constructor` traps. The former can be used in rare cases when they'll
need custom allocation (and `this` value is not available there yet), and
the `constructor` is a normal initialiser of the allocated instance.
I mean, there should be a very strong reason to change an intuitive
semantics to this approach. "Spec/implementation optimizations" is not the
best reason, and that "parent constructor should always be called" is a
subjective, and just one of the semantics.
P.S.: as for the libraries, some "libraries" (actually my tests) were also
coupled to this allocate/initialize pair hooks approach:
https://gist.github.com/DmitrySoshnikov/1367025#file-r-proto-class-class-js-L23-L41
Dmitry
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20140618/6db2c5ff/attachment.html>
More information about the es-discuss
mailing list