prof. Nunzio Brugaletta |
LinPROG |
Il programma scritto utilizzando le regole di un determinato linguaggio di programmazione, viene chiamato programma sorgente.
Per poter produrre un file in una memoria di massa contenete il sorgente di un programma, in genere, si utilizza un editor: un programma cioè che salva su memoria di massa un file di testo puro senza formattazioni (colori, grassetto, sottolineato, allineamenti, ecc...). Le formattazioni, infatti, non hanno alcuna influenza sull'esecuzione di un programma. Anche se, per la produzione del sorgente, può andare bene qualsiasi software in grado di produrre file di testo puro, esistono editor specifici per programmatori che forniscono tutte le agevolazioni necessarie per la fase di generazione di un sorgente.
Qualsiasi sia lo strumento utilizzato per produrre il sorgente, lo scopo finale della scrittura di un programma è quello della sua esecuzione. Sono possibili due approcci diversi all'esecuzione di un programma:
La compilazione. In questo caso il programma sorgente viene, da un compilatore, tradotto in istruzioni macchina eseguibili da una CPU.
Il compilatore effettua diverse elaborazioni sul sorgente al fine di produrre il codice eseguibile. Si comincia da una fase di analisi in cui il compilatore acquisisce informazioni sulle istruzioni in modo da essere in grado di tradurle. In questa fase il compilatore ricava dal sorgente gli atomi (le singole componenti delle varie istruzioni) al fine di una loro classificazione, per esempio, come parole chiavi o come variabili scelte dal programmatore, verifica la correttezza sintattica degli statement. Successivamente si comincia a a produrre l'oggetto in cui le istruzioni del sorgente sono sostituite da parti direttamente in linguaggio macchina o da riferimenti a parti contenute nelle librerie del compilatore (componenti software già tradotti in linguaggio macchina). La fase successiva si occupa delle interconnessioni fra i moduli. Il programma generato nella fase precedente va collegato a moduli delle librerie o ad eventuali altri moduli software. Dei collegamenti se ne occupa un modulo software chiamato linker.
Il collegamento può essere effettuato in due modi: statico e dinamico. Nel primo caso (collegamento statico) tutti i programmi e le librerie necessarie sono incluse nell'eseguibile che risulta di grandi dimensioni, ma contiene tutto ciò di cui ha bisogno. Nel secondo caso (collegamento dinamico) l'eseguibile ha dimensioni minori rispetto al primo caso e le librerie sono caricate in memoria quando c'è necessità di utilizzarle. Le librerie esterne sono chiamate DLL (Dynamic Link Libraries) in ambiente Windows e SO (Shared Object) in ambiente Linux. Naturalmente l'installazione di un programma comporta anche l'installazione delle librerie necessarie al suo funzionamento, ma, in questo modo, si ha la possibilità di aggiornare le librerie senza che questo implichi la ricompilazione del programma e, inoltre, possono coesistere anche diverse versioni delle librerie.
In ogni caso, alla fine del processo, si avrà un programma in formato binario eseguibile la cui esecuzione può essere lanciata dal Sistema Operativo.
L'interpretazione. In questo caso non esiste una traduzione del codice sorgente. Il programma viene eseguito direttamente dall'interprete. L'interprete è, sostanzialmente, un programma che esegue altri programmi. Laddove un compilatore è un traduttore, un interprete è invece un esecutore. Nella macchina sulla quale eseguire il programma, si lancia l'interprete che poi leggerà ed eseguirà le istruzioni contenute nel sorgente.
In linea generale per ogni linguaggio di programmazione potrebbe esistere sia un compilatore che un interprete, anche se alcuni linguaggi nascono per essere compilati ed altri per essere interpretati. Esistono anche situazioni ibride.
http://ennebi.solira.org |
ennebi@solira.org |