I’m planning on using the new compiler options to compile my app with and 
without initialization. I want to compare the app size of those two options 
after gzipping to see if there’s an impact on code size.

I’d also like to write up a doc with the pros and cons of both approaches and 
see if I can come up with a list of use cases where initialized vs 
uninitialized values behave differently. It might be interesting to see how 
many can be resolved without initialization.

If nothing else, it can serve as a guide for developers deciding which compiler 
option to use.

Thanks,
Harbs

> On Aug 2, 2017, at 7:34 AM, 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