Bosh sahifa Wiki Library

Library

Library — boshqa dasturlar tomonidan qayta foydalanish uchun yaratilgan funksiya, class, type va resurslar to‘plami. Library odatda mustaqil foydalanuvchi workflow’ini boshqarmaydi; application uning APIlarini chaqiradi.

Library source code, bytecode, static binary yoki dynamic binary shaklida tarqatilishi mumkin.

Asosiy vazifa

Library umumiy funksionallikni qayta yozmasdan ishlatishga yordam beradi.

Misollar:

Library foydalanuvchiga public API beradi, ichki implementationni yashiradi.

Static library

Static library link vaqtida executable ichiga qo‘shiladi.

Formatlar platformaga qarab farq qiladi.

Afzalliklari:

  • deploymentda alohida library talab qilinmaydi;
  • aniq code versiyasi;
  • runtime symbol topish kamroq;
  • optimization imkoniyati.

Kamchiliklari:

Dynamic library

Dynamic library runtime loader orqali ulanadi.

Afzalliklari:

  • disk va RAMni bo‘lishish;
  • alohida yangilash;
  • plugin;
  • kichik executable.

Kamchiliklari:

Header va declaration

C/C++ ekotizimida header public function va type declarationlarini beradi.

Compiler header orqali chaqiriqni tekshiradi, linker esa binary symbolni topadi.

Header va binary versiyasi mos bo‘lmasa compile muvaffaqiyatli, runtime yoki link xato bo‘lishi mumkin.

API

Library API:

ni belgilaydi.

Yaxshi API common use-case’ni sodda, noto‘g‘ri ishlatishni qiyin qiladi.

ABI

Native dynamic library uchun ABI muhim.

Library update’da:

  • symbol;
  • calling convention;
  • structure layout;
  • vtable;
  • exception;
  • compiler runtime

mos bo‘lishi kerak.

ABI buzilsa major library version o‘zgarishi mumkin.

Framework bilan farqi

Libraryda application libraryni chaqiradi.

Frameworkda asosiy control flowni framework boshqaradi va application callback yoki extension nuqtalarini beradi.

Bu Inversion of Control bilan bog‘liq.

Chegara qat’iy emas; ko‘p paketda ikkalasi ham bor.

Package bilan farqi

Library funksional code.

Package esa libraryni tarqatish va versionlash birligi.

Bitta package:

o‘z ichiga olishi mumkin.

Standard library

Dasturlash tili yoki runtime bilan birga keladigan asosiy library.

Unda:

mavjud bo‘lishi mumkin.

Standard library versiyasi ko‘pincha runtime versiyasi bilan bog‘langan.

Third-party library

Tashqi ishlab chiquvchi yaratgan library dependency sifatida qo‘shiladi.

Tanlashda:

kabi xususiyatlar muhim.

Header-only library

Ba’zi C++ library faqat headerda implementation beradi.

Template kod uchun bu odatiy.

Afzalligi — alohida linking talab qilinmaydi.

Kamchiligi — compile vaqti, binary code takrorlanishi va implementationning public bo‘lishi.

Shared state

Library global cache, thread pool yoki singleton saqlashi mumkin.

Bu:

muammolariga olib kelishi mumkin.

Lifecycle hujjatlashtiriladi.

Thread safety

Library API:

  • thread-safe;
  • reentrant;
  • immutable;
  • external synchronization talab qiladi

degan qoidaga ega.

Bir object thread-safe, lekin global konfiguratsiya thread-safe emasligi mumkin.

Memory ownership

Library buffer yoki object qaytarsa, kim bo‘shatishi aniq bo‘lishi kerak.

Native API:

  • caller-allocated;
  • library-allocated;
  • reference counted;
  • opaque handle

modelidan foydalanishi mumkin.

Allocator chegarasini buzish heap corruptionga sabab bo‘ladi.

Error handling

Library xatoni:

  • exception;
  • result type;
  • error code;
  • null;
  • callback;
  • future rejection

orqali qaytaradi.

Xato ichida sabab, context va retry mumkinligi bo‘lishi kerak.

Library processni oddiy recoverable xatoda o‘zi tugatmasligi ma’qul.

Configuration

Library global environmentdan yashirin config olish o‘rniga explicit option qabul qilishi mumkin.

Bu test va bir processda bir nechta instance uchun qulay.

Defaultlar hujjatlashtiriladi.

Versioning

Library public API o‘zgarganda compatibility boshqariladi.

O‘zgarishlar:

Semantik versiyalash keng qo‘llanadi, ammo compatibility contract alohida hujjat talab qiladi.

Deprecation

Eski API darhol o‘chirilmaydi.

Deprecation:

  • warning;
  • replacement;
  • migration guide;
  • olib tashlash versiyasi

bilan beriladi.

Juda uzoq compatibility ichki murakkablikni oshiradi.

Documentation

Library hujjati:

ni qamrab oladi.

Faqat function signature yetarli emas.

Testing

Library:

bilan tekshiriladi.

Consumer projectlar bilan compatibility test foydali.

Security

Library application processi huquqida ishlaydi.

Zaif dependency butun applicationga ta’sir qiladi.

Security boshqaruvi:

Diagnostika

Library muammosida:

tekshiriladi.

Bir processda bir libraryning ikki nomos versiyasi yuklanishi noaniq xatolar keltirishi mumkin.

Initialization va shutdown

Library background thread, native handle yoki connection pool yaratsa, lifecycle API beradi. Initializationni bir necha marta chaqirish, forkdan keyingi holat va process shutdown tartibi hujjatlashtiriladi. Yopilmagan global resurs test va hot reloadda muammo tug‘diradi.

Bog‘liq tushunchalar

API, ABI, Static library, Dynamic library, Package, Framework, Dependency, Linker, Standard library, Versioning