From: Sascha H. <sa...@gm...> - 2011-06-10 16:47:53
|
I have to check when I am home, but I already do that in some cases. E.g. I also ended up doing this for the JS output, because Qooxdoo had exactly the same issue. It recompiled everything because of the timestamp changes. Once that was fixed, it was sped up quite a bit // Sascha On Fri, Jun 10, 2011 at 6:40 PM, Arno Puder <ar...@pu...> wrote: > > Interfaces.h will change whenever you make any change to a Java interface > or the way it is used. In this case the only option is a complete > recompilation. > > What might already help if files that are written by an OutputProcess first > check if the file already exists and has identical content. Of course that > will slow down things a little more but might save time with Xcode. > > Arno > > > On Jun 10, 2011, at 10:26 AM, Sascha Haeberling <sa...@gm...> wrote: > > Ah gotcha. Any way to make that more stable so that not so many source > files need to be changed? > > 2011/6/10 Arno Puder < <ar...@pu...>ar...@pu...> > >> >> Yep. Xcode starts from scratch every time. But as you said, that is not >> really Xcodes fault since we regenerate all the files every single time. >> Note overwriting files is one thing, but remember that interfaces.h is >> recomputed every single time which then requires all .m source files to be >> recompiled as well. >> >> Arno >> >> >> On Jun 10, 2011, at 10:18 AM, Sascha Haeberling < <sa...@gm...> >> sa...@gm...> wrote: >> >> So XCode starts totally from scratch every time you make a change? I >> almost cannot believe that. Maybe it would help if we wouldn't change the >> timestamps of files that haven't changed? >> >> 2011/6/10 Arno Puder < <ar...@pu...> <ar...@pu...>ar...@pu...> >> >>> >>> Real numbers would be helpful. The problem with caching is that we can >>> only do this in XMLVM but not in Xcode. Xcode already take a long time to >>> compile. How much time it takes to link against a huge library by comparison >>> we don't know. >>> >>> Arno >>> >>> >>> On Jun 10, 2011, at 10:03 AM, Sascha Haeberling < <sa...@gm...><sa...@gm...> >>> sa...@gm...> wrote: >>> >>> I would really be interesting it getting some actual numbers. At work I >>> often see huge binaries link forever. So if we put the whole JDK >>> cross-compiled into one library, I wonder how long that would take. >>> >>> Also keep in mind that another alternative to speeding things up is to >>> have proper caching of things at various stages. That could speed things up >>> quite a bit I suspect. >>> >>> // Sascha >>> >>> 2011/6/10 Arno Puder < <ar...@pu...> <ar...@pu...><ar...@pu...> >>> ar...@pu...> >>> >>>> >>>> I'm thinking of a "development mode" where no optimizations are >>>> performed. For vtable this means that all methods go into the vtable by >>>> default. That should be much easier than disabling itable optimizations. >>>> >>>> With regards to time savings: I suspect that a library would be >>>> beneficial. Keep in mind that compile time includes XMLVM compile time as >>>> well as Xcode compile time. XMLVM would only need to compile the application >>>> without computing the transitive closure of all referenced classes (let >>>> alone cross compiling these classes) and Xcode would "only" need to link a >>>> huge library (where I suspect that that will be faster than compiling >>>> everything). But of course I don't have empirical evidence. >>>> >>>> Arno >>>> >>>> >>>> On Jun 10, 2011, at 9:21 AM, Markus Neubrand <<mar...@gm...><mar...@gm...><mar...@gm...> >>>> mar...@gm...> wrote: >>>> >>>> Hi, >>>> >>>> For the vtable optimization for non-overridden methods I don't see a >>>> possibility to do this at all. If we compile everything into a library we >>>> never know when a class of the application overrides something in the JDK, >>>> etc. >>>> >>>> For the selector coloring we could implement a possibility to save the >>>> end state of the colored graph for the library and use this information when >>>> we color the selector graph of the application. >>>> >>>> But I agree with Sascha: it would be nice to know if this would speed >>>> things up significantly before we start with something like that. >>>> >>>> Markus >>>> >>>> 2011/6/10 Sascha Haeberling < <sa...@gm...> <sa...@gm...><sa...@gm...><sa...@gm...> >>>> sa...@gm...> >>>> >>>>> Are we even sure that linking against such a huge library would really >>>>> be that much faster? From my experience linking huge binaries can take a >>>>> long time as well. >>>>> >>>>> In the end it looks like this: timeSaved = (timePipelineNow - >>>>> timePipelineThen) - timeLinking >>>>> >>>>> If the times saved is small, the question is whether it makes sense >>>>> investing time into it at all. Therefore it would be good to have some >>>>> estimates first. >>>>> >>>>> // Sascha >>>>> >>>>> >>>>> 2011/6/10 Arno Puder < <ar...@pu...> <ar...@pu...><ar...@pu...><ar...@pu...> >>>>> ar...@pu...> >>>>> >>>>>> Yes, we've had this discussion before. Basically creating a Unix-like >>>>>> library (.a) that speeds things compilation time. However, the problem >>>>>> is that (at least) for now it wouldn't work with the C backend. We do >>>>>> optimizations that go beyond the simple decision "should this file be >>>>>> included or not" (what the linker typically does, and which, btw, is >>>>>> also performed by XMLVM at compile-time). We also optimize things like >>>>>> vtables, e.g., if a method never gets overridden, it will not end up >>>>>> in the vtable. This knowledge, however, only exists if we take the >>>>>> application into account. If the application overrides a library >>>>>> method, then the cross-compilation of the library also needs to >>>>>> change. >>>>>> >>>>>> I agree that for a regular development cycle it would make sense to >>>>>> have something like a library and only do full optimizations for the >>>>>> final release. We would need a way to cross-compile without >>>>>> optimizations. One big problem I see here are interface methods >>>>>> (because of the selector coloring scheme that is used), but I better >>>>>> let Markus respond to this since he implemented those optimizations. >>>>>> >>>>>> Arno >>>>>> >>>>>> >>>>>> On Jun 10, 2011, at 6:26 AM, Panayotis Katsaloulis >>>>>> < <pan...@pa...> <pan...@pa...><pan...@pa...><pan...@pa...> >>>>>> pan...@pa...> wrote: >>>>>> >>>>>> > >>>>>> > On 10 Ιουν 2011, at 3:11 μ.μ., Sascha Haeberling wrote: >>>>>> > >>>>>> >> Panayotis, >>>>>> >> >>>>>> >> sorry, I didn't understand what you mean. What do you mean by "the >>>>>> library"? The C backend does compute all dependencies so that the number of >>>>>> classes that are compiled and outputted in the end is at a minimum. Only >>>>>> required classes will be pulled in. Why would you want to replace this and >>>>>> with what? >>>>>> >> >>>>>> >> // Sascha >>>>>> > >>>>>> > >>>>>> > This is from an old discussion. >>>>>> > >>>>>> > The idea is to compile the whole JDK and iPhone compatibility >>>>>> library (and probably other dependencies) into a C library (i.e. in a form >>>>>> of .a file) and compile the project against this library. >>>>>> > Thus the Xcode project will compile much much faster and even the >>>>>> production of the Xcode project will be faster (and smaller) since no files >>>>>> from the JDK and the compatibility library will be required any more. >>>>>> > >>>>>> > This idea was also in the earlier days of ObjC backend, but due to >>>>>> the way ObjC handled dependencies and late binding, the gain was far less. >>>>>> > Now with the strong typed C language, things should be much better. >>>>>> > >>>>>> > For example, if a function is not used at all, the C compiler >>>>>> understands that and never embeds it into the output binary - we have >>>>>> optimizations in the method-level, instead of the class-level. >>>>>> > >>>>>> > >>>>>> > I don't know how virtual functions are handled and probably Arno >>>>>> could help with this. >>>>>> > >>>>>> > >>>>>> > PS: I remember that ProGuard is also able to perform this type of >>>>>> optimizations and it is already used for this reason in Android projects. >>>>>> Probably we should also do something similar? >>>>>> > >>>>>> ------------------------------------------------------------------------------ >>>>>> > EditLive Enterprise is the world's most technically advanced content >>>>>> > authoring tool. Experience the power of Track Changes, Inline Image >>>>>> > Editing and ensure content is compliant with Accessibility Checking. >>>>>> > <http://p.sf.net/sfu/ephox-dev2dev><http://p.sf.net/sfu/ephox-dev2dev><http://p.sf.net/sfu/ephox-dev2dev><http://p.sf.net/sfu/ephox-dev2dev> >>>>>> http://p.sf.net/sfu/ephox-dev2dev >>>>>> > _______________________________________________ >>>>>> > Xmlvm-developers mailing list >>>>>> > <Xml...@li...><Xml...@li...><Xml...@li...><Xml...@li...> >>>>>> Xml...@li... >>>>>> > <https://lists.sourceforge.net/lists/listinfo/xmlvm-developers><https://lists.sourceforge.net/lists/listinfo/xmlvm-developers><https://lists.sourceforge.net/lists/listinfo/xmlvm-developers><https://lists.sourceforge.net/lists/listinfo/xmlvm-developers> >>>>>> https://lists.sourceforge.net/lists/listinfo/xmlvm-developers >>>>>> >>>>>> >>>>>> ------------------------------------------------------------------------------ >>>>>> EditLive Enterprise is the world's most technically advanced content >>>>>> authoring tool. Experience the power of Track Changes, Inline Image >>>>>> Editing and ensure content is compliant with Accessibility Checking. >>>>>> <http://p.sf.net/sfu/ephox-dev2dev><http://p.sf.net/sfu/ephox-dev2dev><http://p.sf.net/sfu/ephox-dev2dev><http://p.sf.net/sfu/ephox-dev2dev> >>>>>> http://p.sf.net/sfu/ephox-dev2dev >>>>>> _______________________________________________ >>>>>> Xmlvm-developers mailing list >>>>>> <Xml...@li...><Xml...@li...><Xml...@li...><Xml...@li...> >>>>>> Xml...@li... >>>>>> <https://lists.sourceforge.net/lists/listinfo/xmlvm-developers><https://lists.sourceforge.net/lists/listinfo/xmlvm-developers><https://lists.sourceforge.net/lists/listinfo/xmlvm-developers><https://lists.sourceforge.net/lists/listinfo/xmlvm-developers> >>>>>> https://lists.sourceforge.net/lists/listinfo/xmlvm-developers >>>>>> >>>>> >>>>> >>>>> >>>>> ------------------------------------------------------------------------------ >>>>> EditLive Enterprise is the world's most technically advanced content >>>>> authoring tool. Experience the power of Track Changes, Inline Image >>>>> Editing and ensure content is compliant with Accessibility Checking. >>>>> <http://p.sf.net/sfu/ephox-dev2dev><http://p.sf.net/sfu/ephox-dev2dev><http://p.sf.net/sfu/ephox-dev2dev><http://p.sf.net/sfu/ephox-dev2dev> >>>>> http://p.sf.net/sfu/ephox-dev2dev >>>>> _______________________________________________ >>>>> Xmlvm-developers mailing list >>>>> <Xml...@li...><Xml...@li...><Xml...@li...><Xml...@li...> >>>>> Xml...@li... >>>>> <https://lists.sourceforge.net/lists/listinfo/xmlvm-developers><https://lists.sourceforge.net/lists/listinfo/xmlvm-developers><https://lists.sourceforge.net/lists/listinfo/xmlvm-developers><https://lists.sourceforge.net/lists/listinfo/xmlvm-developers> >>>>> https://lists.sourceforge.net/lists/listinfo/xmlvm-developers >>>>> >>>>> >>>> >>> >> > |