安定 ABI (Stable Appliction Binary Interface)
*********************************************

伝統的に Python の C API はリリース毎に変更されます。多くの変更はソー
ス互換性を保っていて、既存の API を変更したり取り除いたりすることはあ
りません (ただし、いくつかの API は、一旦非推奨と指定された後に、削除
されます)。

残念ながら API の互換性はバイナリレベルの互換性 (ABI) までには適用され
ません。その理由は主に、構造体フィールドの新規追加や型の変更によって、
たとえ API は壊れなくても ABI は壊れてしまうからです。その結果として、
拡張モジュールを Python のリリース毎に再コンパイルする必要があります
(Unix でその影響を受けるインターフェイスが使用されていない場合は例外か
もしれませんが)。また、 Windows では、何らかの pythonXY.dll とリンクし
ている拡張モジュールは、再コンパイルした後に新しい dll とリンクし直す
必要があります。

Python 3.2 以降では、安定 ABI を保証するための API サブセットが宣言さ
れています。拡張モジュールでこのAPI ("limited API" と呼ばれます) を使
うには "Py_LIMITED_API" を定義してください。拡張モジュールの細部は大部
分隠蔽され、代わりに再コンパイルなしにバージョン 3.x (x>=2) 上で動くモ
ジュールがビルドされます。

いくつかのケースでは、安定 ABI を新しい関数で拡張する必要があります。
これらの新しい API を使用したい拡張モジュールは、 "Py_LIMITED_API" に
サポートしたい最小の Python バージョンの "PY_VERSION_HEX" の値  (API
と ABI のバージョニング を参照) を設定してください。 (例えば Python3.3
なら "0x03030000")。 モジュールは後続のすべての Pythonリリースで動作し
ますが、 (シンボルが存在しないため) 古いリリースでは動作しません。

Python 3.2 からは limited API は **PEP 384** に文書化されています。 C
API のドキュメントでは、 limited API の一部でない API は、 "Not part
of the limited API" とマークされています。
