XSPEC12's design attempts to make full use of the wisdom amassed by experience in C++, programming large scale projects, and idioms for effective and robust coding. At the same time, it's hard to apply all of the
ideas rigorously (well, at least not at the initial release...). Some of the important ideas are:
Loose coupling: having objects relating to each other by well-defined minimal interfaces that hide the implementation details so that they may be maintained independently.
the library, comprising algorithms and containers that were formerly referred to as the Standard Template Library
but incorporated into the language standard, gives a rich vocabulary of data structure that are well-exercised, mathematically elegant, and robust in the sense defined below.
techniques exist to reduce the coupling between different parts of the code to expedite compilation (C++ compilers do far more work than fortran or C compilers and compilation is relatively CPU intensive).
Extensibility I: the ability to have new functionality added to objects through adopting specific patterns.
Extensibility II: the ability to add new types of objects at runtime that perform similar tasks with different implementation
Modularity in development: separating interface from implementation allows development to proceed without different parts of the problem impeding one another.
runtime loading implies that the core implementation of the program does not need to be changed to add functionality, so that older code need not be opened to the possibility of inadvertently adding new problems in the process of extending the program
Robustness: Exception safety
guarantees can be enforced so that the program's state is never put in an undefined state during its execution, or better, returns exactly to an earlier state if an error is encountered.