Solaris 動的トレースガイド

安定した翻訳

トランスレータは、情報を安定したデータ構造に変換する機能を備えています。しかし、データの翻訳時に発生するあらゆる安定性の問題を解決できるわけではありません。たとえば、xlate 操作の入力式そのものが、変更の可能性があるデータを参照している場合、結果の D プログラムも変更される可能性があります。これは、プログラムの安定性は、常に、蓄積された D プログラム文と式の最小限の安定性として計算されるためです。そのため、安定したプログラムを作成するためには、トランスレータに安定した入力式を定義する必要があります。D インライン機構は、「安定した翻訳」を促進するために使用されます。

procfs.d ライブラリは、以前に安定した翻訳として紹介した curlwpsinfo 変数と curpsinfo 変数を提供します。たとえば、curlwpsinfo 変数は、実際には次のように inline 宣言されます。

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

curlwpsinfo 変数は、curthread 変数、スレッドを表すカーネルの非公開データ構造のポインタ、安定した lwpsinfo_t 型により、インライン翻訳として定義されています。D コンパイラは、このライブラリファイルを処理し、inline 宣言をキャッシュに格納します。これにより、curlwpsinfo の見た目はその他の D 変数と同じになります。この宣言の後ろの #pragma 文は、curlwpsinfo 識別子の属性を明示的に「Stable/Stable/Common」にリセットし、インライン式に含まれる curthread の参照をマスクします。この D 機能の組み合わせにより、D プログラマは、Solaris 実装に変更が加えられるたびに更新される可能性のある curthread を、翻訳ソースとして安全に使用することができます。