abc: an extensible AspectJ compiler

Research in the design of aspect-oriented programming languages requires a workbench that facilitates easy experimentation with new language features and implementation techniques. In particular, new features for AspectJ have been proposed that require extensions in many dimensions: syntax, type checking and code generation, as well as data flow and control flow analyses.The AspectBench Compiler (abc) is an implementation of such a workbench. The base version of abc implements the full AspectJ language. Its frontend is built, using the Polyglot framework, as a modular extension of the Java language. The use of Polyglot gives flexibility of syntax and type checking. The backend is built using the Soot framework, to give modular code generation and analyses.In this paper, we outline the design of abc, focusing mostly on how the design supports extensibility. We then provide a general overview of how to use abc to implement an extension. Finally, we illustrate the extension mechanisms of abc through a number of small, but non-trivial, examples. abc is freely available under the GNU LGPL.

[1]  Laurie J. Hendren,et al.  Optimizing Java Bytecode Using the Soot Framework: Is It Feasible? , 2000, CC.

[2]  Shigeru Chiba,et al.  Josh: an open AspectJ-like language , 2004, AOSD '04.

[3]  Stefan Hanenberg,et al.  Parametric introductions , 2003, AOSD '03.

[4]  Rémi Douence,et al.  Trace-Based Aspects , 2004 .

[5]  Martin Odersky ECOOP 2004 – Object-Oriented Programming , 2004, Lecture Notes in Computer Science.

[6]  Andrew Clement,et al.  Large-scale AOSD for middleware , 2004, AOSD '04.

[7]  Todd D. Millstein,et al.  Practical predicate dispatch , 2004, OOPSLA.

[8]  Andrew P. Black ECOOP 2005 - Object-Oriented Programming, 19th European Conference, Glasgow, UK, July 25-29, 2005, Proceedings , 2005, ECOOP.

[9]  John Vlissides,et al.  Proceedings of the 16th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications , 2001, OOPSLA 2001.

[10]  Ondrej Lhoták,et al.  abc : An Extensible AspectJ Compiler , 2006, LNCS Trans. Aspect Oriented Softw. Dev..

[11]  Kathi Fisler,et al.  Verifying aspect advice modularly , 2004, SIGSOFT '04/FSE-12.

[12]  Kris De Volder Aspect-Oriented Logic Meta Programming , 1998, ECOOP Workshops.

[13]  Ondrej Lhoták,et al.  Optimising aspectJ , 2005, PLDI '05.

[14]  Robert J. Walker,et al.  Implementing protocols via declarative event patterns , 2004, SIGSOFT '04/FSE-12.

[15]  Jonathan Aldrich,et al.  Open Modules: Modular Reasoning About Advice , 2005, ECOOP.

[16]  Laurie Hendren,et al.  Decompiling Java Bytecode: Problems, Traps and Pitfalls , 2002, CC.

[17]  Jianjun Zhao,et al.  Slicing aspect-oriented software , 2002, Proceedings 10th International Workshop on Program Comprehension.

[18]  Oege de Moor,et al.  Measuring the dynamic behaviour of AspectJ programs , 2004, OOPSLA.

[19]  Volker Stolz,et al.  Temporal Assertions using AspectJ , 2006, Electron. Notes Theor. Comput. Sci..

[20]  John R. Gurd,et al.  A join point for loops in AspectJ , 2006, AOSD '06.

[21]  David Grove,et al.  Call graph construction in object-oriented languages , 1997, OOPSLA '97.

[22]  Harold Ossher,et al.  Hyper/J/sup TM/: multi-dimensional separation of concerns for Java/sup TM/ , 2000, Proceedings of the 2000 International Conference on Software Engineering. ICSE 2000 the New Millennium.

[23]  Hidehiko Masuhara,et al.  Compiling Conditional Pointcuts for User-Level Semantic Pointcuts , 2005 .

[24]  S. Chiba,et al.  Remote pointcut: a language construct for distributed AOP , 2004, AOSD '04.

[25]  Kris Gybels,et al.  Arranging language features for more robust pattern-based crosscuts , 2003, AOSD '03.

[26]  Stanley M. Sutton,et al.  Hyper/J™: multi-dimensional separation of concerns for Java™ , 2001, ICSE '02.

[27]  David R. Hanson,et al.  A research C# compiler , 2004, Softw. Pract. Exp..

[28]  Pattie Maes,et al.  Meta-Level Architectures and Reflection , 1988 .

[29]  Jonathan Aldrich,et al.  Open Modules: A Proposal for Modular Reasoning in Aspect-Oriented Programming , 2004 .

[30]  Michael Eichberg,et al.  Pointcuts as Functional Queries , 2004, APLAS.

[31]  Torbjörn Ekman,et al.  Rewritable Reference Attributed Grammars , 2004 .

[32]  Todd Millstein,et al.  Relaxed MultiJava: balancing extensibility and modular typechecking , 2003, OOPSLA 2003.

[33]  Naoyasu Ubayashi,et al.  Association aspects , 2004, AOSD '04.

[34]  John R. Gurd,et al.  Using AspectJ to separate concerns in parallel scientific Java code , 2004, AOSD '04.

[35]  Hidehiko Masuhara,et al.  Dataflow Pointcut in Aspect-Oriented Programming , 2003, APLAS.

[36]  Michael R. Clarkson,et al.  Polyglot: An Extensible Compiler Framework for Java , 2003, CC.

[37]  David H. Lorenz,et al.  Cona: aspects for contracts and contracts for aspects , 2004, OOPSLA '04.

[38]  Laurie J. Hendren,et al.  Efficient Inference of Static Types for Java Bytecode , 2000, SAS.

[39]  Oege de Moor,et al.  Static analysis of aspects , 2003, AOSD '03.

[40]  Muga Nishizawa,et al.  An Easy-to-Use Toolkit for Efficient Java Bytecode Translators , 2003, GPCE.

[41]  Rémi Douence,et al.  Composition, reuse and interaction analysis of stateful aspects , 2004, AOSD '04.

[42]  Todd D. Millstein,et al.  Relaxed MultiJava: balancing extensibility and modular typechecking , 2003, OOPSLA.

[43]  Hidehiko Masuhara,et al.  A Compilation and Optimization Model for Aspect-Oriented Programs , 2003, CC.

[44]  Jim Hugunin,et al.  Advice weaving in AspectJ , 2004, AOSD '04.

[45]  Laurie Hendren,et al.  Building the abc AspectJ compiler with Polyglot and Soot , 2004 .

[46]  Jonas Boner AspectWerkz - dynamic AOP for Java , 2004 .

[47]  Alan Bundy,et al.  Constructing Induction Rules for Deductive Synthesis Proofs , 2006, CLASE.