The implementations presented in this work are based on the C++ programming language due to several reasons.
C++ allows for high-level implementations by simultaneously supporting high performance. High-level refers to the fact that the language supports high abstraction levels, i.e., implementation specifics are hidden from the developer to ease the burden of development. Concerning high performance, C++ - as a multi-paradigm language [24][77][78] - supports generic and meta programming, in turn enabling high performance implementations. Examples of successful high performance applications based on C++ are the Matrix Template Library (MTL) [90], the finite element library deal.II [91][92], and the Blitz++ library [93].
Furthermore, C++ is mature [94] and is ranked to be one of the most popular programming languages [95]. The popularity seems to decline due to an substantial increase in developers for mobile devices based on Java and Objective-C. However, according to the long term trends, the popularity of C++ has only slightly decreased over the last six years. Additionally, a new C++ standard has been released recently [96], adding a vast amount of new functionality. Due to the popularity of C++ it is ensured that there will be continuing support from compiler and library developers and standardization committees to further advance C++.
Additionally, several high quality compilers are available, for instance, the open source compilers GNU GCC [97], Clang [98], and the proprietary Intel compiler [99]. As each compiler usually implements the standard differently and also provides varying optimization and debugging approaches, having access to different compilers enables to further stabilize and tune implementations by, for instance, using different debugging mechanisms.
A very important property of C++ is the ability to interface with other programming languages. This is especially important in the field of HPC, where C and Fortran are the predominant programming languages [100]. Additionally, Python becomes more and more popular due to it’s flexibility and ecosystem of feature-rich extensions. Where C and Fortran code can be linked with C++ in a straightforward manner, for bridging Python with C++ in both directions the convenience library Boost Python can be used [101].