Yes, Royale is always using Falcon. -- Josh Tynjala Bowler Hat LLC <https://bowlerhat.dev>
On Tue, Nov 24, 2020 at 10:20 AM Andrew Wetmore <cottag...@gmail.com> wrote: > Do the Falcon compiler options apply if one is not using Falcon? Or are we > ALWAYS using Falcon now? > > a > > On Tue, Nov 24, 2020 at 10:36 AM Carlos Rovira <carlosrov...@apache.org> > wrote: > > > Hi, > > > > here's a list of Falcon compiler options that could be added to [1]. > > I think an initial copy-paste could be enough for a "first pass", > although > > I guess the older options should come from other sources like the one > from > > Andrew's links or this other one [2]: > > > > [1] > > > > > https://cwiki.apache.org/confluence/display/FLEX/Getting+Started+with+the+Falcon+and+FalconJX+Compilers > > [2] http://renaun.com/blog/2006/08/list-of-mxmlccompc-arguments/ > > > > > > > > El lun, 23 nov 2020 a las 23:23, Andrew Wetmore (<cottag...@gmail.com>) > > escribió: > > > > > There are quite a few options. Maybe the most likely ones should be on > > the > > > page you were editing, and we can add the other to a sub page. > > > > > > a > > > > > > On Mon, Nov 23, 2020 at 6:19 PM Andrew Wetmore <cottag...@gmail.com> > > > wrote: > > > > > > > @Josh Tynjala <joshtynj...@bowlerhat.dev> did you check this page > [1]? > > > If > > > > not, I can scrape from it. > > > > > > > > a > > > > > > > > 1. http://www.docsultant.com/site2/articles/flex_cmd.html > > > > > > > > On Mon, Nov 23, 2020 at 6:14 PM Andrew Wetmore <cottag...@gmail.com> > > > > wrote: > > > > > > > >> I guess I better jump on that before it all melts away. I probably > > have > > > >> some in some crackly downloads from a decade ago, unless I used them > > to > > > >> feed a fire. > > > >> > > > >> Great work, Josh! > > > >> > > > >> a > > > >> > > > >> On Mon, Nov 23, 2020 at 6:07 PM Josh Tynjala < > > joshtynj...@bowlerhat.dev > > > > > > > >> wrote: > > > >> > > > >>> I've added all of the new export-* and prevent-rename-* options, > > > >>> including > > > >>> descriptions. I also added several more options that I saw were > > > missing. > > > >>> > > > >>> Eventually, someone needs to fill in this page with *all* of the > > > missing > > > >>> options. Especially the core options that already existed during > the > > > Flex > > > >>> days. Adobe has pulled down most of its Flex documentation now, and > > I'm > > > >>> not > > > >>> sure that the Apache version of Flex ever had them fully documented > > > >>> either. > > > >>> Soon, there may be no documentation for these options anywhere on > the > > > >>> web, > > > >>> even for someone persistent and knowledgeable enough to look for > > legacy > > > >>> content. > > > >>> > > > >>> Most of the missing options may be found in this compiler class > > > >>> (descriptions of each option are usually in jsdoc comments): > > > >>> > > > >>> > > > > > > https://github.com/apache/royale-compiler/blob/develop/compiler-common/src/main/java/org/apache/royale/compiler/config/Configuration.java > > > >>> > > > >>> There are likely some more JS-specific options that are not > > documented > > > >>> yet > > > >>> in these compiler classes too: > > > >>> > > > >>> > > > > > > https://github.com/apache/royale-compiler/blob/develop/compiler-jx/src/main/java/org/apache/royale/compiler/clients/JSConfiguration.java > > > >>> > > > >>> > > > > > > https://github.com/apache/royale-compiler/blob/develop/compiler-jx/src/main/java/org/apache/royale/compiler/internal/driver/js/goog/JSGoogConfiguration.java > > > >>> > > > >>> -- > > > >>> Josh Tynjala > > > >>> Bowler Hat LLC <https://bowlerhat.dev> > > > >>> > > > >>> > > > >>> On Fri, Nov 20, 2020 at 1:08 PM Josh Tynjala < > > > joshtynj...@bowlerhat.dev> > > > >>> wrote: > > > >>> > > > >>> > I'll try to fill in the details soon. > > > >>> > > > > >>> > -- > > > >>> > Josh Tynjala > > > >>> > Bowler Hat LLC <https://bowlerhat.dev> > > > >>> > > > > >>> > > > > >>> > On Fri, Nov 20, 2020 at 11:42 AM Andrew Wetmore < > > cottag...@gmail.com > > > > > > > >>> > wrote: > > > >>> > > > > >>> >> I have added a section that includes the four compiler options > > that > > > >>> Carlos > > > >>> >> mentioned. If there are more that, when used, reduce output > size, > > > they > > > >>> >> should go there. I have not populated the descriptions, as a > smart > > > >>> person > > > >>> >> should do that. > > > >>> >> > > > >>> >> a > > > >>> >> > > > >>> >> On Fri, Nov 20, 2020 at 3:23 PM Andrew Wetmore < > > cottag...@gmail.com > > > > > > > >>> >> wrote: > > > >>> >> > > > >>> >> > Yes, that page is a good location. Should we start a > subsection > > > for > > > >>> >> these > > > >>> >> > options which have the benefit of reducing output size? > > > >>> >> > > > > >>> >> > a > > > >>> >> > > > > >>> >> > On Fri, Nov 20, 2020 at 1:48 PM Carlos Rovira < > > > >>> carlosrov...@apache.org> > > > >>> >> > wrote: > > > >>> >> > > > > >>> >> >> Hi Josh, > > > >>> >> >> > > > >>> >> >> thanks for working on this. I finally could get here after > > weeks > > > of > > > >>> >> hard > > > >>> >> >> work in other things with almost not time. > > > >>> >> >> I tried in Tour de Jewel with: > > > >>> >> >> > > > >>> >> >> -export-public-symbols=false > > > >>> >> >> -prevent-rename-protected-symbols=false > > > >>> >> >> -prevent-rename-internal-symbols=false > > > >>> >> >> -prevent-rename-public-static-methods=false > > > >>> >> >> -prevent-rename-public-instance-methods=false > > > >>> >> >> > > > >>> >> >> (for what I read that's the set it can be used without > breaking > > > >>> app) > > > >>> >> >> > > > >>> >> >> and a downsize from 1045kb to 910kb so amazing! :) > > > >>> >> >> > > > >>> >> >> I'll try to add to TodoMVC as well and see what happens ;) > > > >>> >> >> > > > >>> >> >> @Andrew I think you and Josh can add this doc to the Royale > > Docs > > > >>> >> compiler > > > >>> >> >> options page here [1] > > > >>> >> >> > > > >>> >> >> [1] > > > https://apache.github.io/royale-docs/compiler/compiler-options > > > >>> >> >> > > > >>> >> >> > > > >>> >> >> > > > >>> >> >> El mar, 10 nov 2020 a las 23:36, Josh Tynjala (< > > > >>> >> joshtynj...@bowlerhat.dev > > > >>> >> >> >) > > > >>> >> >> escribió: > > > >>> >> >> > > > >>> >> >> > Hi Andrew, > > > >>> >> >> > > > > >>> >> >> > Yes, I can help with that! > > > >>> >> >> > > > > >>> >> >> > -- > > > >>> >> >> > Josh Tynjala > > > >>> >> >> > Bowler Hat LLC <https://bowlerhat.dev> > > > >>> >> >> > > > > >>> >> >> > > > > >>> >> >> > On Mon, Nov 9, 2020 at 3:22 PM Andrew Wetmore < > > > >>> cottag...@gmail.com> > > > >>> >> >> wrote: > > > >>> >> >> > > > > >>> >> >> > > Josh, this is very interesting. I would like to include > an > > > >>> >> actionable > > > >>> >> >> > > amount of this information in our user documentation. If > I > > > >>> create a > > > >>> >> >> page > > > >>> >> >> > in > > > >>> >> >> > > the help docs for it, can you help me populate > instructions > > > >>> based > > > >>> >> on > > > >>> >> >> your > > > >>> >> >> > > researchs? > > > >>> >> >> > > > > > >>> >> >> > > Thanks! > > > >>> >> >> > > > > > >>> >> >> > > Andrew > > > >>> >> >> > > > > > >>> >> >> > > On Mon, Nov 9, 2020 at 6:16 PM Josh Tynjala < > > > >>> >> >> joshtynj...@bowlerhat.dev> > > > >>> >> >> > > wrote: > > > >>> >> >> > > > > > >>> >> >> > > > Hi all, > > > >>> >> >> > > > > > > >>> >> >> > > > Some of you have probably been wondering about my > changes > > > to > > > >>> the > > > >>> >> >> > compiler > > > >>> >> >> > > > over the last year or more. I apologize again for > > > >>> occasionally > > > >>> >> >> breaking > > > >>> >> >> > > > things for short periods. It's been quite a challenge > > > getting > > > >>> >> this > > > >>> >> >> > stuff > > > >>> >> >> > > > working, but I'm excited to finally be able to report > > some > > > >>> real > > > >>> >> >> > > > improvements that pretty much anyone should be able to > > take > > > >>> >> >> advantage > > > >>> >> >> > of > > > >>> >> >> > > > when building a Royale app. > > > >>> >> >> > > > > > > >>> >> >> > > > First some background. A while back, Harbs asked me to > > look > > > >>> into > > > >>> >> >> ways > > > >>> >> >> > of > > > >>> >> >> > > > reducing the file size of release builds. As you may > > know, > > > >>> we use > > > >>> >> >> > > Google's > > > >>> >> >> > > > Closure compiler to optimize our generated JavaScript. > > > >>> Closure > > > >>> >> can > > > >>> >> >> be > > > >>> >> >> > > very > > > >>> >> >> > > > aggressive in its optimizations, by renaming symbols > > > (things > > > >>> like > > > >>> >> >> > > variable > > > >>> >> >> > > > and function names) and removing "dead code" that is > > > >>> detected as > > > >>> >> >> never > > > >>> >> >> > > > being called. > > > >>> >> >> > > > > > > >>> >> >> > > > Closure's optimizations are good, but they also require > > > >>> >> developers > > > >>> >> >> to > > > >>> >> >> > be > > > >>> >> >> > > > very careful about how they write their JavaScript > code. > > > >>> When you > > > >>> >> >> > enable > > > >>> >> >> > > > Closure's full optimizations, you are not allowed to > use > > > >>> certain > > > >>> >> >> > > JavaScript > > > >>> >> >> > > > features because Closure cannot analyze them properly. > > For > > > >>> >> instance, > > > >>> >> >> > > > consider the following code: > > > >>> >> >> > > > > > > >>> >> >> > > > var propName= "myProp"; > > > >>> >> >> > > > var value = obj[propName]; > > > >>> >> >> > > > > > > >>> >> >> > > > When you dynamically access a property with a string, > > > Closure > > > >>> >> cannot > > > >>> >> >> > > > reliably know that the property exists and will be > > accessed > > > >>> at > > > >>> >> >> runtime. > > > >>> >> >> > > It > > > >>> >> >> > > > may decide to rename or remove that property, which > would > > > >>> break > > > >>> >> >> things > > > >>> >> >> > at > > > >>> >> >> > > > runtime. > > > >>> >> >> > > > > > > >>> >> >> > > > ActionScript supports many of the same restricted > dynamic > > > >>> >> features > > > >>> >> >> too, > > > >>> >> >> > > so > > > >>> >> >> > > > if you want to support the entire AS3 language, we > can't > > > let > > > >>> >> >> Closure do > > > >>> >> >> > > its > > > >>> >> >> > > > full optimization. Luckily, Closure also provides a bit > > of > > > a > > > >>> >> >> backdoor: > > > >>> >> >> > it > > > >>> >> >> > > > allows you to "export" symbols, which means that they > > won't > > > >>> be > > > >>> >> >> renamed > > > >>> >> >> > > and > > > >>> >> >> > > > they won't be removed as dead code. Traditionally, we > > have > > > >>> made > > > >>> >> >> heavy > > > >>> >> >> > use > > > >>> >> >> > > > of this exporting feature in Royale. > > > >>> >> >> > > > > > > >>> >> >> > > > Harbs wanted to know if we absolutely needed to export > > > >>> everything > > > >>> >> >> that > > > >>> >> >> > we > > > >>> >> >> > > > currently export, and if we could potentially allow > > > >>> developers to > > > >>> >> >> turn > > > >>> >> >> > > off > > > >>> >> >> > > > exporting entirely, as long as they follow the stricter > > > rules > > > >>> >> >> required > > > >>> >> >> > by > > > >>> >> >> > > > Closure. > > > >>> >> >> > > > > > > >>> >> >> > > > I won't go into all of the details, but over the last > > > several > > > >>> >> >> months, > > > >>> >> >> > > I've > > > >>> >> >> > > > been changing the compiler to give developers more > > control > > > >>> over > > > >>> >> >> release > > > >>> >> >> > > > builds. In particular, control over which symbols get > > > >>> exported, > > > >>> >> but > > > >>> >> >> > also > > > >>> >> >> > > > the ability to block Closure from renaming symbols that > > > >>> haven't > > > >>> >> been > > > >>> >> >> > > > exported. > > > >>> >> >> > > > > > > >>> >> >> > > > Now, for some of the results. I'm going to share the > > output > > > >>> file > > > >>> >> >> size > > > >>> >> >> > of > > > >>> >> >> > > > the release build for several Royale projects with > > various > > > >>> >> different > > > >>> >> >> > > > compiler options. > > > >>> >> >> > > > > > > >>> >> >> > > > For the example projects included with Royale, I built > > > >>> >> royale-asjs > > > >>> >> >> > commit > > > >>> >> >> > > > 94f12ed0e564b0b443834400dc2fc06d61b90a8a from October > 26, > > > >>> 2020. > > > >>> >> If > > > >>> >> >> you > > > >>> >> >> > > want > > > >>> >> >> > > > to try building these examples yourself, the file sizes > > of > > > >>> >> release > > > >>> >> >> > builds > > > >>> >> >> > > > may be slightly different, if you use a different > commit. > > > >>> >> >> > > > > > > >>> >> >> > > > SpectrumBrowser is a project developed by Harbs and his > > > >>> team. I > > > >>> >> used > > > >>> >> >> > > commit > > > >>> >> >> > > > d25a3def972b15ec029ae838f1a8a677d2d158bd from October > 20 > > > for > > > >>> the > > > >>> >> >> > results > > > >>> >> >> > > > below. Repo: > > https://github.com/unhurdle/spectrum-royale/ > > > >>> >> >> > > > > > > >>> >> >> > > > To establish a baseline, I built all of these projects > > with > > > >>> the > > > >>> >> >> older > > > >>> >> >> > > > Royale 0.9.7 compiler first. > > > >>> >> >> > > > > > > >>> >> >> > > > ========== > > > >>> >> >> > > > Baseline: royale-compiler 0.9.7 > > > >>> >> >> > > > ========== > > > >>> >> >> > > > > > > >>> >> >> > > > HelloWorld: 68 KB > > > >>> >> >> > > > ASDoc: 231 KB > > > >>> >> >> > > > TourDeJewel: 1074 KB > > > >>> >> >> > > > SpectrumBrowser: 900 KB > > > >>> >> >> > > > > > > >>> >> >> > > > Again, I am building the same AS3/MXML code every time, > > but > > > >>> these > > > >>> >> >> first > > > >>> >> >> > > > numbers are from building with the older compiler. All > > apps > > > >>> build > > > >>> >> >> and > > > >>> >> >> > run > > > >>> >> >> > > > successfully. > > > >>> >> >> > > > > > > >>> >> >> > > > ----- > > > >>> >> >> > > > > > > >>> >> >> > > > The rest of the results are built with royale-compiler > > > commit > > > >>> >> >> > > > df8bd9f686f1bbf89539e545377b2797c646172c from November > 3. > > > >>> >> >> > > > > > > >>> >> >> > > > All results below include the difference in KB and %. > > These > > > >>> >> values > > > >>> >> >> are > > > >>> >> >> > > > always in comparison to the baseline numbers above. > > > >>> >> >> > > > > > > >>> >> >> > > > ========== > > > >>> >> >> > > > Result 1: 0.9.8 default options > > > >>> >> >> > > > ========== > > > >>> >> >> > > > > > > >>> >> >> > > > HelloWorld: 84 KB (+10 KB / +24%) > > > >>> >> >> > > > ASDoc: 254 KB (+23 KB / +10%) > > > >>> >> >> > > > TourDeJewel: 1105 KB (+31 KB / +3%) > > > >>> >> >> > > > SpectrumBrowser: 936 KB (+36 KB / +4%) > > > >>> >> >> > > > > > > >>> >> >> > > > These examples are slightly larger when built with the > > > newer > > > >>> >> >> compiler. > > > >>> >> >> > > > That's expected. It's not ideal, but in the process of > > > >>> testing a > > > >>> >> >> > > multitude > > > >>> >> >> > > > of things to be sure that nothing had broken after my > > > >>> compiler > > > >>> >> >> > changes, I > > > >>> >> >> > > > discovered some cases where exporting a symbol didn't > > > >>> actually > > > >>> >> work > > > >>> >> >> > > > correctly in 0.9.7! To properly fix the bug and export > > > these > > > >>> >> >> symbols, > > > >>> >> >> > > there > > > >>> >> >> > > > was no choice but to make the file size a bit larger. > > > >>> >> >> > > > > > > >>> >> >> > > > ========== > > > >>> >> >> > > > Result 2: Disable export > > > >>> >> >> > > > ========== > > > >>> >> >> > > > > > > >>> >> >> > > > HelloWorld: 74 KB (+6 KB / +9%) > > > >>> >> >> > > > ASDoc: 227 KB (-4 KB / -2%) > > > >>> >> >> > > > TourDeJewel: 942 KB (-132 KB / -12%) > > > >>> >> >> > > > SpectrumBrowser: 882 KB (-18 KB / -2%) > > > >>> >> >> > > > > > > >>> >> >> > > > In this round, I added the > *-export-public-symbols=false* > > > >>> >> compiler > > > >>> >> >> > > option. > > > >>> >> >> > > > You may recall that I said earlier that I also modified > > the > > > >>> >> >> compiler to > > > >>> >> >> > > > allow a symbol not to be exported, but still prevent it > > > from > > > >>> >> being > > > >>> >> >> > > renamed. > > > >>> >> >> > > > With that in mind, -export-public-symbols=false > basically > > > >>> tells > > > >>> >> the > > > >>> >> >> > > > compiler that it still can't rename things, but it is > > > >>> allowed to > > > >>> >> >> remove > > > >>> >> >> > > > what it perceives as dead code. > > > >>> >> >> > > > > > > >>> >> >> > > > HelloWorld is still slightly larger than 0.9.7, but the > > > three > > > >>> >> other > > > >>> >> >> > > > examples are now slightly smaller than 0.9.7. > > > >>> >> >> > > > > > > >>> >> >> > > > Most developers should be able to safely add > > > >>> >> >> > -export-public-symbols=false > > > >>> >> >> > > > to their compiler options when building a Royale app. > The > > > >>> only > > > >>> >> time > > > >>> >> >> > that > > > >>> >> >> > > > you might still want this exporting is if you have > > external > > > >>> >> >> JavaScript > > > >>> >> >> > in > > > >>> >> >> > > > your page that isn't part of your Royale app, but it > > needs > > > to > > > >>> >> call > > > >>> >> >> > > > functions/classes in your Royale app. > > > >>> >> >> > > > > > > >>> >> >> > > > ========== > > > >>> >> >> > > > Result 3: Allow non-public things to be renamed > > > >>> >> >> > > > ========== > > > >>> >> >> > > > > > > >>> >> >> > > > HelloWorld: 72 KB (+4 KB / +6%) > > > >>> >> >> > > > ASDoc: 221 KB (-10 KB / -4%) > > > >>> >> >> > > > TourDeJewel: 918 KB (-156 KB / -15%) > > > >>> >> >> > > > SpectrumBrowser: 861 KB (-39 KB / -4%) > > > >>> >> >> > > > > > > >>> >> >> > > > In this round, I used the following compiler options: > > > >>> >> >> > > > > > > >>> >> >> > > > -export-public-symbols=false > > > >>> >> >> > > > > > > >>> >> >> > > > > > > >>> >> >> > > > > > > >>> >> >> > > > > > >>> >> >> > > > > >>> >> >> > > > >>> >> > > > >>> > > > > > > *-prevent-rename-protected-symbols=false-prevent-rename-internal-symbols=false* > > > >>> >> >> > > > > > > >>> >> >> > > > The two new options allow Closure compiler to rename > > > >>> protected > > > >>> >> and > > > >>> >> >> > > internal > > > >>> >> >> > > > symbols. Once again, HelloWorld is still slightly > larger > > > than > > > >>> >> 0.9.7, > > > >>> >> >> > but > > > >>> >> >> > > > the other three examples have gotten smaller again. > > > >>> >> >> > > > > > > >>> >> >> > > > While -prevent-rename-public-symbols=false exists too, > we > > > >>> cannot > > > >>> >> use > > > >>> >> >> > it. > > > >>> >> >> > > > The examples would not work correctly at runtime. This > > > option > > > >>> >> would > > > >>> >> >> > > > probably work in a pure AS3 app, but our implementation > > of > > > >>> MXML > > > >>> >> in > > > >>> >> >> > Royale > > > >>> >> >> > > > uses dynamic language features that Closure restricts. > > > Unless > > > >>> >> that > > > >>> >> >> is > > > >>> >> >> > > > fixed, we need to avoid renaming certain public > symbols. > > > >>> >> >> > > > > > > >>> >> >> > > > Again, most developers should be able to add > > > >>> >> >> > > > -prevent-rename-protected-symbols=false > > > >>> >> >> > > > and -prevent-rename-internal-symbols=false to their > > Royale > > > >>> app's > > > >>> >> >> > compiler > > > >>> >> >> > > > options. You might need to prevent renaming of > > > >>> protected/internal > > > >>> >> >> > symbols > > > >>> >> >> > > > if you access them dynamically. However, in my > > experience, > > > >>> people > > > >>> >> >> are > > > >>> >> >> > > much > > > >>> >> >> > > > more likely to access public symbols dynamically. > > > >>> >> >> > > > > > > >>> >> >> > > > ----- > > > >>> >> >> > > > > > > >>> >> >> > > > ========== > > > >>> >> >> > > > Result 4: Allow public methods to be renamed > > > >>> >> >> > > > ========== > > > >>> >> >> > > > > > > >>> >> >> > > > HelloWorld: 64 KB (-4 KB / -6%) > > > >>> >> >> > > > ASDoc: 206 KB (-25 KB / -11%) > > > >>> >> >> > > > TourDeJewel: 881 KB (-193 KB / -18%) > > > >>> >> >> > > > SpectrumBrowser: 828 KB (-72 KB / -8%) > > > >>> >> >> > > > > > > >>> >> >> > > > In this round, I used the following compiler options: > > > >>> >> >> > > > > > > >>> >> >> > > > -export-public-symbols=false > > > >>> >> >> > > > -prevent-rename-protected-symbols=false > > > >>> >> >> > > > -prevent-rename-internal-symbols=false > > > >>> >> >> > > > > > > >>> >> >> > > > > > > >>> >> >> > > > > > > >>> >> >> > > > > > >>> >> >> > > > > >>> >> >> > > > >>> >> > > > >>> > > > > > > *-prevent-rename-public-static-methods=false-prevent-rename-public-instance-methods=false > > > >>> >> >> > > > * > > > >>> >> >> > > > > > > >>> >> >> > > > The two new options allow Closure to rename methods > that > > > are > > > >>> >> public. > > > >>> >> >> > Now, > > > >>> >> >> > > > all four examples are smaller than 0.9.7, and the file > > size > > > >>> >> >> difference > > > >>> >> >> > is > > > >>> >> >> > > > getting even more dramatic. > > > >>> >> >> > > > > > > >>> >> >> > > > Once again, -prevent-rename-public-static-methods=false > > and > > > >>> >> >> > > > -prevent-rename-public-instance-methods=false should be > > > safe > > > >>> for > > > >>> >> >> most > > > >>> >> >> > > > developers to enable when compiling their Royale app. > In > > my > > > >>> >> >> experience, > > > >>> >> >> > > > calling methods dynamically is rare. > > > >>> >> >> > > > > > > >>> >> >> > > > ========== > > > >>> >> >> > > > More new compiler options > > > >>> >> >> > > > ========== > > > >>> >> >> > > > > > > >>> >> >> > > > There are some additional new compiler options > available, > > > but > > > >>> >> using > > > >>> >> >> > them > > > >>> >> >> > > is > > > >>> >> >> > > > likely to break most Royale apps. > > > >>> >> >> > > > > > > >>> >> >> > > > -prevent-rename-public-static-variables=false > > > >>> >> >> > > > -prevent-rename-public-instance-variables=false > > > >>> >> >> > > > -prevent-rename-public-static-accessors=false > > > >>> >> >> > > > -prevent-rename-public-instance-accessors=false > > > >>> >> >> > > > > > > >>> >> >> > > > These options control whether Closure allows variables > or > > > >>> >> accessors > > > >>> >> >> > > > (getters and setters) to be renamed. There are also > > > >>> >> similarly-named > > > >>> >> >> > > options > > > >>> >> >> > > > for protected and internal symbols, if you want more > > > control > > > >>> over > > > >>> >> >> those > > > >>> >> >> > > > too, instead of using > > > >>> -prevent-rename-protected-symbols=false and > > > >>> >> >> > > > -prevent-rename-internal-symbols=false. > > > >>> >> >> > > > > > > >>> >> >> > > > Unfortunately, renaming public variables/accessors is > > > >>> usually not > > > >>> >> >> > > possible > > > >>> >> >> > > > without breaking the app at runtime. In some apps, you > > > might > > > >>> be > > > >>> >> >> able to > > > >>> >> >> > > > allow public static members to be renamed. However, in > my > > > >>> >> >> experience, > > > >>> >> >> > > > binding to static constants is pretty common, and > > renaming > > > >>> breaks > > > >>> >> >> those > > > >>> >> >> > > > bindings. > > > >>> >> >> > > > > > > >>> >> >> > > > ========== > > > >>> >> >> > > > Next Steps > > > >>> >> >> > > > ========== > > > >>> >> >> > > > > > > >>> >> >> > > > Ideally, I'd like to make it possible for developers to > > be > > > >>> able > > > >>> >> to > > > >>> >> >> tell > > > >>> >> >> > > > Closure that it's allowed to rename all symbols, > > including > > > >>> public > > > >>> >> >> > ones. I > > > >>> >> >> > > > believe that we could see even more file size savings > in > > > >>> release > > > >>> >> >> builds > > > >>> >> >> > > if > > > >>> >> >> > > > Closure works with full optimizations for all symbols. > > > >>> Obviously, > > > >>> >> >> > > > ActionScript developers would be required to strictly > > > follow > > > >>> >> >> Closure's > > > >>> >> >> > > > rules, if they opt into renaming of public symbols, but > > > >>> that's a > > > >>> >> >> choice > > > >>> >> >> > > > that they should be allowed to make. > > > >>> >> >> > > > > > > >>> >> >> > > > As I mentioned above, our implementation of MXML and > > > binding > > > >>> uses > > > >>> >> >> > dynamic > > > >>> >> >> > > > access, which is not compatible with Closure's full > > > >>> >> optimizations. > > > >>> >> >> To > > > >>> >> >> > > > support those optimizations, I will need to explore > > changes > > > >>> to > > > >>> >> how > > > >>> >> >> we > > > >>> >> >> > > > generate JS for MXML, and how it gets parsed at > runtime. > > > >>> >> >> > > > > > > >>> >> >> > > > We previously discussed this subject a bit in this > older > > > >>> thread > > > >>> >> from > > > >>> >> >> > > > January 2020: > > > >>> >> >> > > > > > > >>> >> >> > > > > > > >>> >> >> > > > > > > >>> >> >> > > > > > >>> >> >> > > > > >>> >> >> > > > >>> >> > > > >>> > > > > > > https://lists.apache.org/thread.html/r843e55252e37967b71b1430a2a904719791d698f3e5e2a79de74e493%40%3Cdev.royale.apache.org%3E > > > >>> >> >> > > > > > > >>> >> >> > > > At the time, I tried out some ideas that we came up > with > > > >>> while > > > >>> >> >> > > > brainstorming, but all had various downsides that > didn't > > > make > > > >>> >> for an > > > >>> >> >> > > > obvious winner. In the end, I decided to set further > > > >>> >> investigation > > > >>> >> >> > aside > > > >>> >> >> > > > and first focus on exporting/renaming stuff. Now, I'm > > ready > > > >>> to > > > >>> >> take > > > >>> >> >> a > > > >>> >> >> > > > second look with a fresh perspective, and maybe we'll > > have > > > >>> some > > > >>> >> new > > > >>> >> >> > ideas > > > >>> >> >> > > > to try. > > > >>> >> >> > > > > > > >>> >> >> > > > ----- > > > >>> >> >> > > > > > > >>> >> >> > > > That was really long, so thank you for reading, if you > > made > > > >>> it to > > > >>> >> >> the > > > >>> >> >> > > end! > > > >>> >> >> > > > > > > >>> >> >> > > > TL;DR: By enabling certain, new compiler options, most > > > Royale > > > >>> >> >> > developers > > > >>> >> >> > > > can make their app release builds smaller. > Additionally, > > I > > > >>> plan > > > >>> >> to > > > >>> >> >> keep > > > >>> >> >> > > > investigating, and I expect to find more ways to reduce > > > file > > > >>> >> size in > > > >>> >> >> > the > > > >>> >> >> > > > future. > > > >>> >> >> > > > > > > >>> >> >> > > > -- > > > >>> >> >> > > > Josh Tynjala > > > >>> >> >> > > > Bowler Hat LLC <https://bowlerhat.dev> > > > >>> >> >> > > > > > > >>> >> >> > > > > > >>> >> >> > > > > > >>> >> >> > > -- > > > >>> >> >> > > Andrew Wetmore > > > >>> >> >> > > > > > >>> >> >> > > http://cottage14.blogspot.com/ > > > >>> >> >> > > > > > >>> >> >> > > > > >>> >> >> > > > >>> >> >> > > > >>> >> >> -- > > > >>> >> >> Carlos Rovira > > > >>> >> >> Apache Member & Apache Royale PMC > > > >>> >> >> *Apache Software Foundation* > > > >>> >> >> http://about.me/carlosrovira > > > >>> >> >> > > > >>> >> > > > > >>> >> > > > > >>> >> > -- > > > >>> >> > Andrew Wetmore > > > >>> >> > > > > >>> >> > http://cottage14.blogspot.com/ > > > >>> >> > > > > >>> >> > > > > >>> >> > > > > >>> >> > > > > >>> >> > > > > >>> >> > > > >>> >> -- > > > >>> >> Andrew Wetmore > > > >>> >> > > > >>> >> http://cottage14.blogspot.com/ > > > >>> >> > > > >>> > > > > >>> > > > >> > > > >> > > > >> -- > > > >> Andrew Wetmore > > > >> > > > >> http://cottage14.blogspot.com/ > > > >> > > > >> > > > >> > > > >> > > > >> > > > > > > > > -- > > > > Andrew Wetmore > > > > > > > > http://cottage14.blogspot.com/ > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > Andrew Wetmore > > > > > > http://cottage14.blogspot.com/ > > > > > > > > > -- > > Carlos Rovira > > Apache Member & Apache Royale PMC > > *Apache Software Foundation* > > http://about.me/carlosrovira > > > > > -- > Andrew Wetmore > > http://cottage14.blogspot.com/ >