I informatikk er et bibliotek , eller mer sjelden et bibliotek , et sett med forhåndsdefinerte funksjoner eller datastrukturer designet for å kobles til et program gjennom en passende lenke. Koblingen kan være statisk eller dynamisk; i det andre tilfellet snakker vi om dynamisk koblingsbibliotek ("dynamisk koblingsbibliotek").
Begrepet bibliotek kommer fra en feilaktig leksikalsk transponering av det engelske biblioteket (bokstavelig talt, library ), men det er nå så utbredt i fagfolks vokabular at det aksepteres som en mulig oversettelse.
Formålet med programvarebibliotekene er å gi en samling av grunnleggende enheter klare til bruk eller gjenbruk av kode , og unngår at programmereren må omskrive de samme funksjonene eller datastrukturene hver gang og dermed forenkle utviklings- og vedlikeholdsoperasjoner. Denne funksjonen passer derfor inn i den bredere konteksten av 'kodekall' innenfor programmer og applikasjoner og finnes på nesten alle språk. De viktigste fordelene ved å bruke en slik tilnærming er følgende:
Noen referanser i et program eller biblioteksmodul er lagret i en relativ eller symbolsk form som ikke kan løses før alle koder og biblioteker er tildelt endelige statiske adresser. Flytting er prosessen med å justere disse referansene og gjøres av linkeren eller lasteren . Generelt kan ikke reposisjonering utføres på individuelle biblioteker fordi adressene i minnet kan variere avhengig av programmet som bruker dem og de andre bibliotekene de er kombinert med. Den posisjonsuavhengige koden unngår referanser til absolutte adresser og krever derfor ikke omposisjonering.
Nesten alle programmeringsspråk støtter konseptet bibliotek, og mange inkluderer standardiserte biblioteker (ofte kalt standardbibliotekene for det aktuelle språket): det er et sett med funksjoner og/eller datastrukturer som lar deg løse de vanligste programmeringsproblemene vanlig. For eksempel har mange programmeringsspråk et matematisk bibliotek, som lar deg utføre eksponentiering, beregning av logaritmer og så videre; I / O-funksjoner; funksjoner og datastrukturer for å administrere samlinger av objekter og andre. Java og Dotnet har et mangfold av biblioteker ( pakker ) for de mest varierte funksjonene, som kan importeres og aktiveres i utviklingsmiljøet.
Standardbiblioteker, sammenlignet med ikke-standardiserte, tillater enklere portabilitet av applikasjonene som utnytter dem; faktisk er hver kompilatorprodusent pålagt å inkludere en viss implementering av standardbibliotekene; dette betyr at bibliotekene potensielt støttes av alle plattformer som det finnes en spesifikk kompilator for. Omvendt kan det hende at et ikke-standardbibliotek ikke støttes på et bestemt system.
Når kobling gjøres mens du oppretter en kjørbar eller annen objektfil, er det kjent som statisk kobling eller tidlig kobling . I dette tilfellet gjøres koblingen vanligvis av en linker, men den kan også gjøres av kompilatoren. Et statisk bibliotek , også kjent som et arkiv , er ment å være statisk koblet. Opprinnelig var det bare statiske biblioteker. Statisk kobling må gjøres når moduler rekompileres.
Alle moduler som kreves av et program er noen ganger statisk koblet og kopiert inn i den kjørbare filen. Denne prosessen og den resulterende frittstående filen er kjent som statisk programkonstruksjon . En statisk konstruksjon krever kanskje ikke ytterligere flytting hvis virtuelt minne brukes og randomisering av adresserom [1] ikke er ønsket .
Et delt bibliotek eller delt objekt er en fil som må deles av kjørbare og andre delte objektfiler. Moduler som brukes av et program, lastes fra individuelle delte objekter inn i minnet ved lastetid eller ved kjøretid, i stedet for å bli kopiert av en linker når den oppretter en enkelt monolitisk kjørbar fil for programmet. Et eksempel er Windows DLL-filene .
De fleste minidatamaskin- og stormaskinleverandører har startet prosjekter for å kombinere de to, og produsere et OOP-biblioteksformat som kan brukes hvor som helst. Slike systemer ble kjent som objektbiblioteker eller distribuerte objekter, hvis de støttet fjerntilgang (ikke alle gjorde det). COM fra Microsoft er et eksempel på et slikt system for lokal bruk. DCOM, en modifisert versjon av COM, støtter ekstern tilgang.
Klassebiblioteker er den grove OOP -ekvivalenten til de eldre typene kodebiblioteker. De inneholder klasser, som beskriver egenskaper og definerer handlinger (metoder) som involverer objekter. Klassebiblioteker brukes til å lage forekomster eller objekter med deres egenskaper satt til spesifikke verdier. I noen OOP-språk, for eksempel Java , er forskjellen tydelig, med klasser som ofte finnes i biblioteksfiler (som Javas JAR-filformat) og instansierte objekter som bare ligger i minnet (selv om det potensielt kan lagres i separate filer). I andre, for eksempel Smalltalk, er klassebiblioteker ganske enkelt utgangspunktet for et systembilde som inkluderer hele tilstanden til miljøet, klasser og alle instansierte objekter.
En annen løsning på bibliotekproblemet kommer fra å bruke helt separate kjørbare filer (ofte i en lett form) og kalle dem ved hjelp av en ekstern prosedyrekall (RPC) over et nettverk til en annen datamaskin.
Kodegenereringsbiblioteker er API-er på høyt nivå som kan generere eller transformere bytekode for Java . De brukes av aspektorientert programmering, noen rammeverk for datatilgang og for testing for å generere dynamiske proxy-objekter. De brukes også til å avskjære tilgang til felt [2] .
Systemet lagrer libfoo.aog filer libfoo.soi kataloger som /lib, /usr/libeller /usr/local/lib. Filnavn starter alltid med libog slutter med suffikset .a(arkiv, statisk bibliotek) eller av .so(delt objekt, dynamisk koblet bibliotek). Noen systemer kan ha flere navn for det dynamisk koblede biblioteket, med de fleste navnene for symbolske lenker til det gjenværende navnet; disse navnene kan inkludere hovedversjonen av biblioteket eller det fullstendige versjonsnummeret; for eksempel, på noen systemer libfoo.so.2vil dette være filnavnet for den andre store revisjonen av det dynamisk koblede bibliotekgrensesnittet libfoo. Filene .lasom noen ganger finnes i bibliotekkatalogene er libtool- arkiver , som ikke kan brukes av systemet som sådan.
Systemet arver de statiske bibliotekkonvensjonene fra BSD, med biblioteket lagret i en fil , og kan bruke dynamisk koblede .abiblioteker med stil (med suffikset i stedet ). De fleste biblioteker i macOS er imidlertid bygd opp av "rammeverk", plassert i spesielle kataloger kalt "bunter" som inneholder filene og metadataene som kreves av biblioteket. Et kalt rammeverk vil for eksempel bli implementert i en kalt bunt , som er den dynamisk koblede bibliotekfilen eller en symbolsk lenke til den dynamisk koblede bibliotekfilen i . .so.dylibMyFrameworkMyFramework.frameworkMyFramework.framework/MyFrameworkMyFramework.framework/Versions/Current/MyFramework
Dynamiske koblingsbiblioteker har vanligvis suffikset *.DLL, [3] selv om andre filnavnutvidelser kan identifisere dynamisk lenkede biblioteker for spesifikke formål, for eksempel *.OCXfor OLE-biblioteker. Grensesnittrevisjoner er kodet i filnavn eller abstrakt ved hjelp av COM-objektgrensesnitt. Avhengig av hvordan de er kompilert, *.LIBkan filer være statiske biblioteker eller representasjoner av dynamisk lenkelige biblioteker som kun trengs under kompilering, kjent som "importbiblioteker". I motsetning til UNIX-verdenen, som bruker forskjellige filutvidelser, .LIBmå du først vite om det er et vanlig statisk bibliotek eller et importbibliotek når du kobler til filen i Windows. I sistnevnte tilfelle må en fil .DLLvære tilstede under kjøring.
Et bibliotek er et sett med funksjoner spesialisert for et bestemt formål. Rammeverket (for eksempel Bootstrap ) er i stedet en ekte infrastruktur som tjener programmereren til å utvikle en applikasjon [4] .
Rammene og bibliotekene er begge skrevet kode som hjelper deg med å utføre noen vanlige oppgaver i mindre detalj. Et rammeverk reverserer programkontroll: det forteller utvikleren hva den trenger, et bibliotek gjør det ikke. Programmereren ringer biblioteket hvor og når han trenger det [5] .
jQuery er et JavaScript -bibliotek for nettapplikasjoner , distribuert som gratis programvare , distribuert under vilkårene i MIT-lisensen . Den ble opprettet med sikte på å forenkle valg, manipulering, hendelseshåndtering og animasjon av DOM- elementer i HTML - sider , samt forenkle bruken av AJAX -funksjonalitet , hendelseshåndtering og CSS -manipulasjon [6] .