Libreria (software)

insieme di funzioni predisposte per essere collegate ad un programma software
(Reindirizzamento da Libreria grafica)

In informatica, una libreria, o più raramente biblioteca, è un insieme di funzioni o strutture dati predefinite e predisposte per essere collegate ad un programma software attraverso un opportuno collegamento. Il collegamento può essere statico o dinamico; nel secondo caso si parla di dynamic-link library ("libreria a collegamento dinamico").

Il termine libreria nasce da una fallace trasposizione lessicale dell'inglese library (letteralmente, biblioteca), ma ormai è così diffuso nel vocabolario dei professionisti da essere accettato quale possibile traduzione.

Scopo ed utilizzoModifica

  Lo stesso argomento in dettaglio: Riuso di codice.

Lo scopo delle librerie software è fornire una collezione di entità di base pronte per l'uso ovvero riuso di codice, evitando al programmatore di dover riscrivere ogni volta le stesse funzioni o strutture dati e facilitando così le operazioni di sviluppo e manutenzione. Questa caratteristica si inserisce quindi nel più vasto contesto del 'richiamo di codice' all'interno di programmi e applicazioni ed è presente in quasi tutti i linguaggi. I vantaggi principali derivanti dall'uso di un simile approccio sono i seguenti:

  • Si può separare la logica di programmazione di una certa applicazione da quella necessaria per la risoluzione di problemi specifici, quali il calcolo di funzioni matematiche o la gestione di collezioni;
  • Le entità definite in una certa libreria possono essere riutilizzate da più applicazioni;
  • Si può modificare la libreria separatamente dal programma, senza limiti alla potenziale vastità di funzioni e strutture dati man mano disponibili nel tempo.

TrasferimentoModifica

Alcuni riferimenti in un programma o in un modulo libreria sono memorizzati in una forma relativa o simbolica che non può essere risolta finché a tutto il codice e alle librerie non vengono assegnati indirizzi statici finali. Il riposizionamento è il processo di regolazione di questi riferimenti e viene eseguito dal linker o dal caricatore. In generale, il riposizionamento non può essere effettuato sulle singole librerie perché gli indirizzi in memoria possono variare a seconda del programma che le utilizza e delle altre librerie con cui sono combinate. Il codice indipendente dalla posizione evita i riferimenti a indirizzi assoluti e quindi non richiede il riposizionamento.

TipologieModifica

Quasi tutti i linguaggi di programmazione supportano il concetto di libreria e moltissimi includono delle librerie standardizzate (spesso chiamate proprio librerie standard del linguaggio in questione): si tratta di un insieme di funzioni e/o strutture dati che permettono di risolvere i problemi di programmazione più comuni. Ad esempio, molti linguaggi di programmazione hanno una libreria matematica, che consente di eseguire elevamenti a potenza, il calcolo dei logaritmi e così via; funzioni di I/O; funzioni e strutture dati per la gestione di collezioni di oggetti e altre. Java e Dotnet dispongono di una moltitudine di librerie (package) per le più svariate funzioni, importabili e attivabili nell'ambiente di sviluppo.

Le librerie standard, rispetto a quelle non-standard, consentono una più agevole portabilità degli applicativi che le sfruttano; infatti, ogni produttore di compilatori è tenuto a includere una certa implementazione delle librerie standard; questo significa che le librerie sono potenzialmente supportate da tutte le piattaforme per le quali esiste un compilatore specifico. Viceversa, una libreria non-standard potrebbe non essere supportata su un certo sistema.

Librerie staticheModifica

Quando il collegamento viene eseguito durante la creazione di un eseguibile o di un altro file oggetto, è noto come collegamento statico o collegamento anticipato. In questo caso, il collegamento viene solitamente eseguito da un linker, ma può anche essere eseguito dal compilatore. Una libreria statica, nota anche come archivio, è pensata per essere collegata staticamente. In origine esistevano solo librerie statiche. Il collegamento statico deve essere eseguito quando vengono ricompilati i moduli.

Tutti i moduli richiesti da un programma a volte sono collegati staticamente e copiati nel file eseguibile. Questo processo e il file autonomo risultante è noto come costruzione statica del programma. Una costruzione statica potrebbe non richiedere ulteriori riposizionamenti se viene utilizzata la memoria virtuale e non si desidera la casualizzazione dello spazio degli indirizzi[1].

Librerie condivise o "dinamiche"Modifica

Una libreria condivisa o un oggetto condiviso è un file che deve essere condiviso da file eseguibili e altri file di oggetti condivisi. I moduli utilizzati da un programma vengono caricati da singoli oggetti condivisi in memoria in fase di caricamento o in fase di esecuzione, anziché essere copiati da un linker quando crea un singolo file eseguibile monolitico per il programma. Un esempio sono i file DLL di Windows.

Librerie di oggetti e classiModifica

La maggior parte dei fornitori di minicomputer e mainframe ha avviato progetti per combinare i due, producendo un formato di libreria OOP che potrebbe essere utilizzato ovunque. Tali sistemi erano noti come librerie di oggetti o oggetti distribuiti, se supportavano l'accesso remoto (non tutti lo facevano). COM di Microsoft è un esempio di un tale sistema per uso locale. DCOM, una versione modificata di COM, supporta l'accesso remoto.

Le librerie di classi sono l'equivalente approssimativo OOP dei vecchi tipi di librerie di codice. Contengono classi, che descrivono le caratteristiche e definiscono azioni (metodi) che coinvolgono oggetti. Le librerie di classi vengono utilizzate per creare istanze o oggetti con le loro caratteristiche impostate su valori specifici. In alcuni linguaggi OOP, come Java, la distinzione è chiara, con le classi spesso contenute nei file di libreria (come il formato di file JAR di Java) e gli oggetti istanziati che risiedono solo nella memoria (sebbene potenzialmente in grado di essere resi persistenti in file separati). In altri, come Smalltalk, le librerie di classi sono semplicemente il punto di partenza per un'immagine di sistema che include l'intero stato dell'ambiente, le classi e tutti gli oggetti istanziati.

Librerie remoteModifica

Un'altra soluzione al problema della libreria deriva dall'utilizzo di eseguibili completamente separati (spesso in una forma leggera) e dal chiamarli utilizzando una chiamata di procedura remota (RPC) su una rete a un altro computer.

Librerie di generazione del codiceModifica

Le librerie di generazione del codice sono API di alto livello in grado di generare o trasformare il codice byte per Java. Sono usati dalla programmazione orientata agli aspetti, alcuni framework di accesso ai dati e per i test per generare oggetti proxy dinamici. Sono anche usati per intercettare l'accesso al campo[2].

Denominazione dei fileModifica

Sistemi Unix-likeModifica

Il sistema archivia libfoo.ae file libfoo.so in directory come /lib, /usr/libo /usr/local/lib. I nomi dei file iniziano sempre con libe finiscono con un suffisso di .a(archivio, libreria statica) o di .so(oggetto condiviso, libreria collegata dinamicamente). Alcuni sistemi potrebbero avere più nomi per la libreria collegata dinamicamente, con la maggior parte dei nomi per collegamenti simbolici al nome rimanente; quei nomi potrebbero includere la versione principale della libreria o il numero di versione completo; ad esempio, su alcuni sistemi libfoo.so.2sarebbe il nome del file per la seconda revisione principale dell'interfaccia della libreria collegata dinamicamente libfoo. I file.la che a volte si trovano nelle directory della libreria sono archivi libtool, non utilizzabili dal sistema in quanto tale.

MacOSModifica

Il sistema eredita le convenzioni della libreria statica da BSD, con la libreria memorizzata in un file .a, e può utilizzare librerie .so collegate dinamicamente in stile (con invece il suffisso .dylib). La maggior parte delle librerie in macOS, tuttavia, sono costituite da "framework", collocati all'interno di directory speciali chiamate "bundle" che racchiudono i file e i metadati richiesti dalla libreria. Ad esempio, un framework chiamato MyFrameworkverrebbe implementato in un bundle chiamato MyFramework.framework, MyFramework.framework/MyFrameworkessendo il file di libreria collegato dinamicamente o un collegamento simbolico al file di libreria collegato dinamicamente in MyFramework.framework/Versions/Current/MyFramework.

Microsoft WindowsModifica

Le librerie a collegamento dinamico di solito hanno il suffisso *.DLL,[3] sebbene altre estensioni di nomi di file possano identificare librerie collegate dinamicamente per scopi specifici, ad esempio *.OCXper le librerie OLE. Le revisioni dell'interfaccia sono codificate nei nomi dei file o astratte utilizzando le interfacce degli oggetti COM. A seconda di come vengono compilati, i file*.LIB possono essere librerie statiche o rappresentazioni di librerie collegabili dinamicamente necessarie solo durante la compilazione, note come " librerie di importazione ". A differenza del mondo UNIX, che utilizza estensioni di file diverse, quando si collega al file .LIB in Windows bisogna prima sapere se si tratta di una normale libreria statica o di una libreria di importazione. In quest'ultimo caso, un file .DLL deve essere presente in fase di esecuzione.

Differenza tra libreria e frameworkModifica

 
Differenza Framework-libreria

Una libreria è un insieme di funzioni specializzate per un determinato scopo. Il framework (ad esempio Bootstrap) invece è una vera e propria infrastruttura che serve ad avvantaggiare il programmatore a sviluppare un'applicazione[4].

I framework e le librerie sono entrambi codice scritto che aiuta a eseguire alcune attività comuni in modo meno dettagliato. Un framework inverte il controllo del programma: dice allo sviluppatore di cosa ha bisogno, una libreria no. Il programmatore chiama la libreria dove e quando ne ha bisogno[5].

EsempioModifica

 
Logo JQuery

jQuery è una libreria JavaScript per applicazioni web, distribuita come software libero, distribuito sotto i termini della Licenza MIT. Nasce con l'obiettivo di semplificare la selezione, la manipolazione, la gestione degli eventi e l'animazione di elementi DOM in pagine HTML, nonché semplificare l'uso di funzionalità AJAX, la gestione degli eventi e la manipolazione dei CSS[6].

NoteModifica

  1. ^ Christian Collberg, John H. Hartman, Sridivya Babu, Sharath K. Udupa, SLINKY: Static Linking Reloaded, su usenix.org, Department of Computer Science, University of Arizona, 2003. URL consultato il 17 marzo 2016 (archiviato il 23 marzo 2016).
  2. ^ Code Generation Library, su sourceforge.net, Source Forge. URL consultato il 3 marzo 2010 (archiviato il 12 gennaio 2010).
    «Byte Code Generation Library is high level API to generate and transform JAVA byte code. It is used by AOP, testing, data access frameworks to generate dynamic proxy objects and intercept field access.»
  3. ^ Christine Bresnahan e Richard Blum, LPIC-1 Linux Professional Institute Certification Study Guide: Exam 101-400 and Exam 102-400, John Wiley & Sons, 27 aprile 2015, p. 82, ISBN 978-1-119-02118-6. URL consultato il 3 settembre 2015 (archiviato il 24 settembre 2015).
    «Linux shared libraries are similar to the dynamic link libraries (DLLs) of Windows. Windows DLLs are usually identified by .dll filename extensions.»
  4. ^ (EN) Software Framework vs Library, su GeeksforGeeks, 2 gennaio 2017. URL consultato il 15 febbraio 2021.
  5. ^ (EN) Jason Gomez, Libraries vs. Frameworks — What’s the Difference?, su Medium, 20 gennaio 2020. URL consultato il 15 febbraio 2021.
  6. ^ (EN) JS Foundation- js.foundation, License | jQuery Foundation, su jquery.org. URL consultato il 15 febbraio 2021.

Voci correlateModifica

Altri progettiModifica

Controllo di autoritàLCCN (ENsh2008001447 · GND (DE4121521-7 · J9U (ENHE987007542436505171
  Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica