The performance of object-oriented applications in scientific computing often suffers from the inefficient use of high-level
abstractions provided by underlying libraries. Since these library abstractions are user-defined and not part of the programming
language itself there is no compiler mechanism to respect their semantics and thus to perform appropriate optimizations.
In this paper we outline the design of ROSE and focus on the discussion of two approaches for specifying and processing complex
source code transformations. These techniques are intended to be as easy and intuitive as possible for potential ROSE users;
i.e., for designers of object-oriented scientific libraries, people most often with no compiler expertise.