Biblioteka (računarstvo)

[desno|mini|277x277piksel|Ilustracija aplikacije koju koristi datoteka Vorbisove biblioteke za pokretanje [Ogg Vorbis datoteke]]

U računarstvu, **biblioteka** predstavlja kolekciju nepromjenjivih resursa koju koriste programski jezici, za razvoj softvera. Biblioteke mogu da sadrže podatke za podešavanje, dokumentaciju, pomoćne podatke, poruke u šablonima, neke stare kodove i potprograme, klase, vrijednosti ili tipske specifikacije. U IBM-ovom 360 i njegovim novijim verzijama, biblioteke su određene kao odvojene grupe podataka.

Biblioteka predstavlja kolekciju izvršavanja različitih ponašanja, napisanih u okviru programskih jezika. Pod "ponašanje" misli se na dobro definiran pristup uz pomoć kojeg se uvodi ponašanje. Ovo znači da dok god razvijeniji programi koriste biblioteku za pravljenje sistemskih poziva, nije potrebno ponovo pisati iste sistemske pozive više puta. Pored toga, ponašanje omogućava ponovnu upotrebu od strane više nezavisnih programa. Program uvodi bibliotekom osigurano ponašanje preko mehanizma datog programa. Na primjer, u jednostavnom imperativnom programskom jeziku kao što je C, ponašanje u biblioteci se poziva korištenjem C funkcije pozivanja. Ono što razlikuje poziv u biblioteci od drugih funkcija istog programa, jeste način na koji je kod organiziran u sistemu.

*Kod* biblioteke je organiziran na takav način da se može koristiti od strane više različitih programa koji nemaju nikakve veze jedan sa drugim, dok je *kod* dio programa organiziran tako da se može koristiti samo od strane jednog programa. Ova razlika može dovesti do hijerarhijske notacije kada program brzo raste, kao što je slučaj sa programom koji je sačinjen od više miliona linija koda. U ovom slučaju, postoje biblioteke koje se ponovo koriste od strane manjih nezavisnih dijelova velikog programa. Korisnik jedino mora da zna pristup, ali ne i unutrašnje detalje biblioteke.

Cilj biblioteke je da omogući ponovno korištenje ponašanja. Kada program pozove biblioteku, on pridobije ponašanje te biblioteke, tako da nema potrebe da program sam uvodi ponašanje. Biblioteke omogućavaju podjelu koda u modularnoj formi i laku distribuciju koda.

Ponašanje koje je implementirano od strane biblioteke, može biti povezano sa pozivajućim programom na različitim fazama programa. Ako se kodu biblioteke pristupa tokom pravljenja pozivajućeg programa, onda se biblioteka naziva statična biblioteka. Alternativa je da se napravi izvršavanje pozivajućeg programa i da se ono distribuira odvojeno od biblioteke. Ponašanje biblioteke je povezano nakon izvršavanja kao dio početnog procesa izvršavanja, ili na polovini izvršavanja. U ovom slučaju biblioteka se naziva dinamična biblioteka. Ona se može učitati i linkovati kao dio pripremanja programa za izvršavanje uz pomoć linkera. U drugom slučaju, na polovini izvršavanja, aplikacija može zatražiti učitavanje traženog modula.

Većina prevedenih programskih jezika ima standardnu biblioteku, iako programeri takođe mogu da kreiraju njihove vlastite biblioteke. Većina modernih softverskih sistema pravi biblioteke koje dozvoljavaju većinu sistemskih usluga. Takve biblioteke imaju modifikovane usluge koje traže moderne aplikacije. Većina kodova korištenih koje moderne aplikacije koriste napravljene su u takvim sistemima biblioteka.

## Historija 
Najraniji koncepti programiranja povezanih sa bibliotekama, nastojali su da odvoje definiciju podataka od sprovođenja programa. JOVIAL je učinio koncept komunikacionih "bazena" popularnim 1959. godine, iako je usvojio ideju iz većih sistemskih SAGE softvera. Prateći principe odvojenih problema i sakrivanje informacija u računarstvu, "Svrha komunikacionog bazena je bila da omogući dijeljenje podataka među programima, uz pomoć centraliziranja opisa podataka".

COBOL je također sadržao "jednostavne mogućnosti za sistemske biblioteke"  1959. godine.

Drugi veliki doprinos konceptu savremene biblioteke se ogleda u formi inovacije potprograma Fortrana. Njegovi potprogrami mogu biti sastavljeni tako da ne zavise jedan od drugog, ali kompajler nema linker. Samim tim, prije uvođenja modula u Fortran, provjera tipova između njegovih potprograma je bila nemoguća.

Simula 67 je bio uticajni prvi objektno orijentisani programski jezik, a njegove klase su bile približno slične modernom konceptu koji se koristi u Javi, C++, i C#. Klasni koncept Simule predstavlja noviju verziju paketa programskog jezika Ada i modula Module-2 Čak i kada je napravljen (1965. godine), njene klase su se mogle uključivati u datoteke biblioteka i dodavati u vrijeme kompajliranja.

## Također pogledajte 
* Ponovno korištenje koda
* Linker
* Loader
* Biblioteka dinamičnog povezivanja
* Objektni fajl
* Priključak
* Početno vezivanje
* Statična biblioteka
* Biblioteka izvršavanja
* Vizuelna komponenta biblioteke (VCL)
* Komponenta biblioteke za Cross platformu (CLY)
* Lazarus (IDE)
* C standardna biblioteka
* Biblioteka Java klase
* Okvirna biblioteka klasa
* Generičko programiranje (koritšeno od strane C++ standardne biblioteke)
* Odvojena metoda

## Reference 
## Literatura 
* 

## Vanjski linkovi 
* Shared Libraries - 'Linkers and Loaders' by John R. Levine
* Dynamic Linking and Loading - 'Linkers and Loaders' by John R. Levine
* Article ''Beginner's Guide to Linkers* by David Drysdale
* Article *Faster C++ program startups by improving runtime linking efficiency'' by Léon Bottou and John Ryland
* How to Create Program Libraries  by Baris Simsek
* LIB BFD - the Binary File Descriptor Library
* 1st Library-Centric Software Design Workshop LCSD'05 at OOPSLA'05 
* 2nd Library-Centric Software Design Workshop LCSD'06 at OOPSLA'06
* How to create shared library(with much background info) 
* Anatomy of Linux dynamic libraries

Kategorija:Računarske biblioteke
Kategorija:Tehnologija operativnih sistema