Classdesc: C++ Reflection for scientific computing

Dr Russell Standish1

1High Performance Coders

Reflection is the capability of querying aspects of an object’s type and structure at runtime, that normally is discarded as part of the compilation process. It is the key to automatically supporting object serialisation and automatically binding scripting languages to compiled models. In a typical scientific model, code supporting initialisation/configuration as well as checkpoint/restart can often be a significant chunk of the overall codebase, and creates a constant maintenance burden as the scientific model changes over time.

Whilst a number of programming languages support reflection intrinsically, popular high performance programming environments like C++ and Fortran do not. Classdesc is a system for automatically providing reflection capability to C++ programs that has been in constant use and development since 2000. This presentation covers the concept of a class descriptor, from which the name Classdesc is derived, and the existing descriptors for binary, XDR, JSON and XML serialisation, and automatic bindings for Python, Javascript and a REST API. The binary serialisation capability is leveraged to provide easy-to-program distributed memory parallel programming libraries based on industry standard MPI, called ClassdescMP and Graphcode.


With a PhD in theoretical physics, Russell has had a long career in supporting high performance computing, and was the founding director of UNSW’s High Perfomance Computing Support Unit between 1997 and 2005. Since that time, he has established a software engineering company, High Performance Coders, with a range of clients in the public, private and academic sectors, specialising in high performance and scientific computing.

He also has academic research interests in complex systems and artificial life.

Recent Comments