Bibliotek (programvare)

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ål og bruk

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:

Overfør

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.

Typer

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.

Statiske biblioteker

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 .

Delte eller "dynamiske" biblioteker

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 .

Objekt- og klassebiblioteker

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.

Eksterne biblioteker

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.

Kodegenerasjonsbiblioteker

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] .

Filnavn

Unix-lignende systemer

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.

MacOS

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

Microsoft Windows

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.

Forskjellen mellom bibliotek og rammeverk

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] .

Eksempel

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] .

Merknader

  1. ^ Christian Collberg, John H. Hartman, Sridivya Babu, Sharath K. Udupa, SLINKY: Static Linking Reloaded , på usenix.org , Department of Computer Science, University of Arizona , 2003. Hentet 17. mars 2016 ( arkivert 23. mars) 2016 ) .
  2. ^ Code Generation Library , på sourceforge.net , Source Forge . Hentet 3. mars 2010 ( arkivert 12. januar 2010) .
    "Byte Code Generation Library er høynivå API for å generere og transformere JAVA-bytekode. Den brukes av AOP, testing, datatilgangsrammeverk for å generere dynamiske proxy-objekter og avskjære felttilgang."
  3. ^ Christine Bresnahan og Richard Blum, LPIC-1 Linux Professional Institute Certification Study Guide: Exam 101-400 and Exam 102-400 , John Wiley & Sons, 27. april 2015, s. 82, ISBN  978-1-119-02118-6 . Hentet 3. september 2015 ( arkivert 24. september 2015) .
    "Linux delte biblioteker ligner på de dynamiske koblingsbibliotekene (DLLs) i Windows. Windows DLL-er identifiseres vanligvis med .dll-filnavn.
  4. ^ Software Framework vs Library , på GeeksforGeeks , 2. januar 2017. Hentet 15. februar 2021 .
  5. ^ Jason Gomez , Libraries vs. Rammer – hva er forskjellen? , på Medium , 20. januar 2020. Hentet 15. februar 2021 .
  6. ^ JS Foundation- js.foundation , Lisens | jQuery Foundation , på jquery.org . Hentet 15. februar 2021 .

Relaterte elementer

Andre prosjekter