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

Գրադարանը ծրագրավորման մեջ (անգլ.՝  library)՝  ենթածրագրերի կամ օբյեկտների հավաքածու է, որն օգտագործվում է ծրագրային ապահովման մշակման համար։

Ծրագրավորման որաշ լեզուներում (օրինակ, 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.


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