| prof. Nunzio Brugaletta |
Sviluppo in C++: strumenti in ambiente Linux |
Scelto un linguaggio di programmazione (per esempio C o C++) e codificato un programma, il problema che si pone è quello di fare diventare tale programma eseguibile da un computer. A tale scopo è necessario utilizzare un compilatore (nel caso specifico un compilatore C++) che è un particolare software che a partire da un programma scritto in un determinato linguaggio di programmazione (il programma sorgente C++) può generare un programma oggetto eseguibile. Tutto ciò è ottenuto dal compilatore traducendo in codice binario comprensibile dalla macchina le istruzioni contenute nel sorgente. Tale processo, che può variare e prevedere diverse fasi in dipendenza del compilatore stesso e del suo funzionamento, richiede dal programmatore l’esecuzione di alcune operazioni che possono essere ricondotte in breve alle seguenti:
Scrittura del sorgente e salvataggio su disco del sorgente stesso. Tale operazione viene effettuata con l’ausilio di un editor: software che permette appunto di inserire il testo con le istruzioni del programma e salvarlo su memoria di massa. In questa fase il programma è semplicemente una sequenza di caratteri priva di significato per il computer e, quindi, può essere scritto utilizzando un qualsiasi software che generi testo puro. Non va bene, in genere, un programma di elaborazione testi perché verrebbero inseriti nel testo anche i caratteri di formattazione (grassetto, corsivo, dimensioni caratteri, colori, ecc...) a meno che il software non preveda (e in genere è possibile) la generazione di testo puro. Conviene però utilizzare un editor poiché si tratta di uno strumento creato per chi sviluppa software e quindi provvisto di facilitazioni e aiuti per i programmatori.
Compilazione del sorgente. Tale fase richiede appunto un compilatore che è in grado di tradurre il sorgente in codici eseguibili per una determinata CPU e per un determinato Sistema Operativo. Se il compilatore non è in condizione di generare il codice eseguibile perché è stato commesso qualche errore di sintassi, viene generata la lista degli errori. In questo caso, anche se qualche compilatore produce il codice eseguibile, non se ne può tenere conto avendo, questo, comportamenti imprevedibili. Bisogna riprendere l’editing del sorgente, correggere le istruzioni che hanno generato errori e ripetere la compilazione con il programma modificato.
Esecuzione e test del programma. Una volta generato il codice eseguibile è necessario verificare se il programma fornisce i risultati attesi. Scelti i dati sui quali effettuare i test, si lancia l'esecuzione del programma fornendo tutti i dati previsti dai test. Se i risultati prodotti sono quelli aspettati: bene! In genere il caso più frequente è quello in cui si verificano situazioni inattese: risultati non coerenti rispetto alle attese, blocchi del programma. Si rende necessario effettuare un monitoraggio dell’esecuzione del programma per verificare quali sono le situazioni che non permettono al programma stesso di funzionare nella modalità corretta. In questi casi è necessario utilizzare un debugger che è un software che permette, per esempio, di controllare come variano, nel corso dell’esecuzione, i valori contenuti nelle variabili utilizzate dal programma o fare eseguire le singole istruzioni verificandone gli effetti.
In definitiva, da quanto esposto, per completare il processo di compilazione per la produzione del codice eseguibile, è necessario utilizzare una serie di strumenti software. Quanto meno bisogna utilizzare: editor, compilatore, debugger. In alcuni casi, per completare l’opera del compilatore è necessario un linker, in altri casi, in dipendenza del tipo di compilatore, occorrono anche altri strumenti software, per esempio per l’esecuzione del programma compilato. Se gli strumenti riescono ad integrarsi fra di loro consentendo, per esempio, all'editor di dialogare con il compilatore, si può più rapidamente cercare e correggere la riga del sorgente dove è stato commesso un errore. Gli strumenti del progetto GNU hanno questa capacità di integrazione: Emacs è fornito di librerie che permettono di interagire in maniera proficua con GCC e GDB, consentendo una maggiore efficienza e velocità, da parte del programmatore, nel processo di sviluppo.
| http://ennebi.solira.org |
ennebi@solira.org |