Subject: AspectJ language design
From: Jonathan Aldrich (jonal@cs.washington.edu)
Date: Wed Jun 28 2000 - 18:18:52 PDT
Cecil group & 590n'ers who might be interested in AspectJ:
I talked with Gregor Kiczales last week about the development of
AspectJ.  AspectJ is an extension of Java to support Aspect-Oriented
Programming, developed at Xerox PARC.  Some things that I learned:
 * AspectJ was explicitly designed to support crosscutting concerns--that
is, programming issues that affect many different parts of a system.
 * You can think of AspectJ as supporting a kind of "reverse inheritance"
where a class says to another one, you will inherit from me (rather than
the other way around).
 * AOP was originally described as a kind of metaprogramming system where
an "aspect weaver" takes code from many different aspects and combines it
into a single coherent program.  They're trying to get away from this
"macro processing" semantics and towards a more operational semantics.  
I.e., instead of "put this aspect code at the beginning of method M" we
have "when method M executes, something extra happens to support a
particular aspect of the system"
 * AspectJ's design is intentionally "fast, loose, and permissive" so that
users can distinguish the useful features from the non-useful/dangerous
ones.  The language changes significantly every few months.  They're
moving toward a system that does syntax and semantic checking, but they're
not all the way there yet.
 * AspectJ's design goal is to be "AOP that above-average Java
developer can get their heads around."  It is not intended to be as
flexible as possible, nor ideal for academic-types to get their heads
around.
 * Gregor's view of AspectJ vs. HyperJ (from the subject-oriented
programming group at IBM Watson): With AspectJ, you're in the middle of a
working system, and you can see how everything comes together.  HyperJ is
tough to work with because you only see a small slice of the program at a
time, and the rules for composing slices are separate from the code they
operate on.  Also, programmers have a tough time thinking about
metaprogramming (e.g., HyperJ's slice composition rules, or CLOS's
meta-object protocol)
I have a set of papers on AspectJ and other technologies focused on the
same problem, if there is any interest in the topic for a future 590n or
590l.
Jonathan :-)
This archive was generated by hypermail 2b25 : Tue Oct 03 2000 - 15:21:41 PDT