Biblioteca informàtica: diferència entre les revisions

Contingut suprimit Contingut afegit
m Bot: corregint pronoms (1) i puntuació (7)
Cap resum de modificació
Línia 1:
{{FR|data=maig de 2013}}
[[Fitxer:Ogg vorbis libs and application dia.svg|thumb|277px|Il·lustració d'una aplicació que utilitza la llibreriaprogramoteca <code> libvorbisfile.so </code> per reproduir un fitxer [[Ogg Vorbis]].]]
DinsEn l'entornel camp de l'[[Informàtica|ciències de la computacióinformàtica]], una '''Bibliotecabiblioteca informàtica'''<ref>[[TERMCAT]]</ref> (de l'anglès ''Librarysoftware library'') o '''programoteca''' <ref>[[TERMCAT]]</ref> és un conjunt de [[subrutina|subprogrames]] utilitzats per desenvolupar [[programari]]. Les '''llibreriesbiblioteques''' contenen codi i dades, que proporcionen serveis a programes independents, és a dir, passen a formar part d'aquests. Això permet que el codi i les dades es comparteixin i es puguin modificar de forma [[modularitat|modular]]. Alguns programes executables poden ser alhora programes independents i llibreriesprogramoteques, però la majoria d'aquestes no són executables. Executables i llibreriesprogramoteques fan referències (trucades enllaços) entre si a través d'un procés conegut com a ''' enllaç ''', que generalment és realitzat per un [[programari]] anomenat [[enllaçador]].
 
La majoria dels [[sistema operatiu|sistemes operatius]] moderns proporcionen llibreriesprogramoteques que implementen la majoria dels serveis del sistema. D'aquesta manera, aquests serveis es converteixen en una "'' matèria primera ''" que qualsevol aplicació moderna espera que el sistema operatiu ofereixi. Com a tal, la major part del codi utilitzat per les aplicacions modernes s'ofereix en aquestes llibreriesbiblioteques.
 
== Nota terminològica ==
HabitualmentTot sovint es fa servir erròniament el termebarbarisme '''llibreria''' per referir-se a una llibreria'''programoteca''' o '''biblioteca informàtica''', per la similitud amb l'original anglès ''library''., Totsperò dosaquest termes,ús de la paraula ''llibreria'' ien català és un absurd. En la seva entrada per a ''bibliotecallibreria'', sónl'[[Enciclopèdia correctesCatalana]] segonsrefereix lesl'usuari definicionsal terme ''biblioteca'' per l'accepció informàtica (vegeu llibreria,<ref>{{Citar web|url = http://www.enciclopedia.cat/fitxa_v2enciclop%C3%A8dies/gran-enciclop%C3%A8dia-catalana/EC-GEC-0269031.jspxml?NDCHECs.book=0269031gec&BATEs.q=llibreria#.UlKIcFMbX2Y | títol = Definició de ''llibreria'' | autor = [[Enciclopèdia_Catalana | Enciclopèdia catalana]]}}</ref> bibliotecai biblioteca<ref>{{Citar web|url = http://www.enciclopedia.cat/fitxa_v2enciclop%C3%A8dies/gran-enciclop%C3%A8dia-catalana/EC-GEC-0222967.jspxml?NDCHEC=0222967&BATEs.q=biblioteca#.UlKJzlMbX2Y |títol = Definició de ''biblioteca''|autor = [[Enciclopèdia_Catalana| Enciclopèdia catalana]]}}</ref>). deEl laterme [[Enciclopèdia"llibreria" Catalana|Enciclopèdiano catalanaapareix en aquella accepció ni al [[TermCat]], encara(una quecerca endel termesterme formals,anglès l'accepció"software correctalibrary" ésdona ''biblioteca'',com perquèa ésúnic laresultat traduccióen correctacatalà deel terme "''library'programoteca'''"),<ref>[http://www.termcat.cat/ca/Cercaterm/ mentreUna quecerca eldel terme anglès per"software ''llibreria''library" ésdona ''Bookstore''com oa ''bookúnic shop''resultat (literalment:en ''botigacatalà el terme "programoteca".]</ref> ni al [[Diccionari de llibresl'Institut d'Estudis Catalans]] ([[DIEC]]).<ref>[http://dlc.iec.cat/results.asp?txtEntrada=llibreria&operEntrada=0 Accepcions pel terme "llibreria" al DIEC]</ref> Per tant, oel terme correcte és ''Bookshelfprogramoteca'' (prestatgeria o moble''biblioteca perinformàtica'', guardarla llibres,primera llibreriaperquè oés llibreter).una Tambéparaula ésideal habituali referir-s'hinostrada ambper descriure el termeconcepte, di l'origenúltima anglosaxóperquè ''toolkit''és (conjunt,la equip,traducció maletí,lògica caixa,i estoig,correcta jocde (kit)''software dlibrary''eines).
 
També és habitual referir-s'hi amb el terme d'origen anglosaxó ''toolkit'' (conjunt, equip, maletí, caixa, estoig, joc (kit) d'eines).
Així, tot i que el terme ''llibreria'' s'hagi difós en àmbits informals, no és estrictament correcte, en el pitjor dels casos s'hauria d'utilitzar el terme '''llibreter'''.
 
La proposta del TermCat del terme neològic '''PROGRAMOTECA''' és altament recomanable, ja que ens dona una sola paraula per a definir un concepte inconfusible, mentre que en el terme "biblioteca informàtica" se'n necessiten dues, de paraules, per distingir-la definitivament de la biblioteca convencional, la de llibres. En cap cas no s'hauria d'usar ni el barbarisme "llibreria" ni "llibreter", ja que aquesta última paraula significa, clar i català, la persona que porta una llibreria, és a dir, una botiga on es venen llibres.
 
== Història ==
Els primers conceptes de programació similars a les llibreriesprogramoteques intentaven separar les definicions de [[dada]] s de la implementació del programa. El concepte ''' COMPOOL ''' (Communication Pool) va ser popularitzat per [[Jovial]] el 1959, encara que va prendre la idea prestada del programari dels grans sistemes [[SAGE]]. Seguint els principis de les ciències de la computació d '"'' separació de problemes ''" (aïllar problemes petits fàcils d'abordar) i "'' ocultació d'informació ''", "el propòsit del COMPOOL és permetre l'intercanvi de dades del sistema entre diversos programes, proporcionant una descripció centralitzada dels mateixos "(Wexelblat 1981:369).
 
[[COBOL]] va incloure un "''sistema primitiu sistema de llibreries programoteques''" l'any 1959 (Wexelblat 1981:274), però [[Jean Sammet]] les va descriure retrospectivament com a "'' recursos insuficients de llibreria programoteques''" (Wexelblat 1981:258).
 
Una altra de les grans contribucions al concepte modern de llibreriaprogramoteca va ser la innovació de [[subrutina|subprograma]] de [[FORTRAN]]. Aquests poden ser compilats amb independència els uns dels altres, el compilador no té un [[enllaçador]], de manera que la revisió de tipus entre els subprogrames resulta impossible (Wilson et. Al 1988:126).
 
Finalment, s'ha de parlar de la influència que [[Simula|Simula 67]] va tenir en el concepte de 'llibreriaprogramoteca'. ''Simula'' és el primer llenguatge de [[Programacióprogramació orientada a objectes|programació orientat a objectes]], i elsles seusseves [[Classe (informàtica)|classes]] són gairebé idèntiques que el concepte actual que s'utilitza en [[Llenguatge de programació Java|Java]], [[C++]] i [[C Sharp|C #]]. El concepte de classe de ''Simula'' va ser també l'origen del "'' paquet ''" a [[Llenguatge de programació Ada|Ada]] i el "'' mòdul ''" de [[Modula-2]] (Wilson et. Al 1988: 52). Tot i haver estat desenvolupat enel 1965, les classes de ''Simula'' podien ser incloses en fitxers de llibreriaprogramoteca i afegides en temps de compilació (Wexelblat 1981:716).
 
== Tipus ==
 
=== LlibreriesProgramoteques estàtiques ===
{{AP|Enllaç estàtic}}
 
Històricament, les llibreriesbiblioteques informàtiques només podien ser estàtiques. Una llibreriaprogramoteca estàtica, també conegutconeguda com a '' fitxer '', consisteix en un conjunt de rutines que es copien en una aplicació pel [[compilador]] o el [[enllaçador]], produint fitxers amb [[codi objecte]] i un fitxer executable independent. Aquest procés, i el fitxer executable, es coneix com una [[construcció estàtica]] de l'aplicació objectiu. La direcció real, les referències per a salts i altres crides a rutines s'emmagatzemen en una direcció relativa o simbòlica, que no pot resoldre fins que tot el codi i les llibreriesprogramoteques són assignades a adreces estàtiques finals.
 
El L'enllaçador resol totes les adreces no resoltes convertint-les en direccions fixes o relocalitzar (des d'una base comuna) carregant tot el codi i les llibreriesprogramoteques en posicions de memòria en temps d'execució. Aquest procés de enllaçat pot durar fins i tot més temps que el procés de compilació, i ha de ser realitzat cada vegada que algun dels mòduls és recompilar. La majoria dels llenguatges compilats tenen llibreriaprogramoteca estàndard (per exemple, la [[llibreriabiblioteca estàndard de C]]), però els programadors també poden crear les seves pròpies llibreriesprogramoteques personalitzades. Els compiladors comercials proporcionen tant les llibreriesprogramoteques estàndard com les personalitzades.
 
Un [[enllaçador]] podenpot treballar sobre tipus específics de fitxers objecte, i per tant requereix tipus específics (compatibles) de llibreriesbiblioteques. Els fitxers objecte recopilats en una llibreriaprogramoteca es poden distribuir i utilitzar fàcilment. Un client, ja sigui un programa o una llibreriaprogramoteca de [[subrutinasubrutines]] s, accedeix a una llibreriaprogramoteca objecte referenciant-la només pel seu nom. El procés de d'enllaçat resol les referències buscant a les llibreriesbiblioteques de l'ordre donat. En general, no es considera un error si un nom pot trobar-se diverses vegades en un determinat conjunt de les llibreriesprogrmoteques.
 
=== LlibreriesProgramoteques dinàmiques ===
{{AP|Enllaç dinàmic}}
Enllaç dinàmic significa que les subrutines d'una llibreriaprogramoteca són carregades en un programa en temps d'execució, en lloc de ser enllaçades aen [[Compilador|temps de compilació]], i es mantenen com [[fitxer (Computació)|fitxers]] independents separats del fitxer executable del programa principal. El L'[[enllaçador]] realitza una mínima quantitat de treball en [[Compilador|temps de compilació]], enregistra quequines rutines de la llibreriabiblioteca necessita el programa i l'índex de noms o números de les rutines a la llibreriabiblioteca. La major part de la tasca de d'enllaçat es realitza en el moment en que l'aplicació es carrega (temps de càrrega, o ''loadtime'') o durant l'execució ([[temps d'execució]], o ''runtime''). El necessari codi enllaçat, cridat pel carregador, és de fet part del [[sistema operatiu]] subjacent. En el moment adequat el carregador localitza les llibreriesprogramoteques en el disc i afegeix les dades rellevants d'aquestes en l'espai de memòria del [[Procés (informàtica)|procés]].
 
Alguns sistemes operatius només poden enllaçar una llibreriaprogramoteca en temps de càrrega, abans que el procés comenci la seva execució, altres són capaços d'esperar fins després que el procés hagi començat a executar i enllaçar la llibreriabiblioteca només quan efectivament es fa referència a ella (és a dir, en [[temps d'execució]]). Això últim s'anomena "retard de càrrega". En qualsevol cas, aquesta llibreriabiblioteca és una llibreriabiblioteca enllaçada dinàmicament.
 
L'[[enllaç dinàmic]], per la seva naturalesa, té tan sols les limitacions establertes per les [[llicència de programari|llicències de programari]].
 
Els [[Connector (aplicació informàtica)|connectors]] són un d'ús comú deen les llibreriesprogramoteques enllaçades dinàmicament, quei són especialment útils quan unes llibreriesprogramoteques poden ser substituïdes per altres amb una interfície similar, però diferent funcionalitat. Es pot dir que un programari té una "arquitectura de ''plugin''" si utilitzeus'utilitzen llibreriesprogramoteques amb una funcionalitat bàsica amb la intenció que puguin ser substituïdes. No obstant això, l'ús de les llibreriesprogramoteques enllaçades dinàmicament en l'arquitectura d'una aplicació no vol dir necessàriament que puguin ser substituïdes.
 
El [[enllaç dinàmic]] es va desenvolupar originalment en els sistemes operatius [[Multics]] a partir de 1964. Es tractava d'una característica del MTS ([[Michigan Terminal System]]), construït a finals dels 60.<ref>{{citar ref|títol = A History of MTS|revista = Information Technology Digest|volum = 5|nombre = 5}}</ref> En [[Microsoft Windows]], les llibreriesbiblioteques enllaçades dinàmicament s'anomenen [[Bibliotecabiblioteca d'enllaç dinàmic|DLL]] (''dynamic-link library'' o biblioteca d'enllaç dinàmic).
 
==== Relocalització ====
Un dels problemes que el carregador ha de gestionar és que la localització real de les dades de la llibreriabiblioteca no es pot conèixer fins que l'executable i totes les llibreriesbiblioteques dinàmiques que s'han enllaçat han estat carregades en memòria. Això és degut a que les localitzacions en memòria depenen de quines llibreriesprogramoteques dinàmiques s'han carregat. No és possible dependre de la direcció absoluta de les dades en el programa, ni fins i tot a la llibreriaprogramoteca, ja que podrienpodria haversorgir capun conflicte deentre les diferents llibreriesprogramoteques: si dues d'elles utilitzessin les mateixes direccionsadreces o elsles seusseves adreces sees solaparansolaparen, seria impossible utilitzar totes dues al mateix programa.
 
No obstant això, en la pràctica, en molts dels sistemes les llibreriesprogramoteques no canvien freqüentment. Per tant, és possible calcular una adreça de càrrega probable per a cada llibreriaprogramoteca compartida en el sistema abans que sigui utilitzada, i emmagatzemar aquesta informació ena llibreriesprogramoteques i executables. Si cada llibreriaprogramoteca que és carregada és tractada així, llavors cadascuna d'elles serà carregada en direccions predeterminades, el que accelera el procés d'enllaç dinàmic. Aquesta optimització es coneix com [[Prebinding]] en Mac OS X i [[Prelinking]] a Linux.
Els desavantatges d'aquesta tècnica són el temps requerit de precàlculcàlcul preliminar de les direccionsadreces cada vegada que les llibreriesprogramoteques compartides canvien, la incapacitat d'utilitzar tècniques com la [[aleatorització dels espais d'adreces]], i el consum d'espai virtual d'adreces (un problema que queda mitigat per l'ús d'arquitectures de [[64 bits]], si més no en l'actualitat).
 
Un antic mètode era examinar el programa en temps de càrrega. Una vegada que totes les llibreriesprogramoteques fossin carregades, es reemplacenreemplaçaven totes les referències a dades a les llibreriesprogramoteques, amb punters a localitats de memòria apropiats. Al Windows 3.1 (i en alguns sistemes encastats com les calculadores Texas Instruments), les referències eren manejades com a llistes lligades, permetent la fàcil enumeració i reemplaçament. Ara, la majoria de les llibreriesprogramoteques dinàmiques lliguen una taula de símbols amb adreces en blanc dins del programa en temps de compilació. Totes les referències a codicodis o dades a la llibreriaprogramoteca passen a través d'aquesta taula. En temps de càrrega, la taula és modificada amb la direcció de les dades/codi pel linker. Aquest procés és lent i afecta significativament la velocitat dels programes que diuen contínuament a altres programes, tal com alguns ''scripts'' de ''shell''.
 
La llibreriaprogramoteca conté una taula de salts de tots els mètodes que conté, anomenats punts d'entrada. Les trucades dins de la llibreriaprogramoteca "salten al llarg" de la taula, buscant la ubicació del codi en memòria, ia continuació sol·licitant. Aquestes sol·licituds suposen un sobreesforçsobre-esforç, però el retard és habitualment tan petit que és menyspreable.
 
==== Localització de llibreriesprogramoteques en temps d'execució ====
Els enllaçadors/carregadors dinàmics tenen una funcionalitat molt àmplia. Alguns depenen de rutes explícites a les llibreriesprogramoteques emmagatzemades en els executables. Qualsevol canvi en la nomenclatura o el disseny del sistema de fitxers farà que aquests sistemes fallin. Normalment només s'emmagatzema en el executable el nom de la llibreriaprogramoteca (no la ruta), i el sistema operatiu el que proporciona el mecanisme per trobar la llibreriaprogramoteca en el disc mitjançant certs algorismes.
 
Una de les desavantatges de l'enllaç dinàmic és que el funcionament correcte dels executables depèn d'una sèrie de llibreriesprogramoteques emmagatzemades de forma aïllada. Si la llibreriaprogramoteca és esborrada, moguda o reanomenada, o si una versió incompatible de DLL és copiada en una ubicació que apareix abans en la ruta de cerca, el programa no es podrà carregar. Al Windows això es coneix en anglès com a ''DLL hell'' (en espanyol "Infern de DLL").
 
===== Sistemes Unix =====
La major part dels sistemes tipus [[Unix]] disposen d'una "ruta de cerca" que especifica els [[directori]] s del sistema de fitxers en què buscar les llibreriesprogramoteques dinàmiques. En alguns sistemes, la ruta per defecte és especificada en un fitxer de configuració, en altres, està codificada a foc (hard coded) al carregador dinàmic. Alguns formats de [[executable|fitxer executable]] trobareu directoris addicionals en els de buscar les llibreriesprogramoteques d'un determinat programa. Això pot ser normalment alterat per una [[variable d'entorn]], encara que és deshabilitat per a programes que tinguin [[setuid|setuid o setgid]], de manera que l'usuari no pot forçar a aquest programa a executar un codi arbitrari. És aconsellable que els desenvolupadors de llibreriesprogramoteques posin les seves llibreriesprogramoteques dinàmiques en directoris que es troben en la ruta de cerca per defecte. Per contra, això pot fer problemàtica la instal·lació de noves llibreriesprogramoteques, ja que fa que aquests directoris creixin molt fent complicada la seva gestió.
 
=== Llibreries remotes ===
Una altra solució al problema de les llibreriesprogramoteques és utilitzar executables completament separats (often in some lightweight form) i anomenar-les usant una trucada de procedència and call-los using a remote procedure callremota (RPC) sobre la xarxa a una altra ordinador
 
== Vegeu també ==
* [[LlibreriaBiblioteca d'algoritmes de geometria computacional]]
* [[C standard library]]