Guia de rastreamento dinâmico Solaris

Traduções de Estável

Embora um tradutor forneça a habilidade de converter informações em uma estrutura de dados estável, ele não necessariamente resolve todos os problemas de estabilidade que podem surgir na tradução de dados. Por exemplo, se a expressão de entrada em uma operação xlate fizer referência a dados de Instável, o programa em D resultante também será Instável porque a estabilidade do programa sempre é calculada como a estabilidade mínima das declarações e expressões acumuladas dos programas em D. Portanto, às vezes é necessário definir uma expressão de entrada estável específica em um tradutor a fim de permitir que sejam construídos programas estáveis. O mecanismo in-line de D pode ser usado para facilitar essas traduções estáveis.

A biblioteca procfs.d do DTrace fornece as variáveis curlwpsinfo e curpsinfo descritas anteriormente como traduções estáveis. Por exemplo, a variável curlwpsinfo é realmente uma inline declarada da seguinte forma:

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

A variável curlwpsinfo é definida como uma tradução in-line da variável curthread, um ponteiro para a estrutura de dados Privada do kernel que representa um segmento, para o tipo Estável lwpsinfo_t. O compilador de D processa este arquivo de biblioteca e armazena em cache a declaração inline, fazendo com que curlwpsinfo apareça como qualquer outra variável de D. A instrução #pragma que segue a declaração é usada para redefinir explicitamente os atributos do identificador curlwpsinfo como Estável/Estável/Comum, mascarando a referência a curthread na expressão in-line. Esta combinação de recursos de D permite que os programadores de D usem curthread como a origem de uma tradução de uma forma segura, que pode ser atualizada pela Sun, coincidente com as alterações correspondentes na implementação do Solaris.