RICAPITOLANDO… Un ALGORITMO rappresenta la successione dei passi da eseguire per risolvere un PROBLEMA. L’algoritmo può essere descritto formalmente attraverso un FLOW-CHART. Algoritmi e flow-chart non sono però direttamente comprensibili ed eseguibili da un computer. Per far eseguire l’algoritmo al computer è necessario scrivere un PROGRAMMA che lo implementi. Il programma è una sequenza di ISTRUZIONI (che richiedono al computer l’esecuzione di AZIONI) ed è scritto in un LINGUAGGIO di programmazione comprensibile al computer BIOINFO3 - Lezione 19 1 SCHEMA LOGICO Possiamo ricapitolare questi concetti in un semplice schema ? PROBLEMA ALGORITMO PROGRAMMA ? BIOINFO3 - Lezione 19 2 LINGUAGGI DI PROGRAMMAZIONE L’unico linguaggio di programmazione comprensibile dal computer è il linguaggio macchina, formato da sequenze di bit secondo un determinato codice che è tipico del processore. Ogni processore ha il suo linguaggio macchina La prima evoluzione verso una programmazione più umana si è avuta negli anni 50 con l’introduzione di un codice mnemonico per ogni istruzione macchina e di nomi simbolici per indicare gli indirizzi di memoria. Nasceva il linguaggio chiamato ASSEMBLER, anch’esso caratteristico del singolo processore,in corrispondenza 1:1 con il linguaggio macchina, BIOINFO3 - Lezione 19 3 LINGUAGGI DI PROGRAMMAZIONE Successivamente, a partire dagli anni 60, nascono i cosiddetti linguaggi ad alto livello, che utilizzano istruzioni tratte dal linguaggio naturale (abbiamo visto quanto naturali siano le istruzioni di SQL). ANNI 60 ALGOL FORTRAN COBOL ANNI 70-80 BASIC PASCAL LISP PROLOG C C++ ALGOrithmic Language (applicazioni matematiche) FORmula TRANslation (applicazioni scientifiche) COmmon Business Oriented Language (appl. gestionali) Beginners All purpose Symbolic Instruction Code (per principianti) LISt Processing (elaborazioni di liste ed A.I.) PROgramming LOGic (Logica Matematica) BIOINFO3 - Lezione 19 (Programmazione ad oggetti) 4 LINGUAGGI DI PROGRAMMAZIONE ANNI 90 Con l’avvento dei sistemi operativi a finestre (WINDOWS) nascono i linguaggi visuali che permettono la gestione di interfacce grafiche semplici e user-friendly VISUAL C++ VISUAL BASIC JAVA (dal nome di un caffè in polvere, facilmente trasportabile e solubile, permette di eseguire dei programmi, installati su pagine WEB direttamente nei browser (e quindi non sul server ma sul client, eventualmente può interagire con il server) PERL Practical Extraction and Report Language Pur se nato negli anni 80, nella seconda metà degli anni 90 assistiamo al successo incredibile di Perl, che diventa il linguaggio preferito per preparare degli script per l’amministrazione di sistema nel sistema operativo LINUX e soprattutto per scrivere programmi cgi-bin da eseguire nei server WEB. Come dice il nome stesso Perl è vincente per la sua praticità, semplicità, potenza e compattezza (in un programma Perl di poche righe si possono concentrare decine e decine di righe di programma scritte in C) soprattutto nell’estrazione di informazione da file (“PARSERIZZAZIONE”) e nella preparazione di report BIOINFO3 - Lezione 19 5 GERARCHIA DEI LINGUAGGI Come dicevamo, ogni programma scritto in un qualsiasi linguaggio dovrà alla fin fine essere tradotto in linguaggio macchina per poter essere eseguito dal computer. L’ASSEMBLER è tradotto direttamente in linguaggio macchina da un programma ASSEMBLATORE. I linguaggi ad alto livello dovranno perciò a loro volta essere preventivamente tradotti in ASSEMBLER da un programma TRADUTTORE (che vedremo potrà essere di due tipi) PROGRAMMA IN UN LINGUAGGIO AD ALTO LIVELLO TRADUTTORE PROGRAMMA IN ASSEMBLER BIOINFO3 - Lezione 19 ASSEMBLATORE PROGRAMMA IN LINGUAGGIO MACCHINA 6 COMPILATORI ED INTERPRETI L’esecuzione di un programma scritto in un linguaggio ad alto livello può avvenire in due differenti modalità: Con un COMPILATORE l’intero programma (sorgente) viene tradotto (compilato) in un programma equivalente in assembler. Si ottiene così un programma in codice macchina (eseguibile). Quando si vuole eseguire il programma si chiederà perciò al computer di eseguire direttamente la versione eseguibile.Ogni modifica del sorgente comporta la ricompilazione del programma per ottenere una versione aggiornata dell’eseguibile. Con un INTERPRETE, per eseguire un programma sorgente si chiederà invece l’esecuzione di un programma interprete il quale leggerà man mano la singola istruzione del sorgente e solo in quel momento eseguirà delle corrispondenti istruzioni macchina. I programmi compilati sono quindi molto più veloci di quelli interpretati, ma quest’ultimi sono più rapidi da modificare in fase di sviluppo e collaudo. Sia i compilatori che gli interpreti verificano la correttezza sintattica del programma. BIOINFO3 - Lezione 19 7 PERL L’esecuzione di un programma scritto nel linguaggio PERL avviene tramite un interprete, quindi questo linguaggio non è il più indicato per programmi in cui il tempo di esecuzione sia un fattore critico. Da linea di comando UNIX l’esecuzione di un programma scritto nel linguaggio perl e contenuto in un file (che indichiamo con nome-file) può avvenire in due modi: perl nome-file nome-file In entrambi i casi viene attivato l’interprete, però nel secondo caso ciò avviene solo se la prima riga del file nome-file ha una sintassi particolare (#!/usr/bin/perl) che a sua volta richiama l’interprete. BIOINFO3 - Lezione 19 8 PATH DEI PROGRAMMI Sia l’interprete perl sia il programma da eseguire saranno localizzati in qualche posto nell’albero delle directory Normalmente l’interprete Perl si trova nella directory /usr/bin (se non sappiamo dove si trova possiamo scoprirlo con il comando whereis) Quindi significa che esiste una directory usr che contiene una directory bin che contiene il programma perl (l’interprete). usr bin perl BIOINFO3 - Lezione 19 9 PATH DEI PROGRAMMI Esiste una variabile d’ambiente chiamata PATH, definita dall’amministratore di sistema, che specifica in quali directory ricercare un programma da eseguire. Per verificarne il valore possiamo eseguire il comando UNIX ‘env’ che mostra i valori correnti di tutte le variabili d’ambiente (che sono settate all’inizio del nostro collegamento) BIOINFO3 - Lezione 19 10 PATH DEI PROGRAMMI Se nel PATH è indicata la directory /usr/local allora potremo richiamare l’interprete perl da qualunque directory in cui ci trovassimo. Altrimenti è necessario spostarsi nella directory /usr/local con un comando di cd (change directory) Oppure (sempre se /usr/local non fosse definita nel PATH) specificare il path completo del file da eseguire (l’interprete perl) BIOINFO3 - Lezione 19 11 PATH DEI PROGRAMMI Lo stesso discorso vale per il nostro programma, scritto in Perl, che vogliamo eseguire. Supponiamo che esso si chiami pippo.pl Anch’esso si troverà in una certa posizione nell’albero delle directory, ad esempio, se sono l’utente bioinfo3-01, nella mia home directory, ovvero in /home/bioinfo3-01/ home bioinfo3-01 pippo.pl usr bin perl BIOINFO3 - Lezione 19 12 PATH DEI PROGRAMMI Se ci troviamo nella stessa directory dove si trova il file da far eseguire all’interprete possiamo riferirci ad esso semplicemente con il suo nome. Altrimenti, se siamo in un’altra directory dobbiamo specificare il suo path completo In questo esempio mi trovavo nella mia directory chiamata b. Posso quindi far eseguire direttamente il programma pgmm.pl residente proprio in b N.B. E’ comunque necessario dire che il programma si trova nella directory corrente usando ./ in quanto la mia directory /b non si trovava nel PATH. Se invece mi trovavo in un’altra directory avrei dovuto specificare il path (assoluto o relativo del programma) BIOINFO3 - Lezione 19 13 DIRITTO DI ESECUZIONE E’ importante verificare che l’utente che vuol eseguire il programma ne abbia effettivamente il diritto. Uno degli errori più comuni, quando si prepara un programma cgi-bin da far eseguire al server web httpd, è quello di dimenticarsi di concedere il diritto di eseguire il nostro programma all’utente del sistema deputato all’esecuzione del server web. Si può usare ls –al per verificare i diritti sui programmi di una certa directory Nell’esempio tutti gli utenti del sistema hanno il diritto di eseguire (x) il programma pgmm.pl. La prima tripletta rwx assegna all’utente nicola il diritto di leggere (r), scrivere (w) ed eseguire il file; gli utenti del gruppo lab potranno solo leggere ed eseguire (x) il file ma non scriverlo (modificarlo o cancellarlo), manca w; gli altri utenti (e quindi anche quello che esegue httpd) possono analogamente leggerlo o eseguirlo BIOINFO3 - Lezione 19 14 CHMOD Se desideriamo cambiare i diritti sui file possiamo eseguire il comando CHMOD. Di solito, come nell’esempio appena visto, va bene assegnare come diritti il valore 755 user group5 = 7 = r 4 r - other5 = r - 2 w x x 1 x Esempio: chmod 755 pgmm.pl BIOINFO3 - Lezione 19 15 PARAMETRI DEL PROGRAMMA A questo punto il programma è effettivamente eseguibile. Possiamo passare dei parametri al programma elencandoli separati da spazio nella stessa riga del comando di esecuzione, dopo il nome del programma nome-file parametro1 parametro2 oppure perl nome-file parametro1 parametro2 parametron parametron Vedremo come, dall’interno del programma Perl, sarà possibile recuperare questi parametri BIOINFO3 - Lezione 19 16 RE-DIREZIONE INPUT E OUTPUT Se non specificato diversamente il programma prende il suo input dallo standard input, indicato con il simbolo STDIN (la tastiera) e produce il suo output sullo standard output, indicato con il simbolo STDOUT (il video). Come abbiamo già visto con il comando mysqldump, usando i simboli < o > è possibile re-direzionare input ed output. Ad esempio si potrà leggere l’input da un file o stampare l’output su un altro file (ovviamente anche entrambi contemporaneamente) ./pippo.pl <prova >risultati Nell’esempio si chiede l’esecuzione del file pippo.pl, posto nella directory corrente (in realtà ad essere eseguito è l’interprete Perl se pippo.pl è scritto in PERL e contiene nella prima riga #!/usr/bin/perl). L’input è preso dal file “prova” della directory corrente, anziché da tastiera, e l’output scritto sul file risultati anziché a video. Il file risultati se non esiste già nella directory corrente (in questo caso viene sovrascritto!) viene creato ex-novo per l’occasione. BIOINFO3 - Lezione 19 17 RIEPILOGO •Linguaggi di programmazione •Compilatori ed interpreti •Esecuzione di un programma (Perl): Path del programma, diritti, parametri, input e output BIOINFO3 - Lezione 19 18