I like the idea of having the FlexJS framework specify non-initialization
with its config files, and then most users will get initialization by
default (obviously, with the option to have non-initialization too, if
desired).

- Josh

On Wed, Aug 2, 2017 at 2:16 PM, Alex Harui <aha...@adobe.com.invalid> wrote:

> We have flex-config.xml, air-config.xml, js-config.xml, etc.  These config
> files are (or can be) different sets of defaults.
>
> Meanwhile, we currently build the FlexJS framework via
> compile-swf-config.xml and compile-js-config.xml and its equivalent in
> pom.xml.  I have no problem using different defaults for the FlexJS
> framework and different defaults for compiling apps.  We already supply
> certain kinds of optimizations via @flexjsignorcoercion.  IOW, there is
> precedence for controlling the kinds of JS output we generate.
>
> We provide an Express component set with different defaults than Basic and
> produces fatter slower apps but should make it easier to get your app up
> and running.  We can certainly have the compiler start out by producing
> fatter slower code as well as long as it doesn't give a negative first
> impression of app size.  We just have to make it possible to shave off
> code to improve download size and performance if/when someone needs it.
>
> Regarding the list of nullable types, I agree there should be some
> wildcard for all instances.
>
> My 2 cents,
> -Alex
>
> On 8/2/17, 7:06 AM, "Josh Tynjala" <joshtynj...@gmail.com> wrote:
>
> >> To me, this is all related to PAYG.
> >
> >To me, making the compiler generate PAYG code by default sounds like the
> >FlexJS framework leaking into the rest of the ecosystem. Maybe this is a
> >place where mxmlc and asjsc should go in different directions. It makes
> >perfect sense to me for the compiler to do PAYG by default for the FlexJS
> >framework, but the rest of the world should get the a better user
> >experience with more compatibility by default (with the option to opt into
> >non-initialized PAYG mode). Thoughts?
> >
> >> list the Classes that should be initialized.  Maybe your code
> >doesn't care if Numbers are initialized but does care that Booleans are.
> >Then you can opt in on Boolean initialization and not pay the price for
> >Number initialization.
> >
> >It's an interesting idea. For nullable types, that list could get huge,
> >though. Boolean, int, uint, and Number are all special, but basically
> >everything else is nullable. I think there should still be a way to say "I
> >want everything initialized".
> >
> >> BTW, IIRC, VarDeclarationEmitter only handles local variables and not
> >instance variables.
> >
> >For some reason, I thought I remembered locals and members using the same
> >emitter. I'll update it elsewhere for members too.
> >
> >- Josh
> >
> >On Tue, Aug 1, 2017 at 9:34 PM, Alex Harui <aha...@adobe.com.invalid>
> >wrote:
> >
> >> To me, this is all related to PAYG.  And also, coding "style" matters.
> >>If
> >> we want to allow every possible existing AS statement work as-is, then
> >>we
> >> must initialize every variable that has a different default in JS.
> >>
> >> I thought the results of the set of tests I ran was that some of those
> >> patterns that expose the differences between JS and AS default values
> >>are
> >> less efficient and/or less common that other patterns.  IOW, as
> >>mentioned
> >> up thread "if (someBoolean === false)" is less code and just as fast if
> >> you rewrite it as "if (!someBoolean)".  And so, my recommendation for
> >>the
> >> framework code is that we take the time to try to use these more common
> >> patterns and thus not need to initialize every variable.
> >>
> >> Another outcome of the tests was the question as to whether our compiler
> >> ought to some day learn to rewrite these inefficient patterns to further
> >> reduce cases where initialization is required.  And to also ponder
> >>whether
> >> Google Closure Compiler may some day get around to rewriting these
> >> patterns.
> >>
> >> Either way, if we know the framework works just fine with uninitialized
> >> variables and may even be smaller and faster than if we used other
> >> patterns that care about initialization values, we can allow all kinds
> >>of
> >> output options for user code.   I just looked at the commit a few
> >>minutes
> >> ago.  It is ok for now, but I'd suggest making the option not tri-state,
> >> but rather, list the Classes that should be initialized.  Maybe your
> >>code
> >> doesn't care if Numbers are initialized but does care that Booleans are.
> >> Then you can opt in on Boolean initialization and not pay the price for
> >> Number initialization.  So the option might look like:
> >>
> >> -initialize-types=Boolean,Number,*
> >>
> >> Or something like that.  Essentially, let folks control how verbose the
> >> output is so they can decide whether to change their code or change the
> >> output as needed instead of just-in-case.  In this same area of code, we
> >> should probably add a warning about variables being uninitialized and
> >> having different default values.
> >>
> >> BTW, IIRC, VarDeclarationEmitter only handles local variables and not
> >> instance variables.
> >>
> >> My 2 cents,
> >> -Alex
> >>
> >> On 8/1/17, 8:48 PM, "Harbs" <harbs.li...@gmail.com> wrote:
> >>
> >> >What I mean is that if we can somehow have the values uninitialized in
> >> >JS, but in all cases where uninitialized values somehow diverge with
> >> >ActionScript behavior be solved (so the use cases would behave
> >> >correctly), then we’d have the advantages of undefined together with
> >> >expected AS behavior.
> >> >
> >> >I don’t know that this is possible, but that would be ideal in my book.
> >> >
> >> >If that’s not possible, then yes, I agree that two compiler options is
> >> >the best we can do.
> >> >
> >> >Hope that’s clearer,
> >> >Harbs
> >> >
> >> >> On Aug 2, 2017, at 1:49 AM, Greg Dove <greg.d...@gmail.com> wrote:
> >> >>
> >> >> I’d prefer if we could somehow get the best of both worlds.
> >> >>
> >> >> Sorry Harbs, but I don't get it. I think the agreement is already to
> >> >>'have
> >> >> the best of both worlds'.
> >> >> The issue is what the default should be. I know that you don't think
> >>you
> >> >> could have both behaviours as the default :).
> >> >>
> >> >> If we take away personal preferences, and think in terms of where
> >> >> developers will be coming from for FlexJS, and if we assume that this
> >> >> includes a large proportion of people who are already familiar with
> >> >> actionscript and therefore have expectations based on that
> >>familiarity,
> >> >> then I don't see how having default behaviour that is different to
> >>those
> >> >> expectations will be helpful to the uptake in use of flexjs.
> >> >>
> >> >> If it is not the case then we need to have documentation that
> >>supports
> >> >>the
> >> >> divergence from official actionscript language documentation
> >>elsewhere,
> >> >>and
> >> >> the hope that new users will read it as the authoritative source.
> >> >>
> >> >>
> >> >> On Wed, Aug 2, 2017 at 10:31 AM, Harbs <harbs.li...@gmail.com>
> wrote:
> >> >>
> >> >>> I’d prefer if we could somehow get the best of both worlds.
> >> >>>
> >> >>> I don’t see a solution to that dilemma at the moment, but maybe
> >>we’ll
> >> >>>come
> >> >>> up with something...
> >> >>>
> >> >>> Harbs
> >> >>>
> >> >>>> On Aug 2, 2017, at 1:24 AM, Josh Tynjala <joshtynj...@gmail.com>
> >> >>>>wrote:
> >> >>>>
> >> >>>> Don't get me wrong. If you see value in it, then we definitely
> >> >>>>shouldn't
> >> >>>> remove it as an option. However, for compatibility with the
> >>existing
> >> >>>> language, I'd prefer to see initialization be the default instead.
> >> >>>>
> >> >>>> - Josh
> >> >>>>
> >> >>>> On Tue, Aug 1, 2017 at 3:14 PM, Harbs <harbs.li...@gmail.com>
> >>wrote:
> >> >>>>
> >> >>>>> Any maybe vice versa... ;-p
> >> >>>>>
> >> >>>>> Alex was planning on looking into whether he can solve the boolean
> >> >>>>> problem, so let’s hold off until he does that.
> >> >>>>>
> >> >>>>> I think comparing two booleans is pretty rare although I have
> >>already
> >> >>> run
> >> >>>>> into if(myBool == false) not working. Changing it to if(!myBool)
> >>was
> >> >>> simple
> >> >>>>> enough, but I do agree with you that it’s currently broken.
> >> >>>>>
> >> >>>>> For now, we’re going to have to agree to disagree on initializing
> >> >>> values.
> >> >>>>> I’ve seen a lot of value in leaving them undefined. It makes it
> >> >>>>>really
> >> >>>>> clear while debugging whether the value has been set or not.
> >> >>>>>
> >> >>>>> Harbs
> >> >>>>>
> >> >>>>>> On Aug 2, 2017, at 12:54 AM, Josh Tynjala <joshtynj...@gmail.com
> >
> >> >>> wrote:
> >> >>>>>>
> >> >>>>>> Maybe I'll convince others eventually.
> >> >>>>>
> >> >>>>>
> >> >>>
> >> >>>
> >> >
> >>
> >>
>
>

Reply via email to