Solaris 動的トレースガイド

第 41 章 バージョン管理

第 39 章安定性では、DTrace 機能を使って、自作の D プログラムの安定性属性を確認する方法を学びました。適切な安定性属性を持つ D プログラムを作成したあと、このプログラムを特定の「バージョン」の D プログラミングインタフェースに結合できます。D インタフェースのバージョンとは、D コンパイラから提供される型、変数、関数、定数、およびトランスレータから成る特定のセットに適用される、ラベルのようなものです。特定のバージョンの D プログラミングインタフェースへの結合を指定すると、次回以降のバージョンの DTrace でこのプログラムを再コンパイルする際、新しいバージョンの D プログラミングインタフェースで定義されるプログラム識別子と、今回ユーザーが定義したプログラム識別子の衝突が起こらなくなります。持続的なスクリプト (第 15 章スクリプトの作成を参照) としてインストールする D プログラムや、階層化ツールで使用したい D プログラムには、バージョンの結合を指定します。

バージョンとリリース

D コンパイラは、「バージョン文字列」を使って、特定のソフトウェアリリースに対応する型、変数、関数、定数、およびトランスレータから成るセットにラベルを付けます。バージョン文字列は、10 進整数をピリオドで区切った形式の文字列です。メジャーリリースは「x」、マイナーリリースは「x.y」、マイクロリリースは「x.y.z」の形式をとります。バージョンを比較するときは、バージョン文字列の整数を左から順に比較します。一番左の整数の値が大きいほうが新しいバージョンです。一番左の整数の値が同じである場合は 1 つ右の整数、この整数の値も同じである場合はもう 1 つ右の整数が比較されます。バージョン文字列の一部が指定されていない場合、その部分にはゼロが入っているものと解釈して比較されます。

DTrace のバージョン文字列は、Sun のインタフェースのバージョンの標準的な命名法に従って決定されます。attributes(5) を参照してください。D プログラミングインタフェースに変更が加えられると、バージョン文字列が更新されます。以下の表に、DTrace のバージョン文字列と、このバージョン文字列で表される DTrace ソフトウェアリリースの意味をまとめます。

表 41–1 DTrace リリースバージョン

リリース 

バージョン 

意味 

メジャー 

x.0

メジャーリリースでは、通常、主要機能が追加され、さまざまな「標準」の改訂 (互換性のない場合もある) への対応が盛り込まれます。まれに、「標準」インタフェースや「安定」インタフェースが変更されたり落とされたり置換されたりする場合もあります (第 39 章安定性を参照)。D プログラミングインタフェースの初期バージョンは「1.0」です。

マイナー 

x.y

x.0 や以前のバージョンと比較して、新しいマイナーリリース (y はゼロ以外) に通常含まれるのは、主要でない機能の追加のほか、「標準」インタフェースや「安定」インタフェースの互換性のある変更、「発展中」インタフェースの互換性のない場合もある変更、「変更の可能性あり」インタフェースのおそらく互換性のない変更などです。これらの変更には、新しい組み込み D 型、変数、関数、定数、およびトランスレータが含まれることがあります。また、マイナーリリースでは、以前に「廃止」というラベルが付けられたインタフェースがサポートされなくなることがあります (第 39 章安定性を参照)。

マイクロ 

x.y.z

マイクロリリース (z はゼロ以外) では、以前のリリースとインタフェースの互換性が保たれる一方で、通常、バグ修正、パフォーマンス拡張機能、ハードウェアの追加サポートなどが含まれます。 

通常、D プログラミングインタフェースの新しいバージョンでは、以前のバージョンで提供されていた機能の上位集合が提供されます。ただし、削除された「廃止」インタフェースは例外です。

バージョン管理オプション

デフォルトでは、dtrace -s または dtrace -P-m-f-n-i などを指定してコンパイルした D プログラムは、D コンパイラが提供する最新の D プログラミングインタフェースバージョンに結合されます。現在の D プログラミングインタフェースのバージョンを確認するには、dtrace -V コマンドを実行します。


$ dtrace -V
dtrace: Sun D 1.0
$

特定のバージョンの D プログラミングインタフェースに結合したい場合は、適切なバージョン文字列に version オプションを設定します。その他の DTrace オプションと同じく (第 16 章オプションとチューニング可能パラメータを参照)、バージョンオプションを設定するときは、コマンド行で dtrace -x を実行します。


# dtrace -x version=1.0 -n 'BEGIN{trace("hello");}'

#pragma D オプション構文を使って、D プログラムソースファイルにオプションを設定することもできます。

#pragma D option version=1.0

BEGIN
{
	trace("hello");
}

#pragma D option 構文を使ってバージョン結合を要求する場合は、この指令を D プログラムファイルの最上部、その他の宣言やプローブ節よりも前に置く必要があります。バージョン結合引数が有効なバージョン文字列でない場合、または D コンパイラから提供されていないバージョンを参照している場合、エラーメッセージが出力され、コンパイルは失敗します。このため、バージョン結合機能を使えば、古いバージョンの DTrace 上で D スクリプトが実行された場合に、わかりやすいエラーメッセージを出して失敗させることもできます。

D コンパイラは、プログラムの宣言や節をコンパイルする前に、インタフェースのバージョンに合った D 型、関数、定数、およびトランスレータから成るセットを、コンパイラ名前空間にロードします。したがって、プログラム内で定義されている変数、型、およびトランスレータに加えて、このプログラムからアクセスできる識別子、型、およびトランスレータから成るセットも、ユーザーが指定したバージョン結合オプションによって制御されます。バージョン結合されていると、プログラムのソースコード内の宣言と矛盾する (したがってコンパイルエラーの原因となる) 識別子やトランスレータの定義が含まれるような新しいインタフェースが、D コンパイラによってロードされることはありません。将来のバージョンの DTrace が提供するインタフェースと矛盾しない識別子名を選択する方法については、「識別子名とキーワード」を参照してください。

プロバイダのバージョン管理

DTrace プロバイダが提供するインタフェース (プローブとプローブ引数) は、D コンパイラが提供するインタフェースとは異なり、D プログラミングインタフェースや、先ほど説明したバージョン結合オプションの影響を受けません。使用可能なプロバイダインタフェースは、オペレーティングシステムカーネル内の DTrace ソフトウェアにコンパイル済みの計測機能をロードするときに決定されます。これらは、使用している命令セットアーキテクチャ、オペレーティングプラットフォーム、プロセッサ、Solaris システムにインストールされているソフトウェア、および現在のセキュリティ権限によって異なります。D コンパイラと DTrace ランタイムは、D プログラム節内のプローブを検査し、D プログラムから要求されたプローブが使用できない場合はエラーメッセージを返します。これらの機能は、D プログラミングインタフェースのバージョンとは異なる概念に基づいています。これは、DTrace プロバイダが、D プログラム内の定義と矛盾するインタフェースをエクスポートしないからです。言い換えると、D では、プローブを有効化することはできても定義することはできず、プローブ名は、その他の D プログラム識別子とは別の名前空間に格納されます。

配布される DTrace プロバイダは、Solaris リリースによって異なります。該当するリリース用の『Solaris 動的トレースガイド』を参照してください。このマニュアルの各プロバイダごとの章には、変更点や新機能の説明も含まれます。Solaris システム上で使用できるプロバイダとプローブについて調べるには、dtrace -l を使用します。プロバイダは、DTrace の安定性属性を使って、インタフェースにラベルを付けます。ユーザーは、DTrace の安定性報告機能 (第 39 章安定性を参照) を使って、D プログラムで使用されているプロバイダインタフェースが将来の Solaris リリースでも引き続き提供されるか、あるいは変更されるかを判断できます。