Compilazione, librerie, link

Compilazione

Il lavoro di programmazione non viene effettuato scrivendo direttamente le istruzioni in formato binario per la CPU, ma in un linguaggio di programmazione, piu' vicino alla logica del problema (e del programmatore) che a quella della macchina. Appositi programmi traducono il programma in linguaggio binario (compilatori). Il programma scritto in un linguaggio di programmazione si dice "source code", per distinguerlo dal programma in linguaggio binario o linguaggio macchina. Il programma compilato si dice "modulo oggetto" (object code)

Occorre distinguere fra i compilatori, che traducono un programma (o parti di esso) tutto in una volta, ed interpreti che traducono una istruzione per volta e poi la eseguono. I compilatori permettono di avere un programma piu' efficiente, gli interpreti una risposta immediata.

Un programma consiste in genere in parecchi files, anche scritti con linguaggi di programmazione diversi; questi vengono compilati singolarmente producendo tutta una serie di moduli oggetto. Molti compilatori permettono anche di dare comandi che, durante la compilazione di un file, provocano l'inserimento di un file diverso nel file che si sta compilando .

Librerie e Link

Funzioni di uso comune, gia' compilate, in forma di moduli oggetto, sono raggruppate in files, dette librerie.
Un programma, il linker, collega insieme tutti i moduli oggetto che costituiscono il programma con le librerie, creando un file "eseguibile", cioe' un programma pronto per essere eseguito.
Ci sono due tipi di librerie, ed ,in corrispondenza, due modi di integrarle con i moduli oggetto:

Le librerie a link dinamico in Windows hanno l'estensione "dll", in Linux "so".
In Linux la maggior parte dei programmi hanno  link dinamico, questo anche per seguire le specifiche della licenza GNU, sotto cui sono rilasciate le librerie principali. Uno dei problemi di Linux e' quello della coerenza delle librerie; l'evoluzione del sistema e delle librerie e' molto veloce, la retrocompatibilita' non e' garantita e, nonostante vari tentativi di standardizzazione, le diverse distribuzioni utilizzano versioni diverse delle librerie e le mettono in posti diversi del filesystem. I fornitori di software proprietario hanno quindi problemi a distribuire il loro software per Linux, ed in genere si limitano a supportare poche distribuzioni importanti.

Debuggers , strumenti di sviluppo

La messa a punto di un programma e' un lavoro lungo, ogni programma contiene sempre molti errori e toglierli tutti e' difficile. La fase di correzione (debugging) e' sempre molto piu' lunga della fase di scrittura del programma.
Per facilitare il debugging ci sono quindi appositi programmi che permettono di esaminare il programma mentre corre: durante l'esecuzione si possono guardare e cambiare i valori delle variabili, alterare il flusso delle istruzioni etc.

Esistono anche ambienti di sviluppo integrati, che contengono compilatori, debugger, help in linea, ed un'interfaccia grafica che aiuta. Esempi sono il "Visual Basic" o la piattaforma .net della Microsoft, od il programma kdevelop per il desktop Linux KDE.

Esecuzione

Un programma una volta passate le fasi di compilazione e link e' un file pronto per essere eseguito. L'esecuzione avviene tramite il sistema operativo, che deve preparare le tabelle che lo descrivono, caricarlo in memoria e passargli il controllo; tramite il sistema degli interrupt il sistema operativo esegue l'I/O per conto del programma.

Dal punto di vista dell'utente l'esecuzione si puo' ottenere in vari modi: si puo' dover cliccare su un'icona dell'interfaccia grafica, ed in ambiente Windows si clicca in genere sull'icona che rappresenta il programma; in ambiente Unix si scrive il nome del programma come un comando della interfaccia a caratteri (la shell). Un programma puo' anche essere fatto partire da un altro programma. Ci sono anche programmi che vengono fatti partire in modo automatico all'accensione della macchina.




Panoramica dei linguaggi

Ci sono moltissimi linguaggi di programmazione, nati in diversi momenti ed adatti a diversi scopi, in fondo sono tutti un po' simili poiche' la loro struttura dipende dalla struttura del computer, che e' sempre la stessa. La sintassi dei linguaggi moderni somiglia spesso a quella del C, che ha avuto enorme influenza sui linguaggi successivi.


Fra i linguaggi principali ricordiamo: