API i wersjonowanie ABI
***********************


Stałe wersji czasu budowania
============================

CPython udostępnia swój numer wersji w poniższych makrach. Należy
pamiętać, że odpowiadają one wersji, z użyciem której kod został
zbudowany. Zobacz :"Py_Version", aby sprawdzić wersję używaną w czasie
działania.

Więcej informacji na temat stabilności API i ABI w różnych wersjach
można znaleźć na stronie C API Stability.

PY_MAJOR_VERSION

   "3" w "3.4.1a2".

PY_MINOR_VERSION

   "4" w "3.4.1a2".

PY_MICRO_VERSION

   "1" w "3.4.1a2".

PY_RELEASE_LEVEL

   "a" w "3.4.1a2". Może to być "0xA" dla wersji alfa, "0xB" dla
   wersji beta, "0xC" dla wersji kandydującej do wydania lub "0xF" dla
   wersji finalnej.

PY_RELEASE_SERIAL

   "2" w "3.4.1a2". Zero dla ostatecznych wydań.

PY_VERSION_HEX

   Numer wersji Pythona zakodowany w pojedynczej liczbie całkowitej.
   Zobacz "Py_PACK_FULL_VERSION()", aby poznać szczegóły kodowania.

   Używaj to do porównań liczbowych, na przykład "#if PY_VERSION_HEX
   >= ...".

Te makra są zdefiniowane w Include/patchlevel.h


Wersja środowiska uruchomieniowego
==================================

const unsigned long Py_Version
    * Część stabilnego ABI od wersji 3.11.*

   Numer wersji środowiska uruchomieniowego Pythona zakodowany w
   pojedynczej stałej całkowitoliczbowej. Zobacz
   "Py_PACK_FULL_VERSION()", aby poznać szczegóły kodowania. Zawiera
   ona wersję Pythona używaną w czasie działania.

   Używaj to do porównań liczbowych, na przykład "if (Py_Version >=
   ...)".

    Dodane w wersji 3.11.


Makra pakowania bitowego
========================

uint32_t Py_PACK_FULL_VERSION(int major, int minor, int micro, int release_level, int release_serial)
    * Część stabilnego ABI od wersji 3.14.*

   Zwraca podaną wersję, zakodowaną jako pojedyncza 32-bitowa liczba
   całkowita o następującej strukturze:

   +--------------------+---------+------------------+-------------+---------------+--------------+
   | Argument           | Liczba  | Maska bitowa     | Przesunięc  | Przykładowe wartości         |
   |                    | bitów   |                  | ie bitowe   |                              |
   |                    |         |                  |             +---------------+--------------+
   |                    |         |                  |             | "3.4.1a2"     | "3.10.0"     |
   |                    |         |                  |             |               |              |
   |====================|=========|==================|=============|===============|==============|
   | *major*            | 8       | "0xFF000000"     | 24          | "0x03"        | "0x03"       |
   +--------------------+---------+------------------+-------------+---------------+--------------+
   | *minor*            | 8       | "0x00FF0000"     | 16          | "0x04"        | "0x0A"       |
   +--------------------+---------+------------------+-------------+---------------+--------------+
   | *micro*            | 8       | "0x0000FF00"     | 8           | "0x01"        | "0x00"       |
   +--------------------+---------+------------------+-------------+---------------+--------------+
   | *release_level*    | 4       | "0x000000F0"     | 4           | "0xA"         | "0xF"        |
   +--------------------+---------+------------------+-------------+---------------+--------------+
   | *release_serial*   | 4       | "0x0000000F"     | 0           | "0x2"         | "0x0"        |
   +--------------------+---------+------------------+-------------+---------------+--------------+

   Na przykład:

   +---------------+--------------------------------------+-------------------+
   | Wersja        | "Py_PACK_FULL_VERSION" argumenty     | Zakodowana wersja |
   |===============|======================================|===================|
   | "3.4.1a2"     | "(3, 4, 1, 0xA, 2)"                  | "0x030401a2"      |
   +---------------+--------------------------------------+-------------------+
   | "3.10.0"      | "(3, 10, 0, 0xF, 0)"                 | "0x030a00f0"      |
   +---------------+--------------------------------------+-------------------+

   Bity spoza zakresu w argumentach są ignorowane. Oznacza to, że
   makro można zdefiniować następująco:

      #ifndef Py_PACK_FULL_VERSION
      #define Py_PACK_FULL_VERSION(X, Y, Z, LEVEL, SERIAL) ( \
         (((X) & 0xff) << 24) |                              \
         (((Y) & 0xff) << 16) |                              \
         (((Z) & 0xff) << 8) |                               \
         (((LEVEL) & 0xf) << 4) |                            \
         (((SERIAL) & 0xf) << 0))
      #endif

   "Py_PACK_FULL_VERSION``to przede wszystkim makro, przeznaczone do
   użycia w dyrektywach ``#if", ale jest ono również dostępne jako
   wyeksportowana funkcja.

    Dodane w wersji 3.14.

uint32_t Py_PACK_VERSION(int major, int minor)
    * Część stabilnego ABI od wersji 3.14.*

   Równoważne "Py_PACK_FULL_VERSION(major, minor, 0, 0, 0)". Wynik ten
   nie odpowiada żadnemu wydaniu Pythona, ale jest przydatny w
   porównaniach numerycznych.

    Dodane w wersji 3.14.
