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

[RFC] Replace Java with Go in default languages

From: Jeff Law <law at redhat dot com>

To: GCC <gcc at gcc dot gnu dot org>

Date: Fri, 08 Nov 2013 15:21:15 -0700

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

Authentication-results: sourceware.org; auth=none

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?