Today I evaluated IBM's Jikes compiler. It is a replacement for javac written from scratch in C++. It currently lives at http://www.alphaWorks.ibm.com/. They just released a Linux version, and since I develop entirely in Linux, I thought I'd give it a whirl. Currently it is free for any use, but considered alpha (or beta or whatever). They may charge in the future, apparently. Source code was not available :-( The compiler is apparently a strict implementation to the JVM specification and Java Language Specification. The release notes are pretty adamant about that. Kudos for that. I use a custom build system that compiles and jars the source while enforcing explicit dependency instructions between packages. It typically compiles one or more packages at once, then collects them into a single jar, then does the same for some more sets of packages. Once it has compiled a few, depending on the ruleset, it may collect some subjars to make larger ones. This is all just so you know that the jar tool gets called a fair amount - jikes and javac aren't the only things being run. To test, I compiled two code bases twice for each tool. The only change I made to the build scripts was replacing "/usr/local/jdk/bin/javac" with "/usr/local/bin/jikes +E" (+E gives emacs-friendly error messages). Useability-wise, jikes is very nice. It has options for different output formats; the +E allows emacs and such to parse the output so you can click to go to the correct line of source in the correct file. It seems to give better error messages than javac. Note that I know the error message format - this is because I got several I had never seen before. Jikes is pickier. I had to append "L" to a few long literals. I had to remove the "$" from some identifiers in a 3rd-party tool (these are disallowed in 1.1, but were valid under 1.0 - javac accepts them; jikes will too with a switch that allows 1.0 code). It also didn't like one instance where I used an import like "this.that.*" - it wasn't able to find the .java files to compile; putting in class-specific import statements fixed that. After I got it to compile in jikes without error, I did the timing runs; none of the changes broke javac compilation. Also, my build system enforces dependencies by limiting the classpath to those jars that a given package is supposed to depend on - jikes complained in instances where javac didn't. This was where a class wasn't directly referenced (i.e., no variables were declared of that type, casts made, etc.) but was accessed in some fashion, or was part of a method signature that the code called, even though it wasn't used (e.g. null was passed rather than a variable of the type). Some of these things might be peculiar to my build system; your mileage may vary. I'm not really annoyed by it - in each case, Jikes seems to be correct, just less lenient than javac. Since my code is the only area of my life I'm anal-retentive about, this is OK by me. Jikes is supposed to do incremental compiling, but this is apparently disabled at present. The design for it is very nice, and well-suited for use by other tools. The main thing I was impressed by was its speed. Below are the timing runs. Keep in mind that I'm not using a JIT, and since javac is AFAIK 100% java, it's having to run interpreted. Also keep in mind that a fair amount of "jarring" going on - this should skew the results back into javac's favor, since it is only directly competing for a portion of the total run time. Atlanta Java Consortium reuseables (172 classes) Javac run 1: real 2m16.450s user 1m40.940s sys 0m8.920s Javac run 2: real 2m2.959s user 1m40.360s sys 0m7.700s Jikes run 1: real 0m32.548s user 0m16.870s sys 0m5.110s Jikes run 2: real 0m38.575s user 0m17.080s sys 0m5.250s Partner Software stable (631 classes) Javac run 1: real 5m1.667s user 3m58.320s sys 0m12.580s Javac run 2: real 4m34.586s user 3m56.400s sys 0m11.330s Jikes run 1: real 1m16.133s user 0m40.160s sys 0m7.230s Jikes run 2: real 1m7.439s user 0m40.590s sys 0m7.720s As far as I can tell in this short a time, the code is working correctly. I ran the reuseables test suite without error, and have done some basic testing of our product software. I'll probably use jikes full-time for awhile and see how it does as far as correctness, but initial indications are very good. Note the long list of addressees, including the Jikes authors; you might want to reduce this in any replies. Thanks. -- Paul Reavis [EMAIL PROTECTED] Design Lead Partner Software, Inc. http://www.partnersoft.com