La Programmazione. Programmare Macchine Astratte Compilazione / Interpretazione Java. Laboratorio di Programmazione - Luca Tesei

Documenti analoghi
La Programmazione. Cos è la programmazione? Concetti preliminari. Programmazione e Laboratorio di Programmazione Luca Tesei 1

Sommario. La Programmazione. Programmare vs Usare un computer. Programmare vs Usare un computer. Programmi ognidove. Programmi ognidove

Macchine Astratte. Definizione e tipi di implementazione

La Programmazione. Cos è la programmazione? Concetti preliminari

Traduzione ed Interpretazione. Queste sconosciute

Traduzione ed Interpretazione

Macchine astratte, linguaggi, interpretazione, compilazione

Macchine Astratte. Nicola Fanizzi Dipartimento di Informatica Università degli Studi di Bari. Linguaggi di Programmazione feb, 2016

Macchine Astratte. Luca Abeni. February 22, 2017

PROBLEMI E ALGORITMI

Macchine astratte, linguaggi, interpretazione, compilazione

Corso di Linguaggi di Programmazione + Laboratorio

Il Software programmabili programma algoritmo

o Introduzione agli algoritmi o Rappresentazione delle Informazioni o Architettura del calcolatore o Reti di Calcolatori

Linguaggi di Programmazione

Linguaggi di alto livello, compilatori e interpreti

Marco Tarini - Università dell'insubria A.A. 2016/17. Università degli Studi dell Insubria Dipartimento di Scienze Teoriche e Applicate

AXO - Architettura dei Calcolatori e Sistema Operativo. organizzazione strutturata dei calcolatori

DAGLI ALGORITMI AI LINGUAGGI. Linguaggi di Programmazione

Linguaggi di Programmazione

Programma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Architettura del calcolatore

ELABORAZIONE DELLE INFORMAZIONI (ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE)

Linguaggi di alto livello, compilatori e interpreti

LINGUAGGI DI ALTO LIVELLO

Macchina Astratta: struttura e realizzazione.

Programmazione in Java e gestione della grafica (I modulo) Lezione 2: Prime nozioni di Java

Lez. 5 La Programmazione. Prof. Salvatore CUOMO

LINGUAGGI DI ALTO LIVELLO. Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware

ASTRAZIONE. Sono indipendenti dalla macchina hardware sottostante ASTRAZIONE 1

LINGUAGGI DI ALTO LIVELLO

Linguaggi di programmazione e astrazione

I Linguaggi di Programmazione

Istruzioni e linguaggio macchina

Linguaggi di Programmazione

Traduzione e interpretazione

Introduzione alla Programmazione. Giselda De Vita

Le istruzioni corrispondono univocamente a quelle macchina, ma vengono espresse tramite nomi simbolici i (parole chiave)

PROBLEMI ALGORITMI E PROGRAMMAZIONE

Informatica. Dipartimento di Economia. Ing. Cristiano Gregnanin. 20 ottobre Corso di laurea in Economia

Introduzione alla programmazione. Walter Didimo

Introduzione al C. Informatica Generale - Introduzione al C Versione 1.0, aa p.1/17

Le basi del linguaggio Java

Linguaggi di Programmazione

Programmazione. Dipartimento di Matematica. Ing. Cristiano Gregnanin. 29 febbraio Corso di laurea in Matematica

Linguaggi di Programmazione

Iniziare a programmare in C++

Algoritmi, linguaggi e programmi. Emilio Di Giacomo e Walter Didimo

Corso di Laurea Ingegneria Informatica Laboratorio di Informatica

Linguaggi di Programmazione

Linguaggi, compilatori e interpreti

SISTEMA DI ELABORAZIONE

la traduzione dei programmi ed introduzione a Java

Perché il linguaggio C?

Istruzioni e linguaggio macchina

Linguaggi di alto livello. Barriera di astrazione. Pascal. Cobol. Fortran. Basic. Modula-2. Lisp. Simula67 Scheme. Smalltalk C++ Prolog AN

Lezione 15 Il Set di Istruzioni (1)

10: I LINGUAGGI di PROGRAMMAZIONE PARTE 1

Programmazione. Andrea Passerini Informatica. Programmazione

19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Architettura degli Elaboratori 01-Introduzione Introduzione

Corso di Architettura (Prof. Scarano) 09/04/2002

Laboratorio di Programmazione 1. Docente: dr. Damiano Macedonio Lezione 4 24/10/2013

Informatica Problema Algoritmo Programma

permette di utilizzare lo stesso programma su CPU diverse (con opportuni traduttori)

Linguaggi, compilatori e interpreti

28/02/2016. LABORATORIO DI PROGRAMMAZIONE Corso di laurea in matematica 5 LA RAPPRESENTAZIONE DELLE ISTRUZIONI

Programmazione. Andrea Passerini Informatica. Programmazione

C++ Barriera di astrazione. Barriera di astrazione. Basic. Basic. Lisp. Lisp. Pascal. Prolog. Pascal. Prolog. Cobol. Fortran IMPERATIVI FUNZIONALI

Perché il linguaggio C?

Linguaggi e traduttori

PROGRAMMAZIONE Macchine astratte, linguaggi, interpretazione e compilazione

Variabili e assegnazione

Lez. 8 La Programmazione. Prof. Pasquale De Michele (Gruppo 2) e Raffaele Farina (Gruppo 1) 1

Sommario Linguaggi, messaggi e comunicazione. Introduzione ai Linguaggi di Programmazione. Linguaggio (1) Linguaggio (2)

Algoritmi, linguaggi e programmi. Emilio Di Giacomo e Walter Didimo

Programmazione C Massimo Callisto De Donato

Cosa è un programma. Informatica di Base -- R.Gaeta 18

Introduzione a Java. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi132 Sesto San Giovanni

LINGUAGGI DI PROGRAMMAZIONE E CODIFICA PROGRAMMI

Algoritmo. La programmazione. Algoritmo. Programmare. Procedimento di risoluzione di un problema

Esecuzione di Programmi Esercitazione

Corso di Architettura degli Elaboratori

Macchina Astratta: struttura e realizzazione.

Cos è un algoritmo. Si dice algoritmo la descrizione di un metodo di soluzione di un problema che sia

ITI M. FARADAY. Programmazione a. s

Introduzione al Linguaggio C Corso di Informatica Laurea in Fisica

Corso di Architettura (Prof. Scarano) 10/05/2002

Octave. Luca Abeni. Informatica Luca Abeni 1 / 21

Linguaggi di programmazione. Paradigmi di programmazione

Concetti Introduttivi

Fondamenti di Algoritmi

Transcript:

La Programmazione Programmare Macchine Astratte Compilazione / Interpretazione Java 1

Programmare vs Usare un computer Esite una grossa differenza e l'ignoranza della stessa genera confusione e incomprensioni Ah! Tu sei un informatico! Senti, come faccio a scansire e modificare un immagine e a metterla sul mio sito? Sta parlando di come usare il computer, di come utilizzare Un certo numero di programmi già scritti da qualcuno e installati sul pc Dei servizi offerti da certi provider internet 2

Programmare vs Usare un computer Una delle competenze base di un informatico è invece quella di conoscere almeno un modo per programmare, cioè per scrivere programmi che fanno qualcosa, quello che vuole lui/lei/il suo datore di lavoro/una comunità La programmazione è un attività interessante, entusiasmante, creativa: moltissime persone nel mondo lo fanno per puro divertimento (oltre che per guadagnarsi da vivere) 3

Programmi Everywhere Esistono in circolazione moltissimi programmi, che fanno le cose più svariate (word-processor, browser internet, computer graphics, riproduzione suoni/immagini,...) Il codice di diversi di loro è disponibile per essere letto e/o modificato: si tratta del codice open-source, scaturito per lo più dal tempo libero di programmatori di tutto il mondo: essi ricavano soddisfazione e gratificazione dallo scrivere un buon programma e dal fatto che poi questo venga anche usato da altri 4

Programmi Everywhere Nonostante l abbondanza esiste sempre l esigenza di scrivere programmi nuovi o di migliorarne di già esistenti In ogni caso esistono dei limiti a quello che un computer può calcolare: ci sono dei problemi per cui non esiste nessun algoritmo risolutivo Un algoritmo è il cuore di un programma: è il procedimento di calcolo che il programma deve seguire 5

Programmare Per poter programmare una certa macchina abbiamo bisogno di: Un algoritmo che calcola ciò che il programma deve calcolare Un linguaggio per specificare l algoritmo. La macchina su cui vogliamo far girare il programma deve capire e saper eseguire questo linguaggio In genere il programma che si scrive è una sequenza di istruzioni, scritte seguendo regole sintattiche precise 6

Macchine astratte Esiste un insieme di concetti che sono validi per una qualunque macchina e un qualunque linguaggio di programmazione Questo insieme di concetti si chiama Macchina Astratta È molto utile per fissare dei punti di riferimento generali nella programmazione e anche per definire precisamente come è implementato un certo linguaggio 7

Macchina Astratta È un insieme di strutture dati ed algoritmi in grado di memorizzare ed eseguire dei programmi MEMORIA OPERAZIONI PROGRAMMI DATI INTERPRETE CONTROLLO SEQUENZA CONTROLLO DATI GESTIONE MEMORIA OP 1 OP 2 OP n 8

Es: Una macchina fisica Operazioni Primitive Operazioni aritmetico-logiche Operazioni di manipolazione di stringhe di bit Lettura/Scrittura di celle di memoria e registri Input/output Controllo di Sequenza (salti, condizionali, chiamate e ritorni dai sottoprogrammi) Registro contatore istruzioni (PC) Strutture dati che contengono i punti di ritorno dei sottoprogrammi 9

Es: Una macchina fisica Controllo dati Acquisizione operandi Memorizzazione risultato Architettura a registri: Registri indice Indirizzamento indiretto Architettura a Pila: Gestione della Pila 10

Es: Una macchina fisica Gestione della memoria Architettura a registri: Nessuna poiché la memorizzazione è statica Architettura a Pila: Allocazione e recupero dei dati sulla Pila 11

L interprete La struttura dell interprete è sempre la stessa per una qualunque macchina astratta Quello che cambia sono le altre componenti 12

Interprete Start Acquisisci la prossima istruzione Controllo Sequenzza Decodifica Controllo Dati Acquisisci operandi Seleziona Operazioni Esegui OP 1 Esegui OP 2 Esegui OP n Esegui Alt Memorizza il Risultato Controllo Dati Stop

Il linguaggio di una macchina astratta M macchina astratta LM linguaggio macchina di M: è il linguaggio in cui si esprimono tutti i programmi interpretati dall interprete di M I programmi sono particolari dati primitivi su cui opera l interprete Le nozioni di Linguaggio di Programmazione e di Macchina Astratta sono intimamente collegate: L M <==> M L 14

Macchine astratte Ai componenti di M corrispondono i componenti di L M Tipi di dato primitivi Meccanismi e Costrutti per il controllo della sequenza Meccanismi e Costrutti per il controllo del trasferimento dei dati Meccanismi e Costrutti per la gestione della memoria 15

Programmare in un linguaggio Conoscere un Linguaggio di Programmazione corrisponde a conoscere tutti i suoi costrutti e come questi vengono eseguiti dalla relativa Macchina Astratta Avendo queste conoscenze si possono scrivere programmi nel Linguaggio scelto e si può anche non conoscere per niente il tipo di implementazione della Macchina Astratta del Linguaggio 16

Programmare in un linguaggio In buona parte di questo corso ci occuperemo di capire bene la Macchina Astratta Java, cioè studieremo i costrutti del Linguaggio Java e che effetti hanno quando vengono eseguiti Vedremo anche alcuni dettagli dell implementazione del Linguaggio 17

Linguaggi ad alto e basso livello I linguaggi di programmazione si possono classificare in base alla distanza tra la loro macchina astratta e la macchina ospite si cui poi verranno fatti girare: Piccola distanza (poche differenze): linguaggi di basso livello. Es: codice macchina di un pc, assembly. Grande distanza (la struttura della macchina astratta del linguaggio è molto diversa da quella della macchina ospite): linguaggi di alto livello. 18

Linguaggi di basso livello Una tipica macchina ospite, almeno per applicazioni di ufficio/domestiche, è un pc Un pc può essere visto come una macchina astratta che risulta dalla composizione di diversi livelli: L hardware Il firmware (sequenze di operazioni elementari che implementano istruzioni di linguaggio macchina) Il sistema operativo (che aggiunge funzionalità di gestione delle risorse) 19

Linguaggi di basso livello Un esempio tipico di linguaggio di basso livello è il linguaggio macchina di un pc. Istruzioni molto semplici che operano su dati molto semplici: Sposta un valore intero dalla memoria ad un registro Incrementa il valore di un registro Salta ad una certa istruzione se il valore di un registro è maggiore di zero... 20

Linguaggi di basso livello Ogni istruzione elementare è identificata da un codice numerico I dati che servono all istruzione per operare sono numeri Il programma viene caricato in memoria ad un certo indirizzo e ognuna delle istruzioni è individuabile dal punto di memoria in cui si trova tramite un indirizzo Il processore esegue le istruzioni in sequenza (eseguendo dei salti in base a determinate istruzioni) 21

Linguaggi di basso livello Risulta molto difficoltoso, ripetitivo e fonte di errori il programmare in linguaggio macchina Un linguaggio leggermente migliore è il linguaggio assembly: Ogni istruzione è identificata da un codice mnemonico (mov, add, goto,...) Le istruzioni e i dati possono essere etichettati con codici mnemonici per riferirli in maniera semplice Un programma, detto assemblatore, si occupa di tradurre in codice macchina numerico 22

Linguaggi di basso livello Un esempio di programma assembly MOVF id3, R2 MULF \#60.0, R2 MOVF R2, id1 ADDF R2, R1 MOVF R1, id1 id1, id3 sono etichette che si riferiscono a dati (variabili intere); R1, R2 sono registri; MOVF, MULF, ADDF sono codici mnemonici di istruzioni macchina 23

Linguaggi di alto livello È facile immaginare la difficoltà di scrivere grandi applicazioni scrivendo programmi assembly Il numero di istruzioni da scrivere e la loro organizzazione richiederebbe moltissimo tempo e la probabilità di commettere errori sarebbe altissima, oltre al fatto che individuare gli errori sarebbe molto difficile Per questo motivo sono stati introdotti i linguaggi di alto livello 24

Linguaggi di alto livello Astraggono diverse componenti della macchina ospite fisica I programmi sono più leggibili e intelligibili dagli esseri umani La scrittura di programmi diventa anch essa una espansione del linguaggio tramite la definizione di nuove astrazioni, tipi di dato, operazioni Il debugging, cioè la ricerca e correzione degli errori, è più semplice e gli errori sono limitati dalla strutturazione imposta 25

Linguaggi di alto livello Richiedono una implementazione per poter essere poi eseguiti in una macchina fisica ospite Esistono diversi modi per implementarli: Compilazione o traduzione Interpretazione Varie combinazioni delle due 26

Dai linguaggi alle macchine astratte M LM L ML è la macchina astratta che ha L come linguaggio macchina Se L è un linguaggio ad alto livello, ML può essere molto complessa Implementare L vuol dire realizzare ML Come? 27

Realizzazione di Macchine Astratte Una macchina astratta è una collezione di strutture dati ed algoritmi Può essere realizzata combinando 3 tecniche 1. Realizzazione in hardware 2. Emulazione o simulazione via firmware 3. Simulazione software La simulazione consiste nel far fare a una certa macchina (di livello più basso) quello che farebbe un'altra (di livello più alto) 28

Implementazione di M L L'approccio più usato è la simulazione (software od eventualmente firmware) su una macchina (astratta) ospite M 0 Se l interprete di ML è simulato, l implementazione si chiama interpretativa Esiste un alternativa basata su tecniche di traduzione (soluzione compilativa) 29

Compilazione Un compilatore è un programma che si occupa di tradurre un altro programma scritto in un linguaggio L in un programma equivalente scritto in L 0, linguaggio di una macchina ospite 30

Compilazione Programma scritto in L int main() { double x; int z = 10; while (z >0)... Compilatore Programma equivalente in L0 MOV l1, R1 MOVF l3, R2... 31

Compilazione Molti linguaggi sono compilati: C, C++, Pascal, FORTRAN, COBOL, Java (parzialmente) Scrivere un compilatore è un compito difficile, ma una volta realizzato esso permette di far eseguire tutti i programmi del linguaggio L per cui è stato scritto da macchine che funzionano con il linguaggio L 0 32

Interpretazione Il linguaggio L è implementato su una macchina che funziona su L 0 tramite una simulazione software Un programma in L 0 (generalmente chiamato interprete) si occupa di prelevare nel giusto ordine le istruzioni di un programma dato in L, di simulare la loro esecuzione e di restituirne i risultati. Esempi di linguaggi interpretati: PROLOG, LISP, Java bytecode 33

Interpretazione Programma scritto in L int main() { double x; int z = 10; while (z >0)... Interprete simulazione 34

Esempio: linguaggio C Di alto livello Compilato Il codice compilato può essere eseguito sulla macchina ospite con il supporto di alcune librerie che implementano diverse funzionalità (supporto a tempo di esecuzione) 35

Esempio: Java L implementazione del linguaggio Java è mista I programmi in Java vengono compilati, ma il risultato della compilazione è eseguibile su una macchina astratta (la Java Virtual Machine - JVM) che di solito non è una macchina fisica Il linguaggio della JVM si chiama Java bytecode ed ha le caratteristiche di un linguaggio di basso livello con diverse funzionalità specifiche per gestire le particolarità del linguaggio Java (oggetti, classi, eccezioni etc.) La JVM viene simulata tramite interpretazione su diverse macchine fisiche 36

Esempio: Java Programma scritto in Java Public class Hello { public static void main (String[] ar... Compilatore Interprete JVM per la macchina M0 Programma scritto in Java bytecode iload_1, #3 istore_3, 1 iadd_1, 2... M 0 simula 37

Esempio: Java La JVM è disponibile per molte architetture (macchine fisiche + sistema operativo) In questo modo uno stesso programma Java compilato può essere eseguito su diverse architetture Portabilità Indipendenza dall architettura 38