Knjižnica (računalništvo)

Iz Wikipedije, proste enciklopedije
Jump to navigation Jump to search

Knjižnica (angleško library) ali tudi programska knjižnica je v računalništvu zbirka podprogramov (oziroma funkcij) za pomoč pri izdelavi oziroma razvoju programske opreme. Knjižnice vsebujejo kodo in podatke, ki se jih da uporabiti v neodvisnih programih. Zaradi tega se programi izmenjujejo in spreminjajo modularno. Nekatere izvršne datoteke so lahko oboje, samostojni programi ali knjižnice, vendar večina knjižnic ni izvršljivih.

Da se dobi izvršno datoteko v določenem izvršnem zapisu strojne kode, je treba uporabiti programsko opremo povezovalnika (angl. linker), katerega naloga je povezati ustrezne datoteke, ki vsebujejo objektno kodo, s programskimi knjižnicami. Na ta način se dobi izvršno datoteko programske opreme v specifičnem izvršnem zapisu (bodisi ELF, PE, Mach-o, MZ, NE in podobno).

Glede na to ali se podprogrami knjižnic neposredno implementirajo v algoritem programske opreme ali pa se samo določijo poti, kjer lahko algoritem ustrezne subrutine eksterno pridobi, se loči proces statičnega in dinamičnega povezovanja.

V primeru dinamičnega povezovanja, ki je pogostejše, programska oprema povezovalnika poveže objektne datoteke in programske knjižnice dinamično; specificira kje točno se zunaj izvorne kode programske opreme nahajajo ustrezne subrutine. Algoritem se po potrebi oziroma glede na tok izvajanja nato sklicuje na eksterne subrutine v programskih knjižnicah, ki se nahajajo nekje na pomnilniškem mediju. Dinamično povezovanje ima določene prednosti in slabosti. Prednost opredeljuje kompleksnost oziroma velikost končne programske opreme – ta je manjša, saj se ustrezne funkcije in subrutine nahajajo eksterno. Slabost predstavlja odvisnost od zunanjih vmesnikov API oziroma programskih knjižnic.

Pri statičnem povezovanju povezovalna programska oprema veže ustrezne programske knjižnice in objektne datoteke statično. Definicije subrutin, ki so opredeljene v knjižnicah, implementira v sam algoritem programske opreme. Proces omogoča prednost neodvisnosti od zunanjih programskih knjižnic, slabost pa predstavlja premosorazmerna večja velikost programske opreme.

Večina sodobnih operacijskih sistemov ima za velik del sistemskih opravil knjižnice. Tako je skoraj vsa koda, ki jo uporabljajo sodobni programi, zapisana v knjižnicah.

Pregled[uredi | uredi kodo]

Knjižnice se lahko razdeli na to kako se izmenjujejo, kako so povezane in kdaj so povezane.

Zgled je skupina knjižnic za .NET, ki vsebuje knjižnice, ki temelijo na ogrodju .NET. Takšne knjižnice se lahko uporabljajo v drugih knjižnicah in aplikacijah za .NET, ne glede na to, v katerem jeziku so napisane. V osnovi so takšne knjižnice prenosljive med različimi platformami zaradi prenosljivosti različnih izvedb ogrodja .NET.

Zgodovina[uredi | uredi kodo]

Ženska dela ob predalniku, ki vsebuje knjižnico podprogramov na vretenih luknjanega traku za računalnik EDSAC.

Leta 1947 sta Goldstine in von Neumann razpravljala, da bi bilo uporabno izdelati »knjižnico« podprogramov za njuno delo na elektronskem Stroju IAS, zgodnjem računalniku, ki v tistem času še ni deloval.[1] Predstavljala sta si fizično knjižnico posnetkov na magnetne žice, kjer bi vsaka žica hranila ponovno uporabno računalniško kodo.[2]

Po von Neumannovih zamislih je Wilkes skupaj s svojo skupino skonstruiral računalnik EDSAC. Predalnik luknjanega traku je vseboval knjižnico podprogramov za ta računalnik.[3] Programe za EDSAC so sestavljali glavni program in zaporedje podprogramov, kopiranih iz knjižnice podprogramov.[4] Leta 1951 je skupina objavila prvi učbenik programiranja Priprava programov za elektronski digitalni računalnik (The Preparation of Programs for an Electronic Digital Computer), kjer so bile podrobnosti o tvorjenju in namenu knjižnice.[5]

COBOL je leta 1959 vseboval »primitivne zmožnosti za knjižnični sistem«,[6] vendar jih je Jean Sammet v retrospektivi opisal kot »neprimerne pripomočke knjižnice«.[7]

JOVIAL je imel komunikacijski vložek (communication pool (COMPOOL)), v grobem knjižnico zaglavnih datotek.

Drugi veliki doprinos k modernemu konceptu knjižnice je prišel v obliki inovacije podprogramov v FORTRANu. FORTRANovi podprogrami se lahko prevedejo neodvisno drug od drugega, vendar njegov prevajalnik ni imel povezovalnika. Tako je bilo pred uvedbo modulov v jeziku Fortran-90 preverjanje tipov med FORTRANovimi[a] podprogrami nemogoče.[8]

Do sredine 1960-ih so bile na razpolago knjižnice kopij in makrov. S priljubljenostjo družine osrednjih računalnikov IBM System/360 so postale običajne tudi knjižnice, ki so vsebovale druge vrste besedilnih elementov, na primer sistemske parametre.

Simula je bil prvi jezik objektno usmerjenega programiranja, njegovi razredi pa so bili skoraj istovetni modernemu konceptu, kakor se rabi v jezikih, kot so java, C++ in C#. Koncept razreda v jeziku Simula je bil tudi prednik paketa (package) v Adi in modula v jeziku Modula-2.[9] Čeprav so jih izvirno razvili leta 1965, se lahko razredi Simule vključijo v datoteke knjižnice in dodajo v času prevajanja.[10]

Opombe[uredi | uredi kodo]

  1. To je bilo možno že pred tem, na primer med podprogrami v Adi.

Sklici[uredi | uredi kodo]

Viri[uredi | uredi kodo]

  • Campbell-Kelly, Martin (september 2011), "In Praise of 'Wilkes, Wheeler, and Gill'", Communications of the ACM, 54 (9): 25–27, doi:10.1145/1995376.1995386
  • Goldstine, Herman Heine (31. december 2008). The Computer from Pascal to von Neumann. Princeton: Princeton University Press. doi:10.1515/9781400820139. ISBN 978-1-4008-2013-9.
  • Goldstine, Herman Heine; von Neumann, John (1947). Planning and coding of problems for an electronic computing instrument (Report). Inštitut za višji študij. str. 3, 21–22. OCLC 26239859. verjetno bo zelo pomembno razviti široko »knjižnico« podprogramov
  • Wexelblat, Richard (1981). History of Programming Languages. ACM Monograph Series. New York, NY: Academic Press (podružnica Harcourt Brace). str. 274. ISBN 0-12-745040-8.
  • Wilkes, Maurice Vincent (1951). The EDSAC Computer. 1951 International Workshop on Managing Requirements Knowledge. IEEE. doi:10.1109/afips.1951.13.
  • Wilkes, Maurice Vincent; Wheeler, David John; Gill, Stanley (1951). The Preparation of Programs for an Electronic Digital Computer. Addison-Wesley. str. 45, 80–91, 100. OCLC 641145988.
  • Wilson, Leslie B.; Clark, Robert G. (1988). Comparative Programming Languages. Wokingham, Anglija: Addison-Wesley. str. 126. ISBN 0-201-18483-4.