オブジェクトにはさまざまな変更を加えることができます。これらの変更は、単純に次の 2 つのグループに分類することができます。
互換性のある変更。これらの変更は付加的です。今まで使用できたインタフェースがすべてそのままの状態で残されます。
互換性のない変更。これらの変更は既存インタフェースを変更します。そのインタフェースの既存ユーザーはそれを使用できないか、または動作が異なってきます。
次のリストは、共通のオブジェクト変更のいくつかを分類しています。
表 5–1 インタフェースの互換性の例
オブジェクトの変更 |
更新タイプ |
---|---|
シンボルの追加 |
互換性あり |
シンボルの削除 |
互換性なし |
「非」 varargs(3EXT) 関数への引数の追加 |
互換性なし |
関数からの引数の削除 |
互換性なし |
関数への、または外部定義としてのデータ項目のサイズまたは内容の変更 |
互換性なし |
バグ修正または関数の内部拡張 (オブジェクトの意味プロパティーを変更しない場合) |
互換性あり |
バグ修正または関数の内部拡張 (オブジェクトの意味プロパティーを変更する場合) |
互換性なし |
シンボルを追加すると、割り込みが原因で、互換性のない変更が生じる可能性があります。新しいシンボルが、アプリケーションによるそのシンボルの使用法と矛盾する場合があります。ただし、通常ソースレベル名前空間の管理が使用されるため、実際にはこのような互換性のない変更はめったにありません。
互換性のある変更は、生成されるオブジェクトの内部でバージョン定義を管理することにより調整できます。互換性のない変更は、新しい外部バージョン管理名によって新しいオブジェクトを作成することにより調整できます。これらのバージョン管理手法を使用すると、アプリケーションの選択的割り当てを行うことができます。バージョン管理手法を使用すれば、実行時の正しいバージョン割り当てを検査することもできます。これらの 2 つの手法については、次の節でさらに詳しく説明します。