Գրադարան (ծրագրավորում)

**Գրադարանը** ծրագրավորման մեջ ( library)՝  ենթածրագրերի կամ օբյեկտների հավաքածու է, որն օգտագործվում է ծրագրային ապահովման մշակման համար։
350px|աջից
Ծրագրավորման որաշ լեզուներում (օրինակ, Python- ում) նույնն է, ինչ մոդուլը, իսկ որոշներում ՝ մի քանի մոդուլներ։ Օպերացիոն համակարգի (ՕՀ) և կիրառական ծրագրերի տեսանկյունից գրադարանները լինում  են դինամիկ և ստատիկ։

«Ենթածրագրերի գրադարան» տերմինը, ըստ ամենայնի, առաջիններից մեկն է, որ հիշատակել են Մ. Ուիլկսը, Դ. Ուիլերը, Ս. Գիլը, որպես համակարգչում հաշվարկների կազմակերպման ձևերից մեկը։ Ըստ նրանց գրքի շարադրանքի` գրադարան ասելով հասկանում ենք «կարճ, նախապես պատրաստված ծրագրեր` առանձին, հաճախ հանդիպող (ստանդարտ) հաշվարկային գործողությունների համար»։

## Կոմպիլացվող ծրագրերի գրադարաններ
### Դինամիկ գրադարաններ
Դինամիկ գրադարանը մեքենայական կոդ պարունակող ֆայլ է։ Այն գործընթացի հիշողության մեջ է բեռնվում  օպերացիոն համակարգի ծրագրի բեռնիչի կամ գործընթաց ստեղծելու ժամանակ, կամ արդեն ընթացող գործընթացի պահանջով, այսինքն՝ դինամիկ ձևով։

Դինամիկ գրադարանների ֆայլերի ընդլայնումները տարբեր օպերացիոն համակարգերում ՕՀ։

Կախված նշանակությունից տարբերակվում են՝

*Գրադարաններ, որոնք օգտագործվում են մեկ ծրագրի կողմից և պարունակում են ծրագրի գործունեության համար կարևոր գործառույթներ։ Թերությունն այն է, որ գրադարանի բացակայության դեպքում ծրագիրը չի աշխատի։
*Գրադարաններ, որոնք օգտագործվում են մեկ ծրագրի կողմից և պարունակում են լրացուցիչ գործառույթներ։ Օրինակ՝  պլագինների գրադարաններն օգտագործվում են ծրագրի ֆունկցիոնալությունն ընդլայնելու համար։
*Ընդհանուր օգտագործման գրադարաններ (shared library): Պարունակում են ֆունկցիաներ, որոնք օգտագործվում են մի քանի ծրագրերի կողմից։ Կարող են բեռնավորվել ՕՀ հասցեների տարածքում (system library), հիշողությունը տնտեսելու նպատակով. Գրադարանի մեկ օրինակը կարող է օգտագործվել մի քանի գործընթացների միջոցով։
*Ծրագիրը գրելիս ծրագրավորողը միայն թարգմանիչին (կոմպիլյատորին կամ ինտերպրետատորին) պետք է մատնանշի դեպի գրադարան տանող ուղին և գործառույթի անվանումը։ Ծրագրի մեջ չեն ներառվի ոչ գործառույթի աղբյուրի տեքստը, ոչ էլ  այն գործարկող կոդը։

Առավելություններ՝

*Հիշողության ծավալի տնտեսում մի քանի գործընթացների կողմից մեկ գրադարանի օգտագործման հաշվին։
*Սխալների ուղղման հնարավորություն (պարզապես փոխարինելով գրադարանի ֆայլը և վերագործարկելով գործարկվող ծրագրերը)։
	
Թերություններ՝
	
*Կիրառական ծրագրավորման ինտերֆեյսի API-ի (application programming interface) խախտման հնարավորությունը (գրադարանում փոփոխություններ կատարելու ժամանակ գոյություն ունեցող ծրագրերը կարող են դադարեցնել աշխատանքը),
*դինամիկ գրադարանների հակասական տարբերակներ (տարբեր ծրագրեր կարող են սպասել գրադարանների տարբեր տարբերակների),
*Տարբեր գործընթացների ընթացքում միևնույն հասցեներում նույն գործառույթների հասանելիություն (պարզեցնում է խոցելի տեղերի շահագործումը. խնդիրը լուծելու համար ստեղծվել է PIC (position-independent code):

### Ստատիկ գրադարաններ
*Ստատիկ գրադարանը սկզբնական կոդով ֆայլ է կամ օբյեկտային ֆայլ, որը նախատեսված է ստեղծման փուլում ծրագիր ներմուծելու համար։
Սկզբնական կոդի տեսքով տարածվող գրադարանները կոմպիլյատորի միջոցով վերափոխվում են օբյեկտային ֆայլերի։ Այնուհետև կապողը միացնում է գրադարանների օբյեկտային ֆայլերը և ձեր ծրագրի օբյեկտային ֆայլերը մեկ իրականացվող ֆայլում։

Օրինակ, սկզբնական տեքստերում տարածվում են

*գրադարաններ Fortran լեզվի համար,
*Boost գրադարան C++ լեզվի համար

Այն գրադարանները, որոնք տարածված են օբյեկտային ֆայլերի տեսքով, արդեն իսկ պատրաստ են միացման համար։ Այնուհետև կապողը միացնում է գրադարանների օբյեկտային ֆայլերը և ձեր ծրագրի օբյեկտային ֆայլերը՝ իրականացվող ֆայլի ստեղծման ընթացքում։

Օբյեկտային ֆայլերի ստատիկ գրադարանների ընդլայնումները տարբեր օպերացիոն համակարգերում ՕՀ։

Որոշ կոմպիլացվող ծրագրավորման լեզուների ստանդարտ գրադարանները (Fortran, Pascal, C, C ++ և այլն) տարածվում են օբյեկտային ֆայլերի տեսքով։

Առավելությունները.

*բոլոր անհրաժեշտ գործառույթները ներառված են մեկ գործարկվող ֆայլում։

Թերությունները.

*գործարկվող ֆայլն ավելի շատ տարածք է զբաղեցնում կրիչում և հիշողությունում,
*եթե գրադարանում սխալներ հայտնաբերվեն, անհրաժեշտ է բոլոր ծրագրերի կրկնակի հավաքում։

### Ինտերպրետացվող լեզուների գրադարաններ
Գրադարանը ֆայլ է, որը պարունակում է կամ ինտերպրետացվող լեզվի կոդ կամ բայթկոդ վիրտուալ մեքենայի համար։

Օրինակ, Python լեզվի գրադարանները կարող են տարածվել կամ սկզբնական կոդով ֆայլերի տեսքով (ընդլայնում «`py`»), կամ բայթկոդ (bytecode) ֆայլերի տեսքով(ընդլայնում «`pyc`», «c» տառը վերցված է compiled բառից)։

## Գրականություն
Николай Джосьютис. C++ Стандартная библиотека. Для профессионалов = The C++ Standart Library. A Tutorial and Reference. — СПб.: Питер, 2004. — 730 с. — ISBN 5-94723-635-4.

## Ծանոթագրություններ

Կատեգորիա:Ծրագրային գրադարաններ
Կատեգորիա:Ծրագրավորման լեզուներ
Կատեգորիա:Ծրագրավորում
Կատեգորիա:Օպերացիոն համակարգեր