リンカーとライブラリ

インタフェースの互換性

オブジェクトにはさまざまな変更を加えることができます。これらの変更は、単純に次の 2 つのグループに分類することができます。

次のリストは、共通のオブジェクト変更のいくつかを分類しています。

表 5–1 インタフェースの互換性の例

オブジェクトの変更 

更新タイプ 

シンボルの追加 

互換性あり 

シンボルの削除 

互換性なし 

varargs(3HEAD) 関数への引数の追加

互換性なし 

関数からの引数の削除 

互換性なし 

関数への、または外部定義としてのデータ項目のサイズまたは内容の変更 

互換性なし 

バグ修正または関数の内部拡張 (オブジェクトの意味プロパティを変更しない場合) 

互換性あり 

バグ修正または関数の内部拡張 (オブジェクトの意味プロパティを変更する場合) 

互換性なし 

シンボルを追加すると、割り込みが原因で、新しいシンボルがアプリケーションによるそのシンボルの使用法と矛盾するなど、互換性のない変更が生じる可能性があります。ただし、通常ソースレベル名前空間の管理が使用されるため、実際にはこの可能性はめったにありません。

互換性のある更新は、バージョン定義を生成されたオブジェクトの内部に維持することにより調整できます。互換性のない変更は、新しい外部バージョン管理名によって新しいオブジェクトを作成することにより調整できます。これらのバージョン管理手法を使用すると、アプリケーションの選択的割り当てを行うことができます。バージョン管理手法を使用すれば、実行時の正しいバージョン割り当てを検査することもできます。これらの 2 つの手法については、次の節でさらに詳しく説明します。