Handbuch zur dynamischen Ablaufverfolgung in Solaris

Stabile Übersetzungen

Übersetzer besitzen zwar die Fähigkeit, Informationen in eine stabile Datenstruktur umzuwandeln, lösen aber nicht unbedingt alle bei der Übersetzung von Daten anfallenden Stabilitätsprobleme. Verweist beispielsweise der Eingangsausdruck für eine xlate-Operation selbst auf als „Unstable“ gekennzeichnete Daten, so wird auch das entstehende D-Programm instabil, da sich die Programmstabilität stets aus der geringsten Stabilität der Menge der D-Programmanweisungen und -ausdrücke ergibt. Aus diesem Grund ist es manchmal notwendig, einen spezifischen, stabilen Eingangsausdruck für einen Übersetzer zu definieren, sodass stabile Programme erzeugt werden können. Der inline-Mechanismus in D erleichtert die Definition solcher stabilen Übersetzungen.

Die DTrace-Bibliothek procfs.d stellt die bereits zuvor beschriebenen Variablen curlwpsinfo und curpsinfo als stabile Übersetzungen bereit. Bei der Variable curlwpsinfo handelt es sich zum Beispiel eigentlich um die folgende inline-Deklaration:

inline lwpsinfo_t *curlwpsinfo = xlate <lwpsinfo_t *> (curthread);
#pragma D attributes Stable/Stable/Common curlwpsinfo

Die Variable curlwpsinfo ist als inline-Übersetzung aus der Variable curthread (einem Zeiger auf die private Kernel-Datenstruktur, die einen Thread darstellt) in den stabilen Typ lwpsinfo_t definiert. Der D-Compiler verarbeitet diese Bibliotheksdatei und speichert die inline-Deklaration zwischen. Dadurch erscheint curlwpsinfo wie jede andere D-Variable. Die #pragma-Anweisung im Anschluss an die Deklaration setzt die Attribute des Namens curlwpsinfo explizit auf Stable/Stable/Common zurück, wodurch die Referenz auf curthread im inline-Ausdruck maskiert wird. Dank dieser Kombination aus D-Leistungsmerkmalen können D-Programmierer curthread gefahrlos als Quelle für eine Übersetzung verwenden, die im Rahmen von Änderungen in der Solaris-Implementierung von Sun aktualisiert werden kann.