If it were up to me, we'd strip traces based on the optimize compiler
option.  I think that's how it worked in the Flex SDK.

I thought GCC had enough dead-code-removal logic to remove Language.trace
once it saw that trace effectively did nothing.

I can't seem to piece together from this thread what the original AS was
and what the un-minified JS output was.  Maybe there's something about the
JS output that isn't right.  It is strange to see the string name of the
trace function.

Regarding a logging system, I think folks are just used to trace and the
cool thing about JS right now is that you can replace functions at
runtime, so a logging bead would just replace Language.trace().

-Alex

On 7/12/17, 6:44 AM, "Harbs" <harbs.li...@gmail.com> wrote:

>Interesting scenarios. I would not have thought of that.
>
>If we could figure out how to strip the function call and leave the
>parameter, the compiler would strip out the contents if it could be
>safely removed.
>
>So trace(“something”) would become “something” which is en empty
>statement and would be stripped out.
>
>Of course, I have no idea how to go about doing that… ;-)
>
>Harbs
>
>> On Jul 12, 2017, at 4:32 PM, Josh Tynjala <joshtynj...@gmail.com> wrote:
>> 
>> Probably the same with function calls too:
>> 
>> trace(someFunction());
>> 
>> They wanted this to remain:
>> 
>> someFunction();
>> 
>> - Josh
>> 
>> On Wed, Jul 12, 2017 at 6:22 AM, Josh Tynjala <joshtynj...@gmail.com>
>>wrote:
>> 
>>> One thing to keep in mind with stripping out trace() calls is that some
>>> developers expect any modifications to variables that happen inside the
>>> arguments to remain. I remember a while back someone at Adobe
>>>mentioning
>>> that people complained when something like this was completely
>>>stripped out:
>>> 
>>> trace(doSomething++);
>>> 
>>> Because they expected this part to remain:
>>> 
>>> doSomething++;
>>> 
>>> - Josh
>>> 
>>> On Wed, Jul 12, 2017 at 12:24 AM, Harbs <harbs.li...@gmail.com> wrote:
>>> 
>>>> My bad. It does in fact compile down to this:
>>>> 
>>>> function uM(a){a=Array.prototype.slice.call(arguments,0)}w('org.apach
>>>> e.flex.utils.Language.trace',uM);
>>>> 
>>>> So trace does not actually do anything. Great! :-)
>>>> 
>>>> However, it’s still being called by the client code. (It just does
>>>> nothing.) Not super important, but it would be nice if at some point
>>>>we can
>>>> figure out if there’s a way to strip out the calls completely.
>>>> 
>>>>> On Jul 12, 2017, at 10:07 AM, Harbs <harbs.li...@gmail.com> wrote:
>>>>> 
>>>>> Oof. I think I’m still waking up. ;-)
>>>>> 
>>>>> I did not realize what I was looking at with the goog.DEBUG. My
>>>> recollection is that trace statements are still being used in the
>>>>release,
>>>> but I’ll double check that.
>>>>> 
>>>>>> On Jul 12, 2017, at 9:56 AM, Alex Harui <aha...@adobe.com.INVALID>
>>>> wrote:
>>>>>> 
>>>>>> Well, the goal of using goog.DEBUG in Language.as trace() was to
>>>> convince
>>>>>> GCC to eliminate trace().  I haven't checked whether it is working
>>>>>>or
>>>> not.
>>>>>> Requiring everyone to use goog.DEBUG around trace statements sounds
>>>> like
>>>>>> a pain.  Probably better to teach the publisher to remove it if GCC
>>>> can't
>>>>>> be taught to do it.  We visit almost every line of the JS output in
>>>>>>the
>>>>>> publishers right now.
>>>>>> 
>>>>>> My 2 cents,
>>>>>> -Alex
>>>>>> 
>>>>>> On 7/11/17, 11:47 PM, "Harbs" <harbs.li...@gmail.com> wrote:
>>>>>> 
>>>>>>> 
>>>>>>>> On Jul 12, 2017, at 8:20 AM, Alex Harui <aha...@adobe.com.INVALID>
>>>>>>>> wrote:
>>>>>>>> 
>>>>>>>> Again, though, I think this optimization isn't urgent.
>>>>>>> 
>>>>>>> I completely agree. That’s why I have not been bringing this up
>>>> despite
>>>>>>> it being on my mind. When the discussion came up, I couldn’t help
>>>>>>>but
>>>>>>> join. ;-)
>>>>>>> 
>>>>>>> 
>>>>>>>> goog.DEBUG is already being used in Language.as.
>>>>>>> 
>>>>>>> Thanks! I hadn’t noticed. I was missing an import of of goog.DEBUG
>>>>>>>in
>>>>>>> COMPILE::JS I’m guessing the imports of goog.bind and goog.global
>>>>>>>was
>>>>>>> enough to make goog.DEBUG visible to the compiler in Language.as.
>>>>>>> 
>>>>>>> Once we’re on this topic, there’s something that I had wanted to
>>>> bring up
>>>>>>> for a long time: I think trace statements should disappear in the
>>>> release
>>>>>>> JS build. Should we put all the JS trace code inside an
>>>>>>>if(goog.DEBUG)
>>>>>>> block?
>>>>>>> 
>>>>>>> Thanks,
>>>>>>> Harbs
>>>>>> 
>>>>> 
>>>> 
>>>> 
>>> 
>

Reply via email to