Computer as Thinker/Doer: Problem-Solving Environments for Computational Science
IEEE Computational Science & Engineering
Design patterns: elements of reusable object-oriented software
Design patterns: elements of reusable object-oriented software
Non-intrusive object introspection in C++: architecture and application
Proceedings of the 20th international conference on Software engineering
The Art of the Metaobject Protocol
The Art of the Metaobject Protocol
Registering Scientific Information Sources for Semantic Mediation
ER '02 Proceedings of the 21st International Conference on Conceptual Modeling
Gprof: A call graph execution profiler
SIGPLAN '82 Proceedings of the 1982 SIGPLAN symposium on Compiler construction
C++ metastring library and its applications
GTTSE'09 Proceedings of the 3rd international summer school conference on Generative and transformational techniques in software engineering III
Reusing non-functional concerns across languages
Proceedings of the 11th annual international conference on Aspect-oriented Software Development
A system for runtime type introspection in c++
SBLP'12 Proceedings of the 16th Brazilian conference on Programming Languages
Hi-index | 0.00 |
Problem Solving Environments (PSE) in scientific computing domains require the ability to couple High Performance Computing (HPC) components. A PSE facilitates coupling of tasks or computations in order to aid a scientist in finding a solution to a problem or at least getting closer to a solution. Reflection capabilities are required in order to effectively dynamically couple these components. Reflection facilitates adaptive behavior such as rebinding calls to different functions at run-time, or integrating flexible interpreted languages with compiled languages such as C++ or Fortran. Currently, however, reflection is not available in languages commonly used in high performance computing. While there have been several attempts to incorporate reflection into C++, all of them are either intrusive or are not fully compliant with the C++ standard. In this paper, we present a number of use cases for reflective programming, and show how it can be efficiently and robustly implemented in languages such as C++. Our implementation uses code generation to add metadata, and is fully compliant with the standard C++ specification. We compare the overhead of reflection with languages such as Java, and show that our overhead is acceptable for many scenarios. Our reflection library is open-source, and is available at http://www.extreme.indiana.edu/reflcpp.