Aspect-Oriented Programming using Reflection

What infrastructure is needed to support aspect-oriented software development? To the programmer, we must supply aspect-oriented (sub)languages that are based on the constructs and basic syntax that the programmer is most familiar with, as well as facilities for reifying and manipulating the cross-cutting features of immediate concern. At the implementation level, the aspect specifications must insinuate themselves into the application proper. Furthermore, the support for aspect specification and integration should not impose a performance penalty on the application at runtime. We are conducting research into dynamic reflective object-oriented language design and implementation that provides a rich infrastructure for the development of aspect-oriented technology. The main concepts that we bring to bear are: Reflection and Dynamism: A program is able to reflect on its structure and behavior, and then modify its behavior. metaobject protocols rely on reflection to present a programmer-modifiable dynamic semantics. Syntactic abstraction: A procedural, hygienic macro system facilitates implementation of AOP language extensions; Dynamic, Optimistic Optimization: Programs do not pay a performance penalty merely for the existence of a metaobject protocol. That is, if part of an application does not make use of the abstraction provided by a metaobject protocol, performance is as good as if the metaobject protocol did not exist.