abc: The AspectBench Compiler for AspectJ


abc is a whole-program compiler, intended as a testbed for optimisations. In particular, the performance of the executables abc produces is a prime design goal, but compilation speed is of lesser importance. Please file an enhancement request on bugzilla for any examples where you feel performance can be improved, for example because you have an equivalent but faster program in pure Java, or because you found that ajc produces better code.

The 1.0.0 release of abc already used the base Soot optimisations, it also had some aspect-specific optimisations. A careful assessment of the overheads introduced by aspects, and these minor optimisations can be found in our OOPSLA 2004 paper.

As of release 1.1.0, abc uses many more optimisations. The most important of these are described in our PLDI 2005 paper. These improvements include an around weaver that strikes a careful balance between code size and speed, several intraprocedural optimisations of cflow, and an interprocedural analysis that eliminates the overheads of cflow completely in many cases. The above paper contains a careful account of the performance improvements that result from these optimisations.

By default, abc runs the around and intraprocedural cflow optimisations. To turn these off, use the option -O0. To get the full power of the interprocedural analyses use -O3. Because this option uses a whole program analysis, you must specify the main class via the option -main-class MainName, where MainName is the name of your main class.

Valid XHTML 1.1!