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