Abstract
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 front end 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 back end 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. We illustrate the extension mechanisms of abc through a number of small, but nontrivial, examples. We then proceed to contrast the design goals of abc with those of the original AspectJ compiler, and how these different goals have led to different design decisions. Finally, we review a few examples of projects by others that extend abc in interesting ways.
Access this chapter
Tax calculation will be finalised at checkout
Purchases are for personal use only
Preview
Unable to display preview. Download preview PDF.
Similar content being viewed by others
References
abc. The AspectBench Compiler. Home page with downloads, FAQ, documentation, support mailing lists, and bug database (2006), http://aspectbench.org (Cited 1 February 2006)
Aldrich, J.: Open modules: Modular reasoning about advice. In: Black, A.P. (ed.) ECOOP 2005. LNCS, vol. 3586, pp. 144–168. Springer, Heidelberg (2005)
Aotani, T., Masuhara, H.: Compiling conditional pointcuts for user-level semantic pointcuts. In: Proceedings of the SPLAT workshop at AOSD 2005 (2005), http://www.daimi.au.dk/~eernst/splat05/
AspectJ bug database. Wrong variable binding in || pointcuts (2004), https://bugs.eclipse.org/bugs/show_bug.cgi?id=61568
AspectJ bug database. ITD on inner class: missing accessor method (2005), https://bugs.eclipse.org/bugs/show_bug.cgi?id=73856
Avgustinov, P., Christensen, A.S., Hendren, L., Kuzins, S., Lhoták, J., Lhoták, O., de Moor, O., Sereni, D., Sittampalam, G., Tibble, J.: abc: An extensible AspectJ compiler. In: Tarr, P. (ed.) AOSD 2005: 4th International Conference on Aspect-Oriented Software Development, ACM, New York (2005)
Avgustinov, P., Christensen, A.S., Hendren, L., Kuzins, S., Lhoták, J., Lhoták, O., de Moor, O., Sereni, D., Sittampalam, G., Tibble, J.: Optimising AspectJ. In: Sarkar, V., Hall, M.W. (eds.) PLDI 2005: ACM SIGPLAN Conference on Programming Language Design and Implementation, pp. 117–128. ACM, New York (2005)
Bonér, J.: AspectWerkz — dynamic AOP for Java (2004), http://codehaus.org/~jboner/papers/aosd2004_aspectwerkz.pdf
Brukman, M., Myers, A.C.: PPG: a parser generator for extensible grammars (2003), http://www.cs.cornell.edu/Projects/polyglot/ppg.html
Chiba, S., Nakagawa, K.: Josh: an open AspectJ-like language. In: Lieberherr, K. (ed.) AOSD 2004: 3rd International Conference on Aspect-Oriented Software Development, pp. 102–111 (2004)
Chiba, S., Nishizawa, M.: An Easy-to-Use Toolkit for Efficient Java Bytecode Translators. In: Pfenning, F., Smaragdakis, Y. (eds.) GPCE 2003. LNCS, vol. 2830, pp. 364–376. Springer, Heidelberg (2003)
Colyer, A., Clement, A.: Large-scale AOSD for middleware. In: Lieberherr, K. (ed.) AOSD 2004: 3rd International Conference on Aspect-Oriented Software Development, pp. 56–65. ACM, New York (2004)
De Volder, K.: Aspect-oriented logic meta programming. In: Cointe, P. (ed.) Reflection 1999. LNCS, vol. 1616, pp. 250–272. Springer, Heidelberg (1999)
Douence, R., Fradet, P., Südholt, M.: Composition, reuse and interaction analysis of stateful aspects. In: Lieberherr, K. (ed.) AOSD 2004: 3rd International Conference on Aspect-Oriented Software Development, pp. 141–150. ACM, New York (2004)
Douence, R., Fradet, P., Südholt, M.: Trace-based aspects. In: Filman, R., Elrad, T., Clarke, S., Akşit, M. (eds.) Aspect-Oriented Software Development. Addison-Wesley, Reading (2004)
Dufour, B., Goard, C., Hendren, L., de Moor, O., Sittampalam, G., Verbrugge, C.: Measuring the dynamic behaviour of AspectJ programs. In: Proceedings of the 19th ACM SIGPLAN conference on Object-oriented programing, systems, languages, and applications, pp. 150–169. ACM, New York (2004)
Dutchyn, C., Kiczales, G., Masuhara, H.: Tutorial: AOP language exploration using the Aspect Sand Box. In: Kiczales, G. (ed.) AOSD 2002: 1st International Conference on Aspect-Oriented Software Development, ACP (2002)
Eichberg, M., Mezini, M., Ostermann, K.: Pointcuts as functional queries. In: Chin, W.-N. (ed.) APLAS 2004. LNCS, vol. 3302, pp. 366–381. Springer, Heidelberg (2004)
Ekman, T., Hedin, G.: Rewritable reference attributed grammars. In: Odersky, M. (ed.) ECOOP 2004. LNCS, vol. 3086, pp. 147–171. Springer, Heidelberg (2004)
Gagnon, E., Hendren, L.J., Marceau, G.: Efficient Inference of Static Types for Java Bytecode. In: Palsberg, J. (ed.) SAS 2000. LNCS, vol. 1824, pp. 199–220. Springer, Heidelberg (2000)
Grove, D., DeFouw, G., Dean, J., Chambers, C.: Call graph construction in object-oriented languages. In: Bloom, T. (ed.) OOPSLA: ACM Conference on Object-Oriented Programming Systems, Languages and Applications, pp. 108–124. ACM, New York (1997)
Gybels, K., Brichau, J.: Arranging language features for more robust pattern-based crosscuts. In: Akşit, M. (ed.) AOSD 2003: 2nd International Conference on Aspect-Oriented Software Development, pp. 60–69. ACM, New York (2003)
Hanenberg, S., Unland, R.: Parametric introductions. In: Akşit, M. (ed.) AOSD 2003: 2nd International Conference on Aspect-Oriented Software Development, pp. 80–89. ACM, New York (2003)
Hanson, D., Proebsting, T.: A research C# compiler. Software — Practice and Experience 34(13), 1211–1224 (2004)
Harbulot, B., Gurd, J.R.: Using AspectJ to separate concerns in parallel scientific Java code. In: Lieberherr, K. (ed.) AOSD 2004: 3rd International Conference on Aspect-Oriented Software Development, pp. 122–131. ACM, New York (2004)
Harbulot, B., Gurd, J.R.: A joinpoint for loops in AspectJ. In: Clifton, C., Lämmel, R., Leavens, G.T. (eds.) FOAL 2005: Foundations of Aspect-Oriented Languages, pp. 11–20 (2005); Technical report 05-05, Department of Computer Science, Iowa State University, http://www.cs.iastate.edu/~leavens/FOAL/index-2005.shtml
Hilsdale, E., Hugunin, J.: Advice weaving in AspectJ. In: Lieberherr, K. (ed.) AOSD 2004: 3rd International Conference on Aspect-Oriented Software Development, pp. 26–35. ACM, New York (2004)
Hugunin, J.: Guide for developers of the AspectJ compiler and weaver (2004), http://dev.eclipse.org/viewcvs/index.cgi/
Kiczales, G.: The fun has just begun. Keynote address at AOSD (2003), Available at: aosd.net/archive/2003/kiczales-aosd-2003.ppt
Krishnamurthi, S., Fisler, K., Greenberg, M.: Verifying aspect advice modularly. In: Taylor, R.N., Dwyer, M.B. (eds.) ACM SIGSOFT International Symposium on the Foundations of Software Engineering, pp. 137–146 (2004)
Masuhara, H., Kawauchi, K.: Dataflow Pointcut in Aspect-Oriented Programming. In: Ohori, A. (ed.) APLAS 2003. LNCS, vol. 2895, pp. 105–121. Springer, Heidelberg (2003)
Masuhara, H., Kiczales, G., Dutchyn, C.: A Compilation and Optimization Model for Aspect-Oriented Programs. In: Hedin, G. (ed.) CC 2003. LNCS, vol. 2622, pp. 46–60. Springer, Heidelberg (2003)
Miecznikowski, J., Hendren, L. J.: Decompiling Java Bytecode: Problems, Traps and Pitfalls. In: Horspool, R.N. (ed.) CC 2002. LNCS, vol. 2304, pp. 111–127. Springer, Heidelberg (2002)
Millstein, T.: Practical predicate dispatch. In: Vlissides, J.M., Schmidt, D.C. (eds.) OOPSLA 2004: Conference on Object-oriented Programming, Systems, Languages and Applications, pp. 345–364. ACM, New York (2004)
Millstein, T., Reay, M., Chambers, C.: Relaxed MultiJava: Balancing extensibility and modular typechecking. In: Crocker, R., Steel Jr., G.L. (eds.) OOPSLA 2003: Conference on Object-Oriented Programming, Systems, Languages and Applications, pp. 224–240. ACM, New York (2003)
Nishizawa, M., Chiba, S., Tatsubori, M.: Remote pointcut — a language construct for distributed AOP. In: Lieberherr, K. (ed.) AOSD 2004: 3rd International Conference on Aspect-Oriented Software Development, pp. 7–15. ACM, New York (2004)
Nystrom, N., Clarkson, M.R., Myers, A.C.: Polyglot: An Extensible Compiler Framework for Java. In: Hedin, G. (ed.) CC 2003. LNCS, vol. 2622, pp. 138–152. Springer, Heidelberg (2003)
Ossher, H., Tarr, P.: Hyper/J: multi-dimensional separation of concerns for java. In: 22nd International Conference on Software Engineering, pp. 734–737 (2000)
Sakurai, K., Masuhara, H., Ubayashi, N., Matsuura, S., Komiya, S.: Association aspects. In: Lieberherr, K. (ed.) AOSD 2004: 3rd International Conference on Aspect-Oriented Software Development, pp. 16–25. ACM, New York (2004)
Sereni, D., de Moor, O.: Static analysis of aspects. In: Akşit, M. (ed.) AOSD 2003: Proceedings of the 2nd International Conference on Aspect-Oriented Software Development, pp. 30–39. ACM Press, New York (2003)
Skotiniotis, T., Lorenz, D.H.: Cona: Aspects for Contracts and contracts for aspects. In: OOPSLA 2004: Companion to the 19th annual ACM SIGPLAN conference on Object-oriented programming systems, languages, and applications, pp. 196–197. ACM, New York (2004)
Stolz, V., Bodden, E.: Temporal Assertions using AspectJ. In: Fifth Workshop on Runtime Verification (RV 2005). Electronic Notes in Theoretical Computer Science. Elsevier Science Publishers, Amsterdam (2005)
Vallée-Rai, R., Gagnon, E.M., Hendren, L. J., Lam, P., Pominville, P., Sundaresan, V.: Optimizing Java Bytecode Using the Soot Framework: Is It Feasible? In: Watt, D.A. (ed.) CC 2000. LNCS, vol. 1781, pp. 18–34. Springer, Heidelberg (2000)
De Volder, K.: The TyRuBa metaprogramming system, http://tyruba.sourceforge.net/
Walker, R., Viggers, K.: Implementing protocols via declarative event patterns. In: FSE-12: ACM Sigsoft International Symposium on Foundations of Software Engineering, pp. 159–169 (2004)
Zhao, J.: Slicing aspect-oriented software. In: 10th IEEE Workshop on Program Comprehension, pp. 251–260 (2002)
Author information
Authors and Affiliations
Editor information
Editors and Affiliations
Rights and permissions
Copyright information
© 2006 Springer-Verlag Berlin Heidelberg
About this paper
Cite this paper
Avgustinov, P. et al. (2006). abc : An Extensible AspectJ Compiler. In: Rashid, A., Aksit, M. (eds) Transactions on Aspect-Oriented Software Development I. Lecture Notes in Computer Science, vol 3880. Springer, Berlin, Heidelberg. https://doi.org/10.1007/11687061_9
Download citation
DOI: https://doi.org/10.1007/11687061_9
Publisher Name: Springer, Berlin, Heidelberg
Print ISBN: 978-3-540-32972-5
Online ISBN: 978-3-540-32974-9
eBook Packages: Computer ScienceComputer Science (R0)