Guía de seguimiento dinámico de Solaris

Traducciones Stable (estables)

Aunque un traductor proporciona la posibilidad de convertir información en una estructura de datos estable, no resuelve necesariamente todos los problemas de estabilidad que se pueden producir al traducir los datos. Por ejemplo, si la expresión de entrada para una operación de traducción en sí misma hace referencia a datos no estables, el programa escrito en D resultante tampoco será estable porque la estabilidad del programa siempre se computa como el mínimo de estabilidad de las instrucciones y expresiones acumuladas del programa escrito en D. Por lo tanto, en ocasiones es necesario definir una expresión de entrada estable para un traductor, con el objeto de poder construir programas estables. El mecanismo en línea de D se puede usar para facilitar este tipo de traducciones estables.

La biblioteca procfs.d de DTrace proporciona las variables curlwpsinfo y curpsinfo descritas anteriormente como traducciones estables. Por ejemplo, la variable curlwpsinfo es en realidad un elemento inline declarado de la siguiente manera:

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

La variable curlwpsinfo se define como una traducción en línea de la variable curthread, un puntero a la estructura de datos Private (privada) del núcleo que representa a un subproceso para convertirlo en el tipo lwpsinfo_t Stable (estable). El compilador D procesa este archivo de biblioteca y almacena en la antememoria la declaración inline, lo que hace que curlwpsinfo aparezca como cualquier otra variable de D. La instrucción #pragma que sigue a la declaración se usa para restablecer explícitamente los atributos del identificador curlwpsinfo como Stable/Stable/Common (Estable/Estable/Común), enmascarando así la referencia a curthread en la expresión en línea. Esta combinación de funciones de D permite a los programadores de D usar curthread como origen de una traducción segura que los elementos coincidentes de Sun puedan actualizar con los cambios correspondientes en la implementación de Solaris.