This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [RFC] Replace Java with Go in default languages


Am 08.11.2013 23:21, schrieb Jeff Law:
> 
> 
> GCJ has, IMHO, moved from active development into a deep maintenance mode.    I
> suspect this is largely due to the change of focus of key developers to OpenJDK
> and other projects.  GCJ played a role in bootstrapping OpenJDK, both
> technically and politically and had OpenJDK not happened, I suspect GCJ would
> still be under active development.
> 
> The last news item related to Java was 2009 and scanning the ChangeLog doesn't
> show significant project activity (~14 changes in 2013, most of which look like
> routine maintenance in the language front-end.   There's even fewer changes
> occurring in the runtime system.

GCJ still plays this role for OpenJDK 6 and OpenJDK 7.

> I did some benchmarking using one of my slower systems (primarily because my
> faster systems are used for real work).  It's an older quad machine, but should
> give us a reasonable feel for how expensive java is to the bootstrap &
> regression testing process.
> 
> A default languages bootstrap takes 67 minutes on that box (-j4).  The times
> were consistent to within 20 seconds.  Disabling java brings that time down to
> 51 minutes, again with a variance of around 20 seconds. That means roughly 25%
> of the time to bootstrap is Java.

These times include the time to build the libjava dependencies, boehm-gc, libffi
and zlib.  At least these should be measured separately. boehm-gc is used too
when configured with --enable-objc-gc. libffi (?) and zlib are used when
building Go, so these times will be re-added when building the Go frontend.

> I didn't measure total testing time -- just the time to test Java, where it
> clocks in at 7 minutes (again -j4, though it's clearly not doing much in parallel).
> 
> Clearly bootstrapping and testing Java is expensive.  It's better than a while
> back (thanks to removing the static library build), but it's still a significant
> component of the bootstrap & test cycle we all do regularly.
> 
> We discussed removing libjava extensively in 2008, but never moved forward. 
> It's not entirely clear why from reviewing the thread. Additionally, I think the
> landscape around OpenJDK is a bit different now than then and thus it's time to
> revisit.
> 
> So instead of proposing that we just remove Java from the default languags, I
> propose that we replace Java with Go.
> 
> Go uses -fnon-call-exceptions which is one of the things that was a bit unique
> about GCJ and Go appears to have a much more vibrant developer and user
> community than GCJ.  So we get the -fnon-call-exceptions testing we want and
> we're actually building a front-end that a larger community cares about.
> 
> A bootstrap with Go replacing Java clocks in at 56 minutes.  So we're still
> getting most of the improvement in bootstrap times.
> 
> Testing Go (compiler & runtime) takes about a minute longer than libjava (it's
> doing more in parallel, so serially Go would be considerably longer in testing).
> 
> Clearly switching from libjava to go would be a significant improvement in the
> bootstrap and regression test cycle.  On the box I tested we'd see roughly at
> 15% improvement and we'd still get testing of -fnon-call-exceptions.

assuming that you did these tests on amd64, it helps to build the default
libjava multilib variant only.  In the past I did propose to do that by default.
Back then people did think this wasn't necessary when cutting the build time in
half by disabling the static libjava build by default.

the libjava build itself does parallelize well except for building libgcj-tools,
so a bit of speed-up could be gained there too.

the libjava tests currently don't run parallelized, however from my expericence
these tests are not the longest running ones.  Again, maybe don't count the
times for the boehm-gc and libffi tests.

  Matthias


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]