abc: The AspectBench Compiler for AspectJ




FAQ

Some questions we've been asked, or thought we would get asked if we didn't put the answers here pre-emptively:

General questions

What is AspectJ?
The AspectJ language is a seamless extension to Java which introduces aspect-oriented programming (AOP) techniques into the Java language. It aims to be compatible with current Java programs (i.e. any legal Java program is a valid AspectJ program). For more information, see the website of the AspectJ project. The ajc compiler, which was the first implementation of the language, can be found at this website.
More information is available at the Wikipedia.
What is the relationship of abc to ajc?
ajc was the first implementation of the AspectJ language. abc is a reimplementation from scratch of the same language, with a few minor differences. It was developed using ajc and its internal test suite as a reference. The code for the runtime library of abc was copied from ajc.
Why bother with another implementation?
ajc aims to allow separate compilation of aspects, and to be fast. In contrast, abc requires all aspects to be present in source form (but normal Java code that is to be advised can be provided as bytecode), and pays less attention to compilation speed; typically it is roughly 4 times slower than ajc. In return, abc is able to perform more aggressive optimisations and is easily extensible.
We also believe that having two separate implementations of a language is important for defining it independent of any particular implementation.
What is that thing on your logo?
Our logo shows Poinsettiacus in various states. Poinsettiacus is the natural evolutionary successor of the Poinsettia. Poinsettiacus was created by Jane Panangaden just before Christmas, and hence it got the name of this Christmas plant. The red balls on top of its antlers are berries. Jane kindly provided the images shown on this website.
How can I contribute to abc?
There are many levels at which you can contribute. First and foremost, we very much appreciate bug reports, especially accompanied by a test cases. Bugs may actually be enhancement requests, for a particular feature or optimisation. If you wish to fix it yourself, patches are very welcome. Feel free to email the abc-dev mailing list to discuss the approach you intend to take, even before having created a patch. To submit a patch, attach it to a bug. Finally, you might want to write new language extensions. It should be possible to do this mostly without touching the existing code, as shown by the examples in the eaj directory. If you feel you'd like something changed in the main trunk of abc, let us know on abc-dev list. We are happy to consider such extensions for inclusion in the next release of abc.
We would also very much like to receive examples of AspectJ code, especially if it makes heavy use of advice, to add to our benchmark set and to tune our compiler with. Ideally such code would be freely distributable, but that isn't essential.
How do I communicate with other abc users?
Please join the abc-users mailing list.
Will abc make my AspectJ program run faster?
It depends on the language features you use. As a rule of thumb, abc produces better code than ajc for cflow pointcuts. It also produces better code for certain forms of around advice, in particular where the proceed statement occurs in a local or anonymous class, or if one piece of around advice applies to another. One benchmark that makes heavy use of cflow runs 45 times faster when compiled with abc, see the page on performance for a more detailed discussion.

Troubleshooting

abc aborts complaining that it can't find java.lang.Object.
Try explicitly adding the Java runtime library to your classpath, and file a bug report telling us precisely what JVM you are using and where in the filesystem the runtime library can be found. The runtime library is usually called rt.jar or sometimes (e.g. on MacOS X) classes.jar.

Valid XHTML 1.1!