From: Sascha H. <sa...@gm...> - 2011-06-10 16:18:45
|
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...> > > 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...> 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...> > >> >> 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...> 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...> >> >>> 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...> >>> >>>> 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...> 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 >>>> > _______________________________________________ >>>> > Xmlvm-developers mailing list >>>> > <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 >>>> >>>> >>>> ------------------------------------------------------------------------------ >>>> 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 >>>> _______________________________________________ >>>> Xmlvm-developers mailing list >>>> <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 >>>> >>> >>> >>> >>> ------------------------------------------------------------------------------ >>> 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 >>> _______________________________________________ >>> Xmlvm-developers mailing list >>> <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 >>> >>> >> > |