I don't normally solicit donations for this web site. When people offer them, I normally request that they send something to Doctors Without Borders instead. I've also gotten a few GMail invites, but I prefer to store my mail locally, thanks. However, there's a recent offer that's too tempting to pass up. If anyone is planning to buy SubEthaEdit in the next week or so, I'd love the free extra serial number they're offering with each purchase for "a fellow carbon based life form." Thanks. We now return you to your regularly scheduled programming.
The Gnu Project has released version 4.0.0 of GCC,
the GNU Compiler Collection.
GCC contains frontends for C, C++, Objective C, Chill, Fortran, Ada, and Java as well as libraries for these languages.
GCC's Java is a clean room implementation
that doesn't use any Sun code,
so it doesn't always exactly match Sun release versions, but this is roughly at the Java 1.4 level with some omissions.
Verson 4.0 brings
a completely new optimization framework based on a higher level intermediate representation than the existing RTL representation. Numerous new code transformations based on the new framework are available in GCC 4.0, including:
- Scalar replacement of aggregates
- Constant propagation
- Value range propagation
- Partial redundancy elimination
- Load and store motion
- Strength reduction
- Dead store elimination
- Dead and unreachable code elimination
- Autovectorization
- Loop interchange
- Tail recursion by accumulation
I'll be curious to see if this brings gcc performance back up to the level of the closed source compilers. Java Specific changes in 4.0 include:
- In order to prevent naming conflicts with other implementations of these tools, some GCJ binaries have been renamed:
In particular, these names were problematic for the jpackage.org packaging conventions which install symlinks in
rmic
is nowgrmic
,rmiregistry
is nowgrmiregistry
, andjar
is nowfastjar
./usr/bin
that point to the preferred versions of these tools.- The
-findirect-dispatch
argument to the compiler now works and generates code following a new "binary compatibility" ABI. Code compiled this way follows the binary compatibility rules of the Java Language Specification.- libgcj now has support for using GCJ as a JIT, using the
gnu.gcj.jit
family of system properties.- libgcj can now find a shared library corresponding to the bytecode representation of a class. See the documentation for the new
gcj-dbtool
program, and the newgnu.gcj.precompiled.db.path
system property.- There have been many improvements to the class library. Here are some highlights:
- Much more of AWT and Swing exist.
- Many new packages and classes were added, including
java.util.regex
,java.net.URI
,javax.crypto
,javax.crypto.interfaces
,javax.crypto.spec
,javax.net
,javax.net.ssl
,javax.security.auth
,javax.security.auth.callback
,javax.security.auth.login
,javax.security.auth.x500
,javax.security.sasl
,org.ietf.jgss
,javax.imageio
,javax.imageio.event
,javax.imageio.spi
,javax.print
,javax.print.attribute
,javax.print.attribute.standard
,javax.print.event
, andjavax.xml
- Updated SAX and DOM, and imported GNU JAXP
Other notable improvements include support for Fortran 90 and Fortran 95.
I tried to build this on my Mac box to test gcj, but it died during make with the message "./config.status: line 910: ./../../config-ml.in: No such file or directory". I'll probably just wait till Tiger comes out at the end of the month, which ships gcc-4.0 by default.