Das unnötige Kopieren von Instanzen bei der Rückgabe von Funktionswerten wie in gängigen C++-Implementierungen soll vermieden werden.
Auf diesem Stack werden auch, weis es allgemein üblich ist, die lokalen Variablen der Funktionen allokiert.
Die Funktionen arbeiten als abstrakte Maschinenbefehle.
Dies hat den weiteren Vorteil, das die Ergebnisinstanz nicht erneut allokiert werden muß. Man stelle sich beispielsweise einen iterativen Algorithmus einer numerischen Anwendung vor. Die Größe der Matritzen ändert sich meist nicht. Wenn nun eine Funktion eine Matrix als Wert zurückliefert, müßte sie in herkömmlichen C++ Implementierungen immer wieder allokiert und dellokiert werden, was die Speicherverwaltung belastet.
Mit der hier vorgeschlagenen Implementierungstechnik können die Speicherstrukturen einfach bebehalten werden. (In C++ wird der erfahrene Programmierer auch daher die Klassen als Funktionsrückgabewerte vermeiden. Auf die schönen Operatoren in C++ muß man bei praktischen Anwendungen verzichten.)
Eine wichtige Anwendung ist die Matrizenrechnung. Wenn die Dimension einer Matrix feststeht, was in den meisten Anwendungen der Fall sein dürfte, kann der Typ matrix mit Parametern versehen werden:
Typ matrix<dim_t n,dim_t m> { // ... }Die Multiplikationsoperation könnte dann so angegeben werden:
matrix<n,m> operator_*_(matrix<n,o> m1,matrix<o,m> m2);Der Compiler kann nun prüfen, ob die Dimensionen der Matrizen übereinstimmen. Im obigen Beispiel unifiziert der Compiler die Parameter und merkt, wenn der Typparameter o unterschiedliche Werte hat.
Bei Zwischenwerten von arithmetischen Ausdrücken kann der Compiler automatisch Hilfsvariablen mit den entsprechenden Typparametern auf dem Stack anlegen lassen.
Vorteile: