C. Tull (LBNL/ATLAS)
In this paper we will discuss how Aspect-Oriented Programming (AOP) can be used to implement and extend the functionality of HEP architectures in areas such as performance monitoring, constraint checking, debugging and memory management. AOP is the latest evolution in the line of technology for functional decomposition which includes Structured Programming (SP) and Object-Oriented Programming (OOP). In AOP, an Aspect can contribute to the implementation of a number of procedures and objects and is used to capture a concern such as logging, memory allocation or thread synchronization that crosscuts multiple modules and/or types. We have chosen Gaudi as a representative HEP architecture because it is a component architecture and has been successfully adopted by several HEP experiments. Since most HEP frameworks are currently implemented in C++, for our study we have used AspectC++, an extension to C++ that allows the use of AOP techniques without adversely affecting software perfomance. We integrated AspectC++ in the development environment of the Atlas experiment, and we will discuss some of the configuration management issues that may arise in a mixed C++/AspectC++ environment. In this study we have focused on "Development Aspects", i.e. aspects that are intended to facilitate program development but can be transparently removed from the production code, such as execution tracing, constraint checking and object lifetime monitoring. We will briefly discuss possible "Production Aspects" related to cache management and object creation. For each of the concerns we have examined we will discuss how traditional SP or OOP techniques compare to the AOP solution we developed. We will conclude discussing the short and medium term feasibility of introducing AOP, and AspectC++ in particular, in the complex software systems of the LHC experiments.