Hi Greg,

There probably is too much use of @export. @const is probably more correct than 
@export — as long as we are sure that there’s no use of bracket notation 
anywhere. I’d be interested in hearing your findings.

Personally, I’m not sure there’s a lot of value to be using @export at all 
unless an app is using modules of some sort (which I’m not even sure how to do 
with FlexJS). (but I might be missing something with the @export tag)

What happens if the compiler is run without --generate_exports? Do the @exports 
get stripped out? If yes, is there some kind of “super export”? There needs to 
be some way to invoke the app…

Harbs

> On Jul 11, 2017, at 11:40 PM, Greg Dove <greg.d...@gmail.com> wrote:
> 
> Guys, we certainly have been here before.
> 
> From a js release 'size' perspective, I don't think it matters whether we
> use constants or liteterals, I think the main difference is that if the
> static const exists it will also be included in the release output as I
> expect it has an @export annotation. This means it should be 'reflectable'
> via array/bracket access syntax via its original package/class naming. But
> in terms of usage sites within the codebase, it should already be optimised
> via GCC, becuase GCC is already capable of inlining anything annotated as a
> constant [1].
> So I would expect it to already be inlined in the js-release, and we
> *should not need* to write any code in the jx compiler to do that, unless
> we specifically need this inlining (for some reason) in the debug version
> of the js output.
> 
> GCC also creates a single short named variable to refer to repeated
> literals througout the compiled codebase, so I would expect the inlining of
> consts would get this as a 2nd optimization pass as well. In the end I
> expect the only output difference between the two approaches should be that
> we also get an extra exported constant that retains the same naming
> convention of lookups etc because we are @export-ing it.
> 
> I'm pretty sure this is correct, but I might be wrong. I will check all
> this later today, and report back.
> 
> 1.
> https://github.com/google/closure-compiler/wiki/Annotating-JavaScript-for-the-Closure-Compiler#const-const-type
> 
> 
> 
> On Wed, Jul 12, 2017 at 3:47 AM, Harbs <harbs.li...@gmail.com> wrote:
> 
>> +1.
>> 
>> I also think that we have bigger fish to fry first.
>> 
>> My point was not to force one way or the other. Rather that the way it
>> currently stands there’s a valid reason to use string literals. I was not
>> suggesting changing anything.
>> 
>> Thanks,
>> Harbs
>> 
>>> On Jul 11, 2017, at 6:33 PM, Josh Tynjala <joshtynj...@gmail.com> wrote:
>>> 
>>> That sounds like the proper way to handle this! We should be able to
>>> reference constants in our ActionScript so that we can get compile-time
>>> errors from typos, while the compiler makes sure that generated
>> JavaScript
>>> can be properly minified.
>>> 
>>> - Josh
>>> 
>>> On Tue, Jul 11, 2017 at 8:20 AM, Alex Harui <aha...@adobe.com.invalid>
>>> wrote:
>>> 
>>>> AIUI, there is a cost in the minified JS to using constants.
>>>> 
>>>> However, there is a cost to screwing up the typing of a string literal
>> as
>>>> well.
>>>> 
>>>> The best answer for now, IMO, is to not care whether folks use constants
>>>> or string literals.  There are much bigger fish to fry.  I don't want to
>>>> see sweeping changes of replacing all string literals with constants or
>>>> vice versa.  If you've got that kind of time on your hands, learn the
>>>> compiler code and see if you can make the cross-compiler replace all
>>>> constants with string literals.  IMO, that's the right answer.
>>>> 
>>>> -Alex
>>>> 
>>>> On 7/11/17, 5:37 AM, "Harbs" <harbs.li...@gmail.com> wrote:
>>>> 
>>>>> Here’s what is output in the minimized code:
>>>>> 
>>>>> function
>>>>> fqa(){}w('org.apache.flex.net.HTTPConstants.GET','GET');
>>>> w('org.apache.flex
>>>>> .net.HTTPConstants.POST','POST');w('org.apache.flex.net.
>>>> HTTPConstants.PUT'
>>>>> ,'PUT');w('org.apache.flex.net.HTTPConstants.FORM_URL_
>>>> ENCODED',Fm);w('org.
>>>>> apache.flex.net.HTTPConstants.DELETE','DELETE'
>>>> );w('org.apache.flex.net.HTT
>>>>> PConstants.OPEN','open');w('org.apache.flex.net.
>>>> HTTPConstants.COMPLETE',Bt
>>>>> );w('org.apache.flex.net.HTTPConstants.COMMUNICATION_
>>>> ERROR',At);w('org.apa
>>>>> che.flex.net.HTTPConstants.IO_ERROR','ioError');
>>>>> w('org.apache.flex.net.HTTPConstants.SECURITY_ERROR',
>>>> 'securityError');w('o
>>>>> rg.apache.flex.net.HTTPConstants.STATUS',Fx);w('
>>>> org.apache.flex.net.HTTPCo
>>>>> nstants.RESPONSE_STATUS','httpResponseStatus');fqa.
>>>> prototype.h={names:[{na
>>>>> me:'HTTPConstants',i:IF,kind:g}]};w(IF,fqa);
>>>>> 
>>>>> elsewhere:
>>>>> IF='org.apache.flex.net.HTTPConstants’,
>>>>> 
>>>>> That’s 807 bytes. That’s quite a penalty for avoiding typing “POST”…
>>>>> 
>>>>> No idea what wiki you are referring to.
>>>>> 
>>>>> Harbs
>>>>> 
>>>>>> On Jul 11, 2017, at 2:36 PM, Justin Mclean <jus...@classsoftware.com>
>>>>>> wrote:
>>>>>> 
>>>>>> Hi,
>>>>>> 
>>>>>>> As it stands now, use of constants result in more JS code after
>>>>>>> compiled.
>>>>>> 
>>>>>> Debug yes but not optimised / release.
>>>>>> 
>>>>>>> It’s possible that this can be optimized, but currently the most
>>>>>>> efficient JS code is produced if using string literals rather than
>>>>>>> constants. (The Google compiler created variables for string literals
>>>>>>> used more than once.)
>>>>>> 
>>>>>> That's not we found in a previous thread on this list, the google
>>>>>> compiler optimises the constants and there is no penalty in using
>> them.
>>>>>> You mind provide examples that show the above is the actually case and
>>>>>> document it on the wiki?
>>>>>> 
>>>>>> My vote would be not the duplicate the strings everywhere and use
>>>>>> constants as there is no cost and increased safety.
>>>>>> 
>>>>>> Thanks,
>>>>>> Justin
>>>>> 
>>>> 
>>>> 
>> 
>> 

Reply via email to