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.
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.
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.
Thoughts or comments?
- [RFC] Replace Java with Go in default languages Jeff Law
-