Traduzione ed Interpretazione

Slides:



Advertisements
Presentazioni simili
Linguaggio C e C++.
Advertisements

I Linguaggi di programmazione
Macchine Astratte (anche dette Macchine Virtuali)
Il Software.
Software di base: Linguaggi di Programmazione
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità A1 Introduzione a Java.
Dalla scrittura all’esecuzione
Recupero debito quarto anno Primo incontro
Evoluzione dei linguaggi di programmazione
I linguaggi di programmazione
Definizione e tipi di implementazione
Linguaggi di programmazione
Programmazione e Laboratorio di Programmazione – Luca Tesei1 La Programmazione Cosè la programmazione? Concetti preliminari.
Massa Laura Mela Enrica
Programmazione II Docente: Francesca Levi
Generalità Linguaggio e Macchina Astratta
1 Strutture dati nel supporto a run time. 2 Entità presenti quando un programma va in esecuzione §programmi dutente (compilati) §routines del supporto.
1 Metodologie di Programmazione. 2 Contenuto generale §tecniche per la programmazione orientata ad oggetti (in piccolo) §esemplificate utilizzando il.
Dr. Francesco Fabozzi Corso di Informatica
Basi di Dati prof. A. Longheu
1 9: Progettazione Architetturale Obiettivo: stabilire la struttura globale di un sistema software Descriveremo diversi tipi di modello di architettura,
Anno Accademico Corso di Informatica Informatica per Scienze Biologiche e Biotecnologie Anno Accademico
Il Software: Obiettivi Programmare direttamente la macchina hardware è molto difficile: lutente dovrebbe conoscere lorganizzazione fisica del computer.
TRADUZIONE DEL PROGRAMMA Una volta che un programma sia stato scritto in C, esso non può essere eseguito senza unulteriore traduzione. Ciò perché qualsiasi.
1 Programmazione ad oggetti in Java E.Mumolo, DEEI
Corso di Laurea in Biotecnologie Informatica (Programmazione)
Corso di Informatica (Programmazione)
Introduzione al linguaggio Java
Corso di Informatica Applicata - Lezione 3 - © 2005 Saverio De Vito Corso di Informatica Applicata Lezione 3 Università degli studi di Cassino Corso di.
Gestione di Progetti Software 2 (A.A. 2004/2005) - Lezione 2 1 JAVA: obiettivi di progetto del linguaggio Nota storica: Il linguaggio JAVA (inizialmente.
Struttura dei sistemi operativi (panoramica)
Software di base Il sistema operativo è un insieme di programmi che opera sul livello macchina e offre funzionalità di alto livello Es.organizzazione dei.
CAPITOLO 2 INTRODUZIONE AL LINGUAGGIO JAVA E ALL'AMBIENTE HOTJAVA.
Unità Didattica 2 I Linguaggi di Programmazione
Primi Elementi di Programmazione in C++
Fondamenti di Informatica1 Software di base Tra il linguaggio macchina (basso livello) e i linguaggi evoluti (alto livello) esiste uno strato di software.
INTRODUZIONE l sistema operativo è il primo software che lutente utilizza quando accende il computer; 1)Viene caricato nella memoria RAM con loperazione.
1 Programmazione = decomposizione basata su astrazioni (con riferimento a Java)
Lezione 1 Linguaggi di programmazione – Algoritmi –Istruzioni
VIRTUALIZZAZIONE Docente: Marco Sechi Modulo 1.
Macchine astratte, linguaggi, interpretazione, compilazione
Implementazione di un linguaggio ad alto livello (con riferimento a Java)
Programma di Informatica Classi Prime
Linguaggi di programmazione dalla prima generazione alla quinta ed attuale.
la traduzione dei programmi
Elettronica Digitale (II Parte) 10-11_5 1 ELETTRONICA DIGITALE II (5) 6/12 Il processo di assemblaggio.
Informatica Lezione 5 Scienze e tecniche psicologiche dello sviluppo e dell'educazione (laurea triennale) Anno accademico:
1 Tipi di Dato §descrittori, tipi, controllo e inferenza dei tipi §specifica (semantica) e implementazione di tipi di dato l implementazioni “sequenziali”
TW Asp - Active Server Pages Nicola Gessa. TW Nicola Gessa Introduzione n Con l’acronimo ASP (Active Server Pages) si identifica NON un linguaggio di.
LINGUAGGI DI PROGRAMMAZIONE Per comunicare comandi e dati ad un computer occorre un particolare linguaggio detto LINGUAGGIO MACCHINA, che è un insieme.
Il software Componente del computer costituita dai: –programmi di base per la gestione del sistema –programmi applicativi per l’uso del sistema Queste.
Linguaggi di Programmazione
Programmazione Attività di progettazione ed implementazione di programmi I programmi permettono di realizzare funzioni complesse su un hardware in grado.
Corso di Architetetture degli Elaboratori, A.A. 2004/ Architettura degli Elaboratori Elisa B.P. Tiezzi Orario ricevimento: Giovedì, ( Il materiale.
Concetti Fondamentali sulla Programmazione
1 Macchine astratte, linguaggi, interpretazione, compilazione.
1 Linguaggi: guardando la semantica §esistono un insieme di concetti semantici e di strutture di implementazione in termini dei quali si descrivono in.
1 Metodologie di Programmazione §tecniche per la programmazione orientata ad oggetti §esemplificate utilizzando il linguaggio Java §testo di riferimento.
1 Metodologie di Programmazione = decomposizione basata su astrazioni.
Classi ed Oggetti in Java (Cenni). Richiami Cenni sull’ Implementazione, Macchine Astratte, Compilatore, Interprete Ruolo delle Classi in Java Oggetti.
1 Metodologie di Programmazione §tecniche per la programmazione orientata ad oggetti §esemplificate utilizzando il linguaggio Java §testo di riferimento.
Il software Claudia Raibulet
Informatica Lezione 6 Psicologia dello sviluppo e dell'educazione (laurea magistrale) Anno accademico:
I linguaggi di alto livello
LINGUAGGI DI PROGRAMMAZIONE E' un linguaggio formale dotato di una sintassi ben definita che viene utilizzato per scrivere programmi che realizzano algoritmi.
Programmazione orientata agli Oggetti Introduzione a Java.
Parsing ricorsivo discendente Il parsing ricorsivo discendente (recursive descent parsing) è un metodo di tipo top-down che può essere facilmente codificato.
1 Informatica di Base Facoltà di Lingue e Letterature Straniere Corso di laurea in Relazioni Pubbliche.
Transcript della presentazione:

Traduzione ed Interpretazione Queste sconosciute

Siano L Linguaggio ad alto livello ML Macchina astratta di L M0 Macchina ospite

Implementazione interpretativa di L Simulazione software di ML su M0 con interprete di ML simulato Se ML ed M0 sono abbastanza diverse (linguaggio ad alto livello vs. hardware) non si riesce ad ottenere una simulazione di ML per estensione di M0 (con interprete di ML = interprete di M0 ) Efficienza scarsa, soprattutto per “colpa dell’interprete”

Implementazione compilativa di L Traduzione dei programmi di L in programmi macchina di LM0 funzionalmente equivalenti Esecuzione su M0 del programma tradotto ML non viene implementata

Sono due casi limite che nella realtà non esistono quasi mai In una situazione reale c’è quasi sempre una soluzione mista

Traduzione e macchine intermedie simulazione Programma in LI traduzione ML Programma in L MI Traduzione in un linguaggio intermedio + simulazione della macchina intermedia Pura interpretazione: MI = ML Pura traduzione: MI = M0

Traduzione e macchine intermedie La traduzione (compilazione) pura è possibile solo quando la distanza tra ML ed M0 è molto limitata Es: L = linguaggio assembly di M0 In tutti gli altri casi c’è sempre una macchina intermedia che estende come minimo M0 in alcune componenti

Traduzione intermedia in FORTRAN FORTRAN in realtà è un linguaggio di livello molto basso e per questo quasi tutto viene trattato in modo compilativo Ma alcuni costrutti richiedono la simulazione: input/output Una operazione I/O FORTRAN  svariate centinaia di operazioni nel linguaggio della macchina ospite

Traduzione intermedia in FORTRAN Il rimpiazzamento testuale genererebbe programmi di dimensione troppo elevata Si definiscono dei sottoprogrammi nel linguaggio di M0 e nel codice tradotto (dal programma FORTRAN al linguaggio di M0 ) si inserisce una chiamata a questi sottoprogrammi Tali sottoprogrammi sono chiamati supporto a tempo di esecuzione

Macchine intermedie e supporto a tempo di esecuzione Macchina intermedia = supporto a tempo di esecuzione + macchina ospite Si identifica valutando Efficienza e complessità del traduttore Compattezza del codice prodotto Facilità la portabilità su diverse macchine ospiti: Bisogna reimplementare il supporto a tempo di esecuzione sulla nuova macchina ospite

Interpretazione e traduzione Non esistono implementazioni puramente compilative Non esistono implementazioni puramente interpretative C’è sempre almeno la traduzione dei programmi nella loro rappresentazione interna

Interpretazione e traduzione La distinzione tradizionale si basa sulla struttura della macchina intermedia Compilazione: se l’interprete di MI è l’interprete di M0 Interpretazione: se l’interprete di MI è simulato (è un programma nel linguaggio di M0) La distinzione si riferisce alle implementazioni e non ai linguaggi E’ importante sapere anche il livello di simulazione delle altre componenti di MI

Vantaggi della traduzione Efficienza di esecuzione del codice Il costo complessivo della decodifica di un’istruzione per determinare la sequenza di operazioni ed i relativi operandi è in gran parte a carico della fase di traduzione La decodifica avviene una sola volta indipendentemente da quante volte l’istruzione viene eseguita

Svantaggi della traduzione La dimensione del codice prodotto è tanto elevata quanto maggiore è la distanza tra ML ed M0 Conviene usare la traduzione per quei costrutti di L che hanno un corrispettivo quasi immediato sul linguaggio di M0 Conviene usare l’interpretazione in tutti gli altri casi Durante il debugging dei programmi si può interagire in maniera più naturale con la macchina a tempo di esecuzione se si ha un’implementazione interpretativa

Programmi macchina rilocabili Implementazione puramente compilativa: caricatore o collegatore-caricatore Prodotto della traduzione: Codice macchina assoluto in cui sono state risolte le modalità di indirizzamento che dipendono dall’allocazione dei programmi

Linguaggio assembly Implementazione compilativa: assemblatore Prodotto della traduzione: Le istruzioni in linguaggio assembly, che contengono simboli mnemonici (che denotano codici operativi, indirizzi e registri), sono tradotte nelle corrispondenti istruzioni in linguaggio macchina

FORTRAN Compilatore Il traduttore produce codice direttamente eseguibile dall’interprete della macchina ospite Supporto a tempo di esecuzione: Sottoprogrammi che simulano l’I/O Alcune operazioni aritmetiche non fornite dalla macchina ospite

FORTRAN Progettato per mantenere al minimo il supporto a tempo di esecuzione Possibile solo imponendo severe restrizioni che diminuiscono la flessibilità del linguaggio, in particolare per applicazioni di tipo numerico Niente strutture dati dinamiche Niente ricorsione Niente gestione dinamica della memoria

Pascal e C Compilatore Il traduttore produce codice direttamente eseguibile dall’interprete della macchina ospite Se la macchina ospite è una macchina a registri, il supporto a tempo di esecuzione può essere molto complesso

MPASCAL MC Supporto a tempo di esecuzione E’ necessaria una estesa simulazione (basata su strutture dati apposite, come le pile) per trattare molte delle componenti di MPASCAL e MC relativi a: Controllo sequenza (es. Ricorsione) Controllo dati (es. blocchi, sottoprogrammi con ambiente locale dinamico) Gestione della memoria (es. puntatori, heap) Sono proprio questi costrutti che rendono C e PASCAL molto più flessibili, potenti ed eleganti di FORTRAN

Implementazione interpretativa del PASCAL Il traduttore genera codice nel linguaggio di una macchina intermedia, P_code, con struttura a pila, componenti simili a quelle di MPASCAL e con interprete proprio diverso da quello della macchina ospite P_code è simulata (o emulata) sulla macchina ospite La differenza con la soluzione compilativa è essenzialmente nell’interprete E’ una soluzione più portabile

LISP e PROLOG Implementazione interpretativa Il traduttore realizza semplicemente la trasformazione dei programmi nella loro rappresentazione interna La macchina intermedia è sostanzialmente MLISP o MPROLOG

LISP e PROLOG L’interprete è simulato Tutte le componenti del linguaggio richiedono un’estesa simulazione MLISP ed MPROLOG sono profondamente diverse dalle macchine su cui sono normalmente implementate tutte le componenti (incluse le operazioni sui dati primitivi)

Altre implementazioni di LISP e PROLOG Meno interpretative (impropriamente chiamate compilatori) Soluzioni simili a quella Pascal con P_code Macchine intermedie simili a MLISP o MPROLOG , ma simulabili più efficientemente La macchina intermedia PROLOG è uno standard: WAM (Warren Abstract Machine)

WAM Ha istruzioni di livello più basso di quelle di PROLOG per gestire i costrutti principali di PROLOG (unificazione e backtracking) Può essere realizzata in firmware (PROLOG machine) Facilita la portabilità Si ottiene comunque un miglioramento notevole nelle prestazioni

Java Implementazione interpretativa La macchina intermedia è una macchina a pila che esegue istruzioni tipo assembly (ma che sa gestire la gerarchia delle classi) Java Virtual Machine (JVM) E’ uno standard Simulabile su molte architetture (macchine ospiti) tramite il programma emulatore che si ottiene dal sito sun o da altri implementatori

Java Il compilatore produce, da un programma scritto in Java, un programma equivalente in bytecode (il linguaggio della JVM) La soluzione interpretativa facilita la portabilità Efficienza non proprio soddisfacente

Gerarchia di macchine astratte La macchina ospite su cui si implementa un linguaggio non è quasi mai la macchina hardware, ma una gerarchia di livelli di astrazione della macchina hardware Hardware Macchina intermedia Sistema operativo Firmware

Livelli Firmware: nuove operazioni emulate con microprogrammi Sistema operativo Nuove e più potenti operazioni primitive (ad es. gestione files, memoria virtuale) Maschera alcune componenti delle macchine sottostanti Molto spesso la macchina ospite su cui si implementa un linguaggio L1 è la macchina intermedia di un diverso linguaggio ad alto livello L2 Si utilizza L2 per implementare il supporto a tempo di esecuzione di L1

Esempio Abbiamo un compilatore C (che genera codice eseguibile dall’interprete della macchina hardware) Vogliamo realizzare un “compilatore” PROLOG usando C come linguaggio di implementazione Ricordiamo che il “compilatore” PROLOG è in realtà una implementazione interpretativa con la WAM come macchina intermedia

Esempio Dobbiamo implementare in C La WAM Un traduttore da programmi PROLOG a programmi WAM funzionalmente equivalenti (non è essenziale comunque che il traduttore sia scritto in C) Compiliamo, con il compilatore C, la WAM (che è un programma C) ed otteniamo un programma WAM’ (funzionalmente equivalente a WAM) che gira sulla macchina intermedia C

WAM’ Programma che gira con l’interprete di M0 e il supporto a tempo di esecuzione di C Gerarchia Macchina intermedia C MI = M0 + S.T.E. C HW FW Sist Op M0

Esempio I programmi generati dal traduttore PROLOG girano su una gerarchia di macchine astratte che contiene anche la macchina intermedia C Implementando la WAM in linguaggio macchina, si appoggerebbe direttamente sul sistema operativo

Implementazione Perche implementare un linguaggio L1 in L2? La complessità della realizzazione di una macchina intermedia è direttamente proporzionale alla sua distanza dalla macchina ospite e, quindi, dal livello del linguaggio di implementazione È molto più semplice realizzare la WAM in C piuttosto che in linguaggio macchina!

Implementazione via kernel Dobbiamo implementare L Implementiamo un sottoinsieme L’ di L L’intera macchina astratta di L viene realizzata utilizzando L’ (kernel di L) come linguaggio di implementazione È una tecnica molto usata nell’implementazione di sistemi operativi Facilita la portabilità

Meccanismi di astrazione La gerarchia di macchine astratte non termina con l’implementazione di un linguaggio di alto livello L Un programma in L aggiunge un ulteriore livello alla gerarchia, estendendo la macchina intermedia di L con nuovi componenti (di solito operazioni sui tipi di dato) In pratica si può vedere la programmazione come definizione e realizzazione di macchine astratte

Programmazione come realizzazione di macchine astratte In relazione alle metodologie di programmazione per livelli di astrazione: Dal basso verso l’alto Dall’alto verso il basso Mette in evidenza l’importanza dei meccanismi di astrazione offerti dal linguaggio

Meccanismi di astrazione dei linguaggi Sottoprogrammi (tutti i linguaggi) Definizione di nuovi tipi di dato e tipi di dato astratti (classi) (solo pochi linguaggi moderni) Non è chiaro quali siano i meccanismi per astrarre le altre componenti dei linguaggi (gestione memoria, sequenza) Alcuni (pochissimi) linguaggi permettono di astrarre tutto con relativa facilità con la metaprogrammazione (es. Implementazione di un linguaggio tramite definizione della sua sintassi e semantica denotazionale in ML)

Astrazione In qualunque linguaggio si può realizzare qualsiasi astrazione Da considerare Quanto costa realizzare questa astrazione Quanto l’astrazione è facile da usare