Application Binary Interface (ABI) — kompilyatsiya qilingan dastur qismlari operatsion tizim, kutubxona va bir-biri bilan binary darajada qanday muloqot qilishini belgilaydigan qoidalar majmuasi. ABI source API’dan farqli ravishda register, xotira joylashuvi va object formatini ham qamrab oladi.
Chaqiruv kelishuvi
Calling convention argumentlar qaysi register yoki stack slotga joylanishi, return qiymat qayerda kelishi va qaysi registerlarni caller yoki callee saqlashini belgilaydi. Stack alignment, variadic function, struct return va exception unwinding ham shu kelishuvga bog‘liq.
Ma’lumot joylashuvi
Data layout integer hajmi, endianness, pointer width, struct field alignment va paddingni aniqlaydi. Ayni C declaration turli ABI’da boshqa sizeof qiymat berishi mumkin. Binary protokol yoki disk format uchun native structni to‘g‘ridan-to‘g‘ri yozish portable emas.
Binary qoidalar
Object file format, symbol naming, relocation turi, dynamic linking va thread-local storage modeli ham ABI tarkibiga kiradi. C++ name mangling, vtable layout va exception runtime compiler oilalari orasida compatibilityni cheklashi mumkin.
Moslik
API source darajada o‘zgarmagan bo‘lsa ham field tartibini almashtirish, virtual method qo‘shish yoki type hajmini o‘zgartirish ABI break yaratishi mumkin. Shared library semantic versioning va symbol versioning orqali compatible hamda incompatible o‘zgarishlarni boshqaradi.
Til chegarasi
Foreign language binding ikkala tomondagi ABI mosligini talab qiladi. extern "C" C++ name manglingni o‘chiradi, lekin struct layout yoki ownershipni avtomatik hal qilmaydi. Architecture, OS va compiler optionlar bir xil target triple doirasida tekshiriladi.
ABI nazorati
ABI sinovida exported symbol ro‘yxati, type layout dump, calling convention va oldingi binary bilan runtime compatibility tekshiriladi. Faqat yangi source bilan qayta kompilyatsiya qilish yetarli emas: eski consumer binary aynan yangi libraryga ulanishi sinovdan o‘tadi.
ABI hujjati architecture va OS release bilan versiyalanadi. Toolchain upgrade oldidan public headerlardan baseline dump olinadi, keyin symbol va layout farqi CI’da ko‘rsatiladi. Qasddan qilingan incompatible o‘zgarish migration qaydi va major versiya bilan chiqariladi.
+## Amaliy boshqaruv
Application Binary Interface uchun eng muhim muvozanat aniqlik, resurs sarfi va compatibility orasidadir. argument registerlari, stack alignment va struct padding holatlari real tizimda platformaga qarab farq qilishi mumkin. Implementatsiya fast path bilan birga konservativ fallbackga ega bo‘ladi: kerakli shart isbotlanmasa optimizatsiya yoki avtomatik bog‘lash cheklanadi. Bu yondashuv tezlikni bir oz kamaytirishi mumkin, ammo binary yoki runtime semantikasini saqlaydi.
Muhim xato sinfi — eski consumer binary bilan layout yoki mangling mos kelmasligi. Bunday holatda vosita optimistik taxmin bilan davom etmaydi: zarur bo‘lsa sekinroq, lekin xavfsiz yo‘l tanlanadi yoki aniq diagnostika bilan jarayon to‘xtatiladi. Xatoni qayta ishlab bo‘ladigan qilish uchun target, optionlar, kirish identifikatori va tegishli metadata qayd etiladi. Foydalanuvchi ma’lumoti xom shaklda loglanmaydi; hash, build-id yoki cheklangan kontekst yetarli bo‘lgan joyda shular ishlatiladi.
Sifat nazorati ABI dump hamda oldingi release binarysi bilan integration sinovi orqali bajariladi. Testlar normal misol bilan cheklanmay, bo‘sh kirish, minimal va maksimal o‘lcham, mos kelmaydigan versiya, yo‘qolgan komponent hamda parallel holatlarni qamraydi. Natijaning to‘g‘riligi performance o‘lchovidan alohida baholanadi. Keyin vaqt, xotira, artefakt hajmi yoki runtime kechikishi kabi mavzuga mos metrikalar baseline bilan solishtiriladi. Regressiya topilsa, minimal takrorlanuvchi holat saqlanib, keyingi release uchun doimiy testga aylantiriladi.
Bog‘liq tushunchalar
calling convention, data layout, object file, symbol, binary compatibility, API