Oops,

Hmm, so at this point, why not emiting ES6 syntax and use ES6 polyfills from 
babel ?

For example, for module, from [1] :

-----------------------------------------------
Module loaders support:

    Dynamic loading
    State isolation
    Global namespace isolation
    Compilation hooks
    Nested virtualization

The default module loader can be configured, and new loaders can be constructed 
to evaluated and load code in isolated or constrained contexts.

// Dynamic loading – ‘System’ is default loader
System.import("lib/math").then(function(m) {
  alert("2p = " + m.sum(m.pi, m.pi));
});

// Create execution sandboxes – new Loaders
var loader = new Loader({
  global: fixup(window) // replace ‘console.log’
});
loader.eval("console.log(\"hello world!\");");

// Directly manipulate module cache
System.get("jquery");
System.set("jquery", Module({$: $})); // WARNING: not yet finalized
-----------------------------------------------

They use this polyfill [2]

Doesn't seem very nice ? :-)

Frédéric THOMAS

[1] http://babeljs.io/docs/learn-es2015/
[1] https://github.com/ModuleLoader/es6-module-loader

From: webdoubl...@hotmail.com
To: dev@flex.apache.org
Subject: RE: [FalconJX][FlexJS] Do we still want to use Google Closure Library? 
(was Re: [FalconJX] JXEmitter accessors)
Date: Thu, 28 May 2015 16:37:34 +0100




Hmm, so at this point, why not emiting ES6 syntax and use ES6 polyfills from 
babel ?

For example, for module, from [1] :


Frédéric THOMAS

> From: aha...@adobe.com
> To: dev@flex.apache.org
> Subject: [FalconJX][FlexJS] Do we still want to use Google Closure Library? 
> (was Re: [FalconJX] JXEmitter accessors)
> Date: Thu, 28 May 2015 15:22:39 +0000
> 
> Starting a new thread:
> 
> We are basically using Closure Library based on Erik’s recommendation, but
> at the time I still wanted to support IE8.  We are now making the minimum
> IE9 because we want decent SVG support and Object.defineProperties.  So,
> now is a good time to revisit how much of Closure Library we need.  IIRC,
> we are using
> 
> -goog.events: This gets us a decent event model on non-DOM objects.
> -goog.provide/require: This gets us a way to order the loading of multiple
> JS files which I find useful when debugging JS code during development.
> -goog.inherits: This provides a way to set up inheritance and call base
> class methods.
> 
> I might be forgetting something.  Hopefully Erik as time to offer his
> thoughts.
> 
> For older browsers I am currently recommending deploying a SWF on those
> browsers since they almost all have Flash Player in them.  Then we don’t
> have to worry so much about polyfills.
> 
> -Alex
> 
> On 5/28/15, 8:11 AM, "Frédéric THOMAS" <webdoubl...@hotmail.com> wrote:
> 
> >> I suspect Closure is trying to be more backwards compatible. I think
> >> Object. create() was added in ES5, and maybe they're aiming for ES3
> >>there.
> >
> >Correct, using Closure we guaranty compatibility < ES5 but I wonder if we
> >are good to do so, the reason was that companies were very stricks and
> >allow only one browser and update rarely, my experience tells me it less
> >true and most of the broswer are now autoupdated, (eg. Chrome, Firefox
> >and even Opera now, ok, maybe not IE), what others have as experience now
> >days ?
> >
> >A lot of work has been done with the Closure API already, not sure it has
> >been discussed before but another option would have been to write for ES5
> >browsers and have a bootstrap to load ES5 polyfills if the Application
> >runs under an older browser, doing so, we could have emit the nice, out
> >of the box more powerfull ES5 code and I might be wrong but also faster
> >than using Closure and eventually emulate extra JS higher level functions
> >like what Alex said about the C -> B -> A issue when B doesn't override a
> >A accessor and we want to access it from C.
> >
> >But maybe also, I don't see the all picture why we didn't do that.
> >
> >Frédéric THOMAS
> >
> >> Date: Thu, 28 May 2015 07:46:10 -0700
> >> Subject: Re: [FalconJX] JXEmitter accessors
> >> From: joshtynj...@gmail.com
> >> To: dev@flex.apache.org
> >> 
> >> I suspect Closure is trying to be more backwards compatible. I think
> >> Object. create() was added in ES5, and maybe they're aiming for ES3
> >>there.
> >> 
> >> - Josh
> >> On May 28, 2015 7:11 AM, "Michael Schmalle" <teotigraphix...@gmail.com>
> >> wrote:
> >> 
> >> > See this is where I am clueless, is this a difference between backward
> >> > compatibility or something?
> >> >
> >> > Like Object.create() not all older browsers support?
> >> >
> >> > Mike
> >> >
> >> > On Thu, May 28, 2015 at 10:06 AM, Frédéric THOMAS
> >><webdoubl...@hotmail.com
> >> > >
> >> > wrote:
> >> >
> >> > > Btw, this is the diff between Closure and Babel:
> >> > >
> >> > > goog.inherits = function (childCtor, parentCtor) {
> >> > >     /** @constructor */
> >> > >     function tempCtor() {
> >> > >     };
> >> > >     tempCtor.prototype = parentCtor.prototype;
> >> > >     childCtor.superClass_ = parentCtor.prototype;
> >> > >     childCtor.prototype = new tempCtor();
> >> > >     /** @override */
> >> > >     childCtor.prototype.constructor = childCtor;
> >> > > };
> >> > >
> >> > > function _inherits(subClass, superClass) {
> >> > >     if (typeof superClass !== "function" && superClass !== null) {
> >> > >         throw new TypeError("Super expression must either be null
> >>or a
> >> > > function, not " + typeof superClass);
> >> > >     }
> >> > >     subClass.prototype = Object.create(superClass &&
> >> > superClass.prototype,
> >> > > {
> >> > >         constructor: {
> >> > >             value: subClass,
> >> > >             enumerable: false,
> >> > >             writable: true,
> >> > >             configurable: true
> >> > >         }
> >> > >     });
> >> > >     if (superClass) subClass.__proto__ = superClass;
> >> > > }
> >> > >
> >> > >
> >> > > Frédéric THOMAS
> >> > >
> >> > > > Date: Thu, 28 May 2015 09:36:50 -0400
> >> > > > Subject: Re: [FalconJX] JXEmitter accessors
> >> > > > From: teotigraphix...@gmail.com
> >> > > > To: dev@flex.apache.org
> >> > > >
> >> > > > So Alex, you are saying try what Bable produces for get/set and
> >>make
> >> > > sure I
> >> > > > make it swappable and not coupled in the emitter right?
> >> > > >
> >> > > > What are you doing for nested function scopes? Just creating local
> >> > > > variables outside the function and referencing the current scope?
> >> > > >
> >> > > > Mike
> >> > > >
> >> > > > On Thu, May 28, 2015 at 9:33 AM, Alex Harui <aha...@adobe.com>
> >>wrote:
> >> > > >
> >> > > > > FWIW, I did not test goog.inherit against
> >>Object.getPrototypeOf.  It
> >> > > might
> >> > > > > not work as some libraries may not use vanilla prototype
> >>inheritance.
> >> > > So
> >> > > > > abstracting that piece will provide more flexibility.
> >> > > > >
> >> > > > > -Alex
> >> > > > >
> >> > > > > On 5/28/15, 6:25 AM, "Michael Schmalle"
> >><teotigraphix...@gmail.com>
> >> > > wrote:
> >> > > > >
> >> > > > > >Fred,
> >> > > > > >
> >> > > > > >I said TS only because Josh said it looked nice, the came Josh
> >>with
> >> > > Bable
> >> > > > > >and Joa said Babel.
> >> > > > > >
> >> > > > > >Right now it's the whole class structure that needs a template.
> >> > > > > >
> >> > > > > >> Yes but given I'm more than busy, would be nice if you write
> >>it
> >> > > first in
> >> > > > > >AS :)
> >> > > > > >
> >> > > > > >I meant copy and paste, I didn't mean write it. Don't worry
> >>about
> >> > it.
> >> > > > > >
> >> > > > > >I'm still confused as usual so I guess I will wait until
> >>things sink
> >> > > in
> >> > > > > >more. I have done this a couple times and what I learned is I
> >>need a
> >> > > spec
> >> > > > > >first before I start writing the code.
> >> > > > > >
> >> > > > > >I'm setting aside about 3 hours a day to work on this, so I
> >>guess I
> >> > > will
> >> > > > > >start with the basic tests in expression and start to fiddle
> >>form
> >> > > there.
> >> > > > > >
> >> > > > > >Alex, Josh any thoughts?
> >> > > > > >
> >> > > > > >Mike
> >> > > > > >
> >> > > > > >
> >> > > > > >On Thu, May 28, 2015 at 9:14 AM, Frédéric THOMAS <
> >> > > webdoubl...@hotmail.com
> >> > > > > >
> >> > > > > >wrote:
> >> > > > > >
> >> > > > > >> > You mean if AS3 and ES6 inherit the same way correct? I
> >>wouldn't
> >> > > know
> >> > > > > >>the
> >> > > > > >> > answer to this I guess all we can do is try it right? :)
> >> > > > > >>
> >> > > > > >> Nope, I meant Babel and TS because you said you will base
> >>your
> >> > > tests on
> >> > > > > >> the TS ones, so, if you emit a such utility function, be sure
> >> > first
> >> > > we
> >> > > > > >> extend classes in the same way than Babel hoping TS does the
> >>same.
> >> > > > > >>
> >> > > > > >> > I guess one of the other questions is how it
> >>handles/outputs
> >> > > anonymous
> >> > > > > >> > function call scope, you want to do a test with that? Like
> >>three
> >> > > or so
> >> > > > > >> > levels nested.
> >> > > > > >>
> >> > > > > >> Yes but given I'm more than busy, would be nice if you write
> >>it
> >> > > first in
> >> > > > > >> AS :)
> >> > > > > >>
> >> > > > > >> Thanks
> >> > > > > >> Frédéric THOMAS
> >> > > > > >>
> >> > > > > >> > Date: Thu, 28 May 2015 08:51:20 -0400
> >> > > > > >> > Subject: Re: [FalconJX] JXEmitter accessors
> >> > > > > >> > From: teotigraphix...@gmail.com
> >> > > > > >> > To: dev@flex.apache.org
> >> > > > > >> >
> >> > > > > >> > On Thu, May 28, 2015 at 8:41 AM, Frédéric THOMAS <
> >> > > > > >> webdoubl...@hotmail.com>
> >> > > > > >> > wrote:
> >> > > > > >> >
> >> > > > > >> > > > So what is different about this?
> >> > > > > >> > > >
> >> > > > > >> > > > The only thing I can think of is that we introduce
> >>utility
> >> > > > > >>functions
> >> > > > > >> to
> >> > > > > >> > > do
> >> > > > > >> > > > the work
> >> > > > > >> > >
> >> > > > > >> > > Yes, that, I guess both of the language inherit in the
> >>same
> >> > > way, if
> >> > > > > >> yes,
> >> > > > > >> > > this function is re-usable IMO
> >> > > > > >> > >
> >> > > > > >> >
> >> > > > > >> >
> >> > > > > >> > You mean if AS3 and ES6 inherit the same way correct? I
> >>wouldn't
> >> > > know
> >> > > > > >>the
> >> > > > > >> > answer to this I guess all we can do is try it right? :)
> >> > > > > >> >
> >> > > > > >> > I'm going to create a branch in falcon jxemitter and start
> >> > > working on
> >> > > > > >>it.
> >> > > > > >> >
> >> > > > > >> > I guess one of the other questions is how it
> >>handles/outputs
> >> > > anonymous
> >> > > > > >> > function call scope, you want to do a test with that? Like
> >>three
> >> > > or so
> >> > > > > >> > levels nested.
> >> > > > > >> >
> >> > > > > >> > Mike
> >> > > > > >> >
> >> > > > > >> >
> >> > > > > >> >
> >> > > > > >> > >
> >> > > > > >> > > Frédéric THOMAS
> >> > > > > >> > >
> >> > > > > >> > > > Date: Thu, 28 May 2015 08:38:16 -0400
> >> > > > > >> > > > Subject: Re: [FalconJX] JXEmitter accessors
> >> > > > > >> > > > From: teotigraphix...@gmail.com
> >> > > > > >> > > > To: dev@flex.apache.org
> >> > > > > >> > > >
> >> > > > > >> > > > Well yes, I follow the logic. I don't understand if
> >>this is
> >> > a
> >> > > > > >> solution,
> >> > > > > >> > > why
> >> > > > > >> > > > TypeScript doesn't use the same algorithm.
> >> > > > > >> > > >
> >> > > > > >> > > > I read what the developers said and they said they had
> >> > talked
> >> > > > > >>about
> >> > > > > >> it in
> >> > > > > >> > > > length when the project first started and came to the
> >> > > conclusion
> >> > > > > >> there
> >> > > > > >> > > > really is no solution.
> >> > > > > >> > > >
> >> > > > > >> > > > So what is different about this?
> >> > > > > >> > > >
> >> > > > > >> > > > The only thing I can think of is that we introduce
> >>utility
> >> > > > > >>functions
> >> > > > > >> to
> >> > > > > >> > > do
> >> > > > > >> > > > the work and they didn't want to do that, I did get
> >>this
> >> > from
> >> > > the
> >> > > > > >> > > > conversation, they stated they wanted it to be plain
> >> > > javascript,
> >> > > > > >>the
> >> > > > > >> only
> >> > > > > >> > > > helper they use is _extends function they write out for
> >> > > > > >>inheritance.
> >> > > > > >> > > >
> >> > > > > >> > > > I was thinking about TypeScript, other than the
> >>language
> >> > > > > >>difference,
> >> > > > > >> > > there
> >> > > > > >> > > > is really NO difference in our compiler and what they
> >>do.
> >> > > Which is
> >> > > > > >> cool
> >> > > > > >> > > > because all the usecases that they have will apply to
> >>this
> >> > > > > >>emitter.
> >> > > > > >> > > >
> >> > > > > >> > > > Plus we have libraries and IDE support and possible
> >>MXML in
> >> > > the
> >> > > > > >> future.
> >> > > > > >> > > >
> >> > > > > >> > > > Mike
> >> > > > > >> > > >
> >> > > > > >> > > > On Thu, May 28, 2015 at 8:27 AM, Frédéric THOMAS <
> >> > > > > >> > > webdoubl...@hotmail.com>
> >> > > > > >> > > > wrote:
> >> > > > > >> > > >
> >> > > > > >> > > > > I'm not a javascript guru either, but it was easy to
> >> > create
> >> > > ES6
> >> > > > > >> classes
> >> > > > > >> > > > > (left pane) and see the output (right pane), so, for
> >>the
> >> > > > > >>setter, it
> >> > > > > >> > > creates:
> >> > > > > >> > > > >
> >> > > > > >> > > > > For class A (simple):
> >> > > > > >> > > > >
> >> > > > > >> > > > >         get: function () {
> >> > > > > >> > > > >             return this._property;
> >> > > > > >> > > > >         },
> >> > > > > >> > > > >         set: function (value) {
> >> > > > > >> > > > >             this._property = value;
> >> > > > > >> > > > >         }
> >> > > > > >> > > > >
> >> > > > > >> > > > > For class B:
> >> > > > > >> > > > >
> >> > > > > >> > > > >
> >> > > > > >> > > > > set: function (value) {
> >> > > > > >> > > > >             _set(Object.getPrototypeOf(B.prototype),
> >> > > "property",
> >> > > > > >> value,
> >> > > > > >> > > > > this);
> >> > > > > >> > > > >         }
> >> > > > > >> > > > >
> >> > > > > >> > > > > Which calls:
> >> > > > > >> > > > >
> >> > > > > >> > > > > var _set = function set(object, property, value,
> >> > receiver) {
> >> > > > > >> > > > >     var desc =
> >>Object.getOwnPropertyDescriptor(object,
> >> > > > > >>property);
> >> > > > > >> //
> >> > > > > >> > > Get
> >> > > > > >> > > > > the property on B
> >> > > > > >> > > > >     if (desc === undefined) { // If not overrided,
> >>will
> >> > set
> >> > > the
> >> > > > > >> parent
> >> > > > > >> > > > > recursively if the parent doesn't override the
> >>property
> >> > > either.
> >> > > > > >> > > > >         var parent = Object.getPrototypeOf(object);
> >> > > > > >> > > > >         if (parent !== null) {
> >> > > > > >> > > > >             set(parent, property, value, receiver);
> >> > > > > >> > > > >         }
> >> > > > > >> > > > >     } else if ("value" in desc && desc.writable) { //
> >> > > didn't get
> >> > > > > >> this
> >> > > > > >> > > part
> >> > > > > >> > > > >         desc.value = value;
> >> > > > > >> > > > >     } else { // Else call the setterv of this Object
> >> > > > > >> > > > >         var setter = desc.set;
> >> > > > > >> > > > >         if (setter !== undefined) {
> >> > > > > >> > > > >             setter.call(receiver, value);
> >> > > > > >> > > > >         }
> >> > > > > >> > > > >     }
> >> > > > > >> > > > >     return value;
> >> > > > > >> > > > > };
> >> > > > > >> > > > >
> >> > > > > >> > > > >
> >> > > > > >> > > > > get: function () {
> >> > > > > >> > > > >             return
> >> > _get(Object.getPrototypeOf(B.prototype),
> >> > > > > >> "property",
> >> > > > > >> > > > > this);
> >> > > > > >> > > > >         },
> >> > > > > >> > > > >
> >> > > > > >> > > > > Which calls:
> >> > > > > >> > > > >
> >> > > > > >> > > > > this for the getter, do recursive call to the
> >>prototype to
> >> > > check
> >> > > > > >> if the
> >> > > > > >> > > > > property has been overriden, if Yes, get the value.
> >> > > > > >> > > > >
> >> > > > > >> > > > > var _get = function get(_x, _x2, _x3) {
> >> > > > > >> > > > >     var _again = true;
> >> > > > > >> > > > >     _function: while (_again) {
> >> > > > > >> > > > >         var object = _x, property = _x2, receiver =
> >>_x3;
> >> > > > > >> > > > >         desc = parent = getter = undefined;
> >> > > > > >> > > > >         _again = false;
> >> > > > > >> > > > >         var desc =
> >>Object.getOwnPropertyDescriptor(object,
> >> > > > > >> property);
> >> > > > > >> > > > >         if (desc === undefined) {
> >> > > > > >> > > > >             var parent =
> >>Object.getPrototypeOf(object);
> >> > > > > >> > > > >             if (parent === null) {
> >> > > > > >> > > > >                 return undefined;
> >> > > > > >> > > > >             } else {
> >> > > > > >> > > > >                 _x = parent;
> >> > > > > >> > > > >                 _x2 = property;
> >> > > > > >> > > > >                 _x3 = receiver;
> >> > > > > >> > > > >                 _again = true;
> >> > > > > >> > > > >                 continue _function;
> >> > > > > >> > > > >             }
> >> > > > > >> > > > >         } else if ("value" in desc) {
> >> > > > > >> > > > >             return desc.value;
> >> > > > > >> > > > >         } else {
> >> > > > > >> > > > >             var getter = desc.get;
> >> > > > > >> > > > >             if (getter === undefined) {
> >> > > > > >> > > > >                 return undefined;
> >> > > > > >> > > > >             }
> >> > > > > >> > > > >             return getter.call(receiver);
> >> > > > > >> > > > >         }
> >> > > > > >> > > > >     }
> >> > > > > >> > > > > };
> >> > > > > >> > > > >
> >> > > > > >> > > > > Does it do the trick ?
> >> > > > > >> > > > >
> >> > > > > >> > > > > Frédéric THOMAS
> >> > > > > >> > > > >
> >> > > > > >> > > > > > Date: Thu, 28 May 2015 07:47:45 -0400
> >> > > > > >> > > > > > Subject: Re: [FalconJX] JXEmitter accessors
> >> > > > > >> > > > > > From: teotigraphix...@gmail.com
> >> > > > > >> > > > > > To: dev@flex.apache.org
> >> > > > > >> > > > > >
> >> > > > > >> > > > > > Interesting Fred, I am no javascript guru so I need
> >> > > people to
> >> > > > > >> "tell"
> >> > > > > >> > > me
> >> > > > > >> > > > > > what I should have output.
> >> > > > > >> > > > > >
> >> > > > > >> > > > > > So let me get this straight, the left pane is ES6
> >>and it
> >> > > > > >> converted
> >> > > > > >> > > it to
> >> > > > > >> > > > > > ES5 in the right pane?
> >> > > > > >> > > > > >
> >> > > > > >> > > > > > Mike
> >> > > > > >> > > > > >
> >> > > > > >> > > > > > On Thu, May 28, 2015 at 7:19 AM, Frédéric THOMAS <
> >> > > > > >> > > > > webdoubl...@hotmail.com>
> >> > > > > >> > > > > > wrote:
> >> > > > > >> > > > > >
> >> > > > > >> > > > > > > I just tried in babel, see what it generates:
> >> > > > > >> > > > > > >
> >> > > > > >> > > > > > >
> >> > > > > >> > > > > > >
> >> > > > > >> > > > >
> >> > > > > >> > >
> >> > > > > >>
> >> > > > > >>
> >> > > > >
> >> > >
> >> > 
> >>http://babeljs.io/repl/#?experimental=true&evaluate=true&loose=false&spec
> >> > > > >
> >> > >
> >> > 
> >>>>=false&code=class%20A%20{%0A%09constructor%28%29%20{%0A%09%20%20this._p
> >>>>ro
> >> > > > >
> >> > >
> >> > 
> >>>>perty%20%3D%20%22init%22%3B%0A%09}%0A%09get%20property%28%29%3Astring%2
> >>>>0{
> >> > > > >
> >> > >
> >> > 
> >>>>%0A%09%09return%20this._property%3B%0A%09}%0A%09%0A%09set%20property%28
> >>>>va
> >> > > > >
> >> > >
> >> > 
> >>>>lue%3Astring%29%20{%0A%09%09this._property%20%3D%20value%3B%0A%09}%20%0
> >>>>A%
> >> > > > >
> >> > >
> >> > 
> >>>>09%0A%09showMyValue%28%29%20{%0A%09%09alert%28this._property%29%3B%0A%0
> >>>>9}
> >> > > > >
> >> > >
> >> > 
> >>>>%0A%0A}%0A%0Aclass%20B%20extends%20A%20{%0A%09get%20property%28%29%3Ast
> >>>>ri
> >> > > > >
> >> > >
> >> > 
> >>>>ng%20{%0A%09%09return%20super.property%3B%0A%09}%0A%09%0A%09set%20prope
> >>>>rt
> >> > > > >
> >> > >
> >> > 
> >>>>y%28value%3Astring%29%20{%0A%09%09super.property%20%3D%20value%3B%0A%09
> >>>>}%
> >> > > > > >>0A}
> >> > > > > >> > > > > > >
> >> > > > > >> > > > > > > Frédéric THOMAS
> >> > > > > >> > > > > > >
> >> > > > > >> > > > > > > > Date: Thu, 28 May 2015 06:54:31 -0400
> >> > > > > >> > > > > > > > Subject: Re: [FalconJX] JXEmitter accessors
> >> > > > > >> > > > > > > > From: teotigraphix...@gmail.com
> >> > > > > >> > > > > > > > To: dev@flex.apache.org
> >> > > > > >> > > > > > > >
> >> > > > > >> > > > > > > > > I’m still surprised that in 2015, TS hasn’t
> >>been
> >> > > forced
> >> > > > > >>to
> >> > > > > >> > > handle
> >> > > > > >> > > > > > > super.
> >> > > > > >> > > > > > > > Are people not using inheritance much in TS?
> >> > > > > >> > > > > > > >
> >> > > > > >> > > > > > > > They tell them to use standard getValue(),
> >> > setValue()
> >> > > in
> >> > > > > >>the
> >> > > > > >> > > > > property if
> >> > > > > >> > > > > > > > they need inheritance overrides.
> >> > > > > >> > > > > > > >
> >> > > > > >> > > > > > > > I'm kind of bummed about this whole thing, I
> >>stuck
> >> > my
> >> > > > > >>foot in
> >> > > > > >> > > mouth
> >> > > > > >> > > > > here,
> >> > > > > >> > > > > > > > since I totally forgot about this stuff. Since
> >>I
> >> > > really
> >> > > > > >> wanted
> >> > > > > >> > > to do
> >> > > > > >> > > > > this
> >> > > > > >> > > > > > > > for Josh's POC, I am interested in what he
> >>"needs"
> >> > to
> >> > > get
> >> > > > > >>his
> >> > > > > >> > > project
> >> > > > > >> > > > > > > > working, Josh?
> >> > > > > >> > > > > > > >
> >> > > > > >> > > > > > > > Mike
> >> > > > > >> > > > > > > >
> >> > > > > >> > > > > > > >
> >> > > > > >> > > > > > > > On Wed, May 27, 2015 at 7:51 PM, Alex Harui <
> >> > > > > >> aha...@adobe.com>
> >> > > > > >> > > > > wrote:
> >> > > > > >> > > > > > > >
> >> > > > > >> > > > > > > > >
> >> > > > > >> > > > > > > > >
> >> > > > > >> > > > > > > > > On 5/27/15, 4:16 PM, "Michael Schmalle" <
> >> > > > > >> > > teotigraphix...@gmail.com
> >> > > > > >> > > > > >
> >> > > > > >> > > > > > > wrote:
> >> > > > > >> > > > > > > > >
> >> > > > > >> > > > > > > > > >Ok, This needs to be clear to me before I
> >>go off
> >> > > to OZ.
> >> > > > > >> > > > > > > > > >
> >> > > > > >> > > > > > > > > >In Flex JS you have;
> >> > > > > >> > > > > > > > > >
> >> > > > > >> > > > > > > > > >Object.defineProperties(Base.prototype, /**
> >> > @lends
> >> > > > > >> > > > > {Base.prototype}
> >> > > > > >> > > > > > > */ {
> >> > > > > >> > > > > > > > > >/** @expose */
> >> > > > > >> > > > > > > > > >text: {
> >> > > > > >> > > > > > > > > >get: /** @this {Base} */ function() {
> >> > > > > >> > > > > > > > > >  return "A" +
> >> > > > > >> > > org_apache_flex_utils_Language.superGetter(Base,
> >> > > > > >> > > > > this,
> >> > > > > >> > > > > > > > > >'text');
> >> > > > > >> > > > > > > > > >},
> >> > > > > >> > > > > > > > > >set: /** @this {Base} */ function(value) {
> >> > > > > >> > > > > > > > > >  if (value !=
> >> > > > > >> > > org_apache_flex_utils_Language.superGetter(Base,
> >> > > > > >> > > > > this,
> >> > > > > >> > > > > > > > > >'text')) {
> >> > > > > >> > > > > > > > > >
> >> > > org_apache_flex_utils_Language.superSetter(Base,
> >> > > > > >>this,
> >> > > > > >> > > 'text',
> >> > > > > >> > > > > > > "B" +
> >> > > > > >> > > > > > > > > >value);
> >> > > > > >> > > > > > > > > >  }
> >> > > > > >> > > > > > > > > >}}}
> >> > > > > >> > > > > > > > > >);
> >> > > > > >> > > > > > > > > >
> >> > > > > >> > > > > > > > > >I must use this obviously since hardly any
> >> > > actionscript
> >> > > > > >> could
> >> > > > > >> > > be
> >> > > > > >> > > > > cross
> >> > > > > >> > > > > > > > > >compiled if you can't call super accessors.
> >> > > > > >> > > > > > > > >
> >> > > > > >> > > > > > > > > I’m still surprised that in 2015, TS hasn’t
> >>been
> >> > > forced
> >> > > > > >>to
> >> > > > > >> > > handle
> >> > > > > >> > > > > > > super.
> >> > > > > >> > > > > > > > > Are people not using inheritance much in TS?
> >> > > > > >> > > > > > > > >
> >> > > > > >> > > > > > > > > >
> >> > > > > >> > > > > > > > > >Alex, when you have time, can you explain
> >>what
> >> > > this is
> >> > > > > >> doing
> >> > > > > >> > > so I
> >> > > > > >> > > > > can
> >> > > > > >> > > > > > > > > >implement it.
> >> > > > > >> > > > > > > > >
> >> > > > > >> > > > > > > > > I have not read the spec, but
> >> > > Object.defineProperties
> >> > > > > >> appears
> >> > > > > >> > > to
> >> > > > > >> > > > > > > associate
> >> > > > > >> > > > > > > > > a data structure with a “class”.  When asked
> >>to
> >> > > > > >> > > interpret/execute
> >> > > > > >> > > > > > > > >
> >> > > > > >> > > > > > > > >         Someinstance.someprop
> >> > > > > >> > > > > > > > >
> >> > > > > >> > > > > > > > > the JS runtime appears to check this data
> >> > structure
> >> > > > > >>first,
> >> > > > > >> and
> >> > > > > >> > > > > call the
> >> > > > > >> > > > > > > > > get or set as needed.  As I see it, there is
> >>no
> >> > way
> >> > > to
> >> > > > > >> switch
> >> > > > > >> > > from
> >> > > > > >> > > > > > > > >
> >> > > > > >> > > > > > > > >         SomeSubClass.someProp
> >> > > > > >> > > > > > > > >
> >> > > > > >> > > > > > > > > back to
> >> > > > > >> > > > > > > > >
> >> > > > > >> > > > > > > > >         SomeBaseClass.someProp
> >> > > > > >> > > > > > > > >
> >> > > > > >> > > > > > > > > and retain the ‘this’ pointer and scope.  If
> >>you
> >> > > had a
> >> > > > > >> variable
> >> > > > > >> > > > > called
> >> > > > > >> > > > > > > > > super it would still point to the same
> >>instance so
> >> > > > > >> > > super.someProp
> >> > > > > >> > > > > would
> >> > > > > >> > > > > > > > > just cause the runtime to find the subclass’s
> >> > > property
> >> > > > > >>map.
> >> > > > > >> > > > > > > > >
> >> > > > > >> > > > > > > > > In looking around the internet, the solutions
> >> > > seemed to:
> >> > > > > >> > > > > > > > > 1) get the superclass
> >> > > > > >> > > > > > > > > 2) get the property map of defined properties
> >> > > > > >> > > > > > > > > 3) get the getter or setter from the data
> >> > structure
> >> > > > > >> > > > > > > > > 4) call it with the right ‘this’ pointer.
> >> > > > > >> > > > > > > > >
> >> > > > > >> > > > > > > > > So that’s what is in the current
> >>JSFlexJSEmitter,
> >> > > but it
> >> > > > > >> > > assumes
> >> > > > > >> > > > > > > > > goog.inherit is going to leave references to
> >>the
> >> > > base
> >> > > > > >> class in
> >> > > > > >> > > a
> >> > > > > >> > > > > > > > > particular way.  TS probably leaves
> >>references to
> >> > > base
> >> > > > > >> classes
> >> > > > > >> > > some
> >> > > > > >> > > > > > > how so
> >> > > > > >> > > > > > > > > some abstraction around step 1 is probably
> >> > > required, but
> >> > > > > >> steps
> >> > > > > >> > > 2
> >> > > > > >> > > > > > > through 4
> >> > > > > >> > > > > > > > > can be the same.
> >> > > > > >> > > > > > > > >
> >> > > > > >> > > > > > > > > It is step 4 that re-introduces “re-writing”
> >>that
> >> > > you
> >> > > > > >>may
> >> > > > > >> be
> >> > > > > >> > > > > referring
> >> > > > > >> > > > > > > to
> >> > > > > >> > > > > > > > > as hell.  The super setter again becomes a
> >> > function
> >> > > > > >>call,
> >> > > > > >> so
> >> > > > > >> > > the
> >> > > > > >> > > > > AST
> >> > > > > >> > > > > > > walk
> >> > > > > >> > > > > > > > > needs to know that and walk the tree
> >>differently,
> >> > > > > >>saving a
> >> > > > > >> > > whole
> >> > > > > >> > > > > > > branch to
> >> > > > > >> > > > > > > > > be evaluated as the parameter to the function
> >> > call.
> >> > > > > >>IOW, a
> >> > > > > >> > > binary
> >> > > > > >> > > > > > > > > operator becomes a function call.  I’ll bet
> >>there
> >> > > are
> >> > > > > >>still
> >> > > > > >> > > bugs
> >> > > > > >> > > > > in the
> >> > > > > >> > > > > > > > > current JSFlexJSEmitter.
> >> > > > > >> > > > > > > > >
> >> > > > > >> > > > > > > > > And I think I still haven’t fixed the
> >>scenario
> >> > where
> >> > > > > >>only a
> >> > > > > >> > > getter
> >> > > > > >> > > > > or
> >> > > > > >> > > > > > > > > setter is overridden.  The generated code
> >>must
> >> > > > > >>propagate a
> >> > > > > >> > > “pass
> >> > > > > >> > > > > > > through”
> >> > > > > >> > > > > > > > > for the missing getter or setter to the
> >>subclass’s
> >> > > data
> >> > > > > >> > > structure
> >> > > > > >> > > > > > > > > otherwise the runtime will not find the
> >>setter or
> >> > > getter
> >> > > > > >> and
> >> > > > > >> > > think
> >> > > > > >> > > > > the
> >> > > > > >> > > > > > > > > property is now read-only or write-only.
> >> > > > > >> > > > > > > > >
> >> > > > > >> > > > > > > > > >
> >> > > > > >> > > > > > > > > >So correct me if I am wrong but, since
> >>there is
> >> > > really
> >> > > > > >>no
> >> > > > > >> > > solution
> >> > > > > >> > > > > > > without
> >> > > > > >> > > > > > > > > >an external utility to call a super
> >>accessor, we
> >> > > can't
> >> > > > > >> really
> >> > > > > >> > > say
> >> > > > > >> > > > > that
> >> > > > > >> > > > > > > > > >this
> >> > > > > >> > > > > > > > > >transpiler is producing vanilla javascript.
> >> > > Chicken egg
> >> > > > > >> thing.
> >> > > > > >> > > > > > > > >
> >> > > > > >> > > > > > > > > Technically, you could inline everything in
> >>the
> >> > > utility
> >> > > > > >> > > function
> >> > > > > >> > > > > and
> >> > > > > >> > > > > > > still
> >> > > > > >> > > > > > > > > called it vanilla.  But it would be high-fat
> >> > > vanilla.
> >> > > > > >>;-)
> >> > > > > >> > > > > > > > >
> >> > > > > >> > > > > > > > > A question for Josh is whether it would be
> >>ok to
> >> > > have a
> >> > > > > >> Google
> >> > > > > >> > > > > Closure
> >> > > > > >> > > > > > > > > Library dependency.  These libraries exist to
> >> > > > > >>encapsulate
> >> > > > > >> some
> >> > > > > >> > > of
> >> > > > > >> > > > > these
> >> > > > > >> > > > > > > > > object oriented patterns like finding the
> >>base
> >> > > class and
> >> > > > > >> > > loading
> >> > > > > >> > > > > > > > > dependency definitions in a particular
> >>order.  It
> >> > > seems
> >> > > > > >>to
> >> > > > > >> be
> >> > > > > >> > > > > somewhat
> >> > > > > >> > > > > > > > > pay-as-you-go.  If no inheritance, then
> >>almost no
> >> > > > > >>“goog”.
> >> > > > > >> > > > > > > > >
> >> > > > > >> > > > > > > > > -Alex
> >> > > > > >> > > > > > > > >
> >> > > > > >> > > > > > > > >
> >> > > > > >> > > > > > >
> >> > > > > >> > > > > > >
> >> > > > > >> > > > >
> >> > > > > >> > > > >
> >> > > > > >> > >
> >> > > > > >> > >
> >> > > > > >>
> >> > > > > >>
> >> > > > >
> >> > > > >
> >> > >
> >> > >
> >> >
> >                                       
> 
                                                                                
  

Reply via email to