Strumenti di sviluppo

Strumenti per lo sviluppo di software sono:

  • Il linker, che combina insieme i programmi compilati con le librerie del sistema, per creare un programma eseguibile;
  • I debugger, programmi che permettono di analizzare l'andamento di un eseguibile, in modo da facilitare l'eliminazione degli errori (per esempio eseguendo il programma istruzione per istruzione o guardando i valori assunti man mano dalle variabili)
  • Questi strumenti sono combinati insieme da programmi (utilities) che ne facilitano l'uso, come il make, oppure in veri e propri ambienti di sviluppo, che permettono anche di creare facilmente un'interfaccia grafica per il programma.
    Per Linux abbiamo ad esempio il kdevelop, per Windows la piattaforma .net, la Sun offre ambienti di sviluppo dedicati a Java.

    Ogni distribuzione di Linux contiene gli strumenti di sviluppo della Free Software Foundation, distribuiti sotto licenza GNU. I compilatori sono:

    Il Fortran e' stato uno dei primi linguaggi di programmazione, negli anni 60 e 70 tutto il software scientifico e parte di quello commerciale veniva scritto in fortran, ma ormai il fortran ha perso di importanza, soppiantato dal C o da linguaggi ad oggetti.
    Il compilatore piu' importante e' il C, il sistema operativo e quasi tutto il software di una distribuzione Linux e' scritto in C. Il C++ ha applicazione in progetti complessi, in genere per interfacce grafiche. Java e' soprattutto utilizzato per grossi applicativi commerciali che devono girare in ambiente di rete. E' abbinato ad una ricchissima libreria di classi, fortemente sostenuto dalla SUN, che ne mantiene un rigido controllo, ed osteggiato dalla Microsoft, che cerca di soppiantarlo con la sua piattaforma di sviluppo.
    Il Pascal e' un linguaggio creato in ambiente accademico, anni fa era di moda nelle universita', ma non e' mai veramente entrato in uso ed i pochi veri progetti sviluppati in Pascal sono poi stati riscritti in C.
    L'assembler e' un linguaggio molto vicino al linguaggio macchina, obbliga il programmatore a gestire direttamente i registri e l'indirizzamento delle variabili ed e' dipendente dall'hardware della macchina. Quando non esistevano i compilatori si lavorava in assembler e tutto era molto lungo e brigoso, oggi si scrivono in assembler solo le parti dei programma che necessitano di particolari ottimizzazioni, o routine che devono interfacciarsi con l'hardware, ma anche per la programmazione di microprocessori esistono ambienti di sviluppo che permettono di lavorare in un linguaggio simile al C, e compilano loro il programma. Anche i sistemi operativi hanno solo poche parti in assembler.

    Accanto a questi linguaggi occorre considerare tutta una serie di linguaggi interpretati, cioe' tradotti in linguaggio macchina riga per riga, durante l'esecuzione. Fra questi il Perl, usato molto per procedure di sistema (quando la shell non basta piu') il Python, che ha una sintassi molto semplice e permette di lavorare "ad oggetti", il PHP, che viene abbinato ai server web, per interfacciarli ad applicazioni e database.
    Ci sono poi tanti altri linguaggi di programmazione, spesso dedicati ad ambienti e problemi particolari.

    Assieme ai compilatori in un sistema Linux si trovano il linker della GNU: (ld) e varie utilities (GNU Binary Utilities) , fra cui :

    E' anche importante il debugger GNU: gdb, si tratta di un debugger con un'interfaccia a comandi inteso specialmente per programmi in C, esistono anche interfacce grafiche a questo debugger, come xxgdb o ddd.

    Esempi di uso dei compilatori in Linux

    I compilatori hanno moltissime opzioni, si mostra qui il loro uso in casi semplici.

    g77 -c -o file.o file.f : compila il file file.f, produce un object file.o , ma non fa il link (-c).

    g77 -o file file1.f file2.f -L/local/lib -lmia : compilazione e link di file1.f, file2.f, produce l'eseguibile file, usa la libreria libmia.a in /local/lib

    g77 -O0 -g -o file file.f : non ottimizza (-O0), include simboli per il debugger (-g)

    g++ -o eseguibile main.cpp classe.cpp : compila programma C++

    ld -o exe /lib/crt0.o hello.o -lc : produce l'eseguibile exe, linkando /lib/crt0.o ed hello.o utilizzando la libreria libc.a