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.