Manuel de suivi dynamique Solaris

Conversions stables

Alors qu'un translateur permet de convertir des informations en structure de données stables, il ne résout pas nécessairement tous les problèmes de stabilité que les données en cours de conversion peuvent rencontrer. Par exemple, si l'expression d'entrée d'une opération xlate référence elle-même des données instables, le programme en D qui en résulte est également instable car la stabilité du programme est toujours calculée sur la base de la stabilité minimale des instructions et des expressions accumulées du programme en D. Il est, par conséquent, parfois nécessaire de définir pour un translateur une expression d'entrée stable spécifique afin de permettre la création de programmes stables. Il est possible d'utiliser le mécanisme intégré en langage D pour faciliter ces conversions stables.

La bibliothèque de DTrace procfs.d fournit les variables curlwpsinfo et curpsinfo décrites précédemment comme des conversions stables. Par exemple, la variable curlwpsinfo est en fait une déclaration inline se présentant comme suit :

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

La variable curlwpsinfo est définie comme une conversion intégrée de la variable curthread (un pointeur vers la structure de données privée du noyau) vers le type lwpsinfo_t stable. Le compilateur D traite ce fichier de bibliothèque et met en cache la déclaration inline, faisant ainsi apparaître curlwpsinfo comme une autre variable en D. L'instruction #pragma qui suit la déclaration est utilisée pour rétablir explicitement les attributs de l'identificateur curlwpsinfo sur Stable/Stable/Commun, masquant la référence à curthread dans l'expression intégrée. Grâce à cette combinaison de fonctionnalités en langage D, les programmeurs en D peuvent utiliser curthread comme source de conversion dans un mode sécurisé que Sun peut mettre à jour en fonction des changements correspondants dans l'implémentation de Solaris.