|
ABSTRACT
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.
REFERENCES
Note: OCR errors may be found in this Reference List extracted from the full text article. ACM has opted to expose the complete List rather than only correct and linked references.
| |
1
|
Boost Type Traits. http://www.boost.org/doc/html/boost_typetraits.html.
|
| |
2
|
C++ Reflection. http://sourceforge.net/projects/cppreflect.
|
| |
3
|
CppUnit - A C++ Unit Testing Framework. http://cppunit.sourceforge.net.
|
| |
4
|
LHC Computing Grid (LCG) Project. http://lcg.web.cern.ch/LCG/.
|
| |
5
|
Metaclasses and Reflection in C++. http://www.vollmann.com/pubs/meta/meta/meta.html.
|
| |
6
|
Microsoft .NET Framework. http://msdn.microsoft.com/netframework.
|
| |
7
|
Microsoft Visual C++. http://msdn.microsoft.com/visualc.
|
| |
8
|
Reflection for C++. http://www.garret.ru/~knizhnik/cppreflection/docs/reflect.html.
|
| |
9
|
SEAL - Core Libraries and Services Project. http://seal.web.cern.ch/seal/.
|
| |
10
|
The Large Hadron Collider (LHC). http://public.web.cern.ch/public/Content/ Chapters/AboutCERN/CERNFuture/WhatLHC/WhatLHC-en.html.
|
| |
11
|
R. Bramley, D. Gannon, T. Stuckey, J. Villacis, E. Akman, J. Balasubramanian, F. Breg, S. Diwan, and M. Govindaraju. The linear system analyzer. Technical Report TR-511, Computer Science Dept, Indiana University, 1998.
|
| |
12
|
|
| |
13
|
|
| |
14
|
|
 |
15
|
Susan L. Graham , Peter B. Kessler , Marshall K. Mckusick, Gprof: A call graph execution profiler, Proceedings of the 1982 SIGPLAN symposium on Compiler construction, p.120-126, June 23-25, 1982, Boston, Massachusetts, United States
|
| |
16
|
|
| |
17
|
ISO. INTERNATIONAL STANDARD: Programming languages - C++. http://www.open-std.org/jtcl/sc22/wg21, 1998.
|
| |
18
|
|
| |
19
|
S. Roiser. The SEAL C++ Reflection System. In Computing in High Energy and Nuclear Physics (CHEP), September 2004.
|
| |
20
|
W3C. Simple Object Access Protocol (SOAP) 1.1. http://www.w3.org/TR/2000/NOTE-SOAP-20000508/, 2000.
|
|