35
Programmazione II Lezione 5 Daniele Sgandurra [email protected] 2/11/2010 1/35 Programmazione II Lezione 5 2/11/2010

Programmazione II - Lezione 5 - di.unipi.itdaniele/teaching/pr2-10/pr2-05.pdf · Problema piu generale: si pu o stabilire, mediante un analizzatore statico, se un programma su un

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Programmazione IILezione 5

Daniele Sgandurra

[email protected]

2/11/2010

1/35 Programmazione II Lezione 5 2/11/2010

Sommario

1 FondamentiProblema della FermataMacchina di TuringIndecidibilita

2 Nomi e AmbienteNomiAmbiente

2/35 Programmazione II Lezione 5 2/11/2010

Fondamenti

Parte I

Fondamenti

3/35 Programmazione II Lezione 5 2/11/2010

FondamentiProblema della FermataMacchina di TuringIndecidibilita

Problemi di Semantica Statica

Semantica statica:

controlli sul programma al momento della compilazione:

es., e possibile rilevare se un programma puo generare unadivisione per zero durante una sua qualsiasi esecuzione?

Problema piu generale: si puo stabilire, mediante un analizzatore statico,se un programma su un certo dato di input possa andare in ciclo?

4/35 Programmazione II Lezione 5 2/11/2010

FondamentiProblema della FermataMacchina di TuringIndecidibilita

Il Problema della Fermata

Fissato un linguaggio di programmazione L: dato un programma P e un input x ,indichiamo con P(x) il risultato della computazione di P su x .

in generale, il programma P potrebbe non terminare su x per effetto di un cicloo di una ricorsione infinita.

1 f ( i n t x )2 {3 . . .4 f (x−1) ; // R i c o r s i o n e i n f i n i t a5 }6 i n t main ( )7 {8 . . .9 i f ( x )

10 f ( x ) ;11 w h i l e ( x != 0) ; // A t t e n z i o n e a l ‘ ‘ ; ’ ’ ! ! C i c l o i n f i n i t o12 {13 . . .14 x = x − 1 ;15 }16 }

5/35 Programmazione II Lezione 5 2/11/2010

FondamentiProblema della FermataMacchina di TuringIndecidibilita

Il Problema della Fermata

Esiste un programma H tale che, ricevuti in ingresso un programma P nellinguaggio L e input x termina stampando Sı se P(x) termina e terminastampando NO se P(x) va in ciclo?

Proprieta di H:

ha due input;deve terminare sempre;deve funzionare per ogni programma P in L e input x .

Ragionamento per assurdo: supponiamo che H esista. Da questo deriverauna contraddizione.

6/35 Programmazione II Lezione 5 2/11/2010

FondamentiProblema della FermataMacchina di TuringIndecidibilita

Il Problema della Fermata

1 Supponiamo che esista un programma H con le caratteristiche precedenti.

2 Possiamo scrivere un programma K che prende un solo input (costituitoda un programma) cosı composto: il programma K sull’input P terminastampando Sı se H(P, P) stampa NO e va in ciclo se H(P, P) stampa Sı:

K(P) =

Sı se P(P) non terminanon termina se P(P) termina

3 Eseguiamo K con input K stesso, cioe eseguiamo K(K). Sostituiamo Kal posto di P nella formula precedente, ottenendo:

K(K) =

Sı se K(K) non terminanon termina se K(K) termina

4 Assurdo: K(K) termina (stampando Sı) quando K(K) non termina e nontermina quando K(K) termina.

5 Quindi, H non esiste.

7/35 Programmazione II Lezione 5 2/11/2010

FondamentiProblema della FermataMacchina di TuringIndecidibilita

Il Problema della Fermata

Risultato generale: un programma come H non esiste in nessunlinguaggio di programmazione.

Esistono piu problemi e funzioni di quanti programmi possiamo scrivere.

Affermare che un problema e indecidibile significa che non esiste alcun

programma che:

1 funzioni per argomenti arbitrari;2 termini sempre;3 discrimini gli argomenti soluzione del problema da quelli che non lo

sono.

Altri problemi indecidibili:

verificare se un programma calcola una funzione costante;verificare se un programma, dato un input, generera un erroredurante l’esecuzione;verificare se due programmi calcolano la stessa funzione;...

8/35 Programmazione II Lezione 5 2/11/2010

FondamentiProblema della FermataMacchina di TuringIndecidibilita

Macchina di Turing

Formalismo degli anni 30, inventata da Alan M. Turing.

Modello di calcolo.

Esiste una macchina di Turing (universale) che fa da interprete per tutte

le altre:

presa in ingresso la descrizione di una generica macchina e un input,esegue la computazione di quella macchina su quell’input.

9/35 Programmazione II Lezione 5 2/11/2010

FondamentiProblema della FermataMacchina di TuringIndecidibilita

Macchina di Turing

Nastro infinito, diviso in celle.

In ciascuna cella puo essere scritto un unico simbolo appartenente a unalfabeto finito Σ = {s1, . . . , sn} o essere vuota (simbolo s0);

La macchina e gestita da un controllo con un numero finito di statiq0, . . . qn.

A ogni passo della computazione, la macchina legge un simbolo dalnastro: a seconda dello stato corrente della macchina e del simbolo letto,il controllo decide cosa scrivere sul nastro, se muoversi a sinistra o destrae in quale nuovo stato passare.

Esempio di configurazione: (qi , sj). E una fase di calcolo.

Esempio di operazione atomica: si S qj : scrive si nella cella osservata, sisposta a sinistra e il nuovo stato e qj .

10/35 Programmazione II Lezione 5 2/11/2010

FondamentiProblema della FermataMacchina di TuringIndecidibilita

Formalismi per la Calcolabilita

Una funzione e calcolabile da un linguaggio L se esiste un programma in

L che la calcola:

la funzione parziale f : A → B e calcolabile se esiste un programmaP tale che per ogni elemento a ∈ A, P(a) termina fornendo inoutput una codifica di f (a) se f (a) e definita e non termina se fnon e definita per a.

Turing-completezza: tutti i formalismi e linguaggi possono essere simulati

l’un l’altro:

tutti i linguaggi di programmazione;funzioni ricorsive generali di Church-Godel-Kleene;lambda calcolo.

Tutti questi formalismi calcolano le stesse funzioni calcolate dallemacchine di Turing.

Ogni algoritmo e esprimibile in qualsiasi linguaggio di programmazione.

11/35 Programmazione II Lezione 5 2/11/2010

FondamentiProblema della FermataMacchina di TuringIndecidibilita

Indecidibilita

Indecidibilita = esistono funzioni che non sono calcolabili mediante unamacchina di Turing.

Tesi di Church-Turing: tutte le funzioni calcolabili lo sono tramite unsistema formale equivalente alla macchine di Turing (o alle funzioniricorsive).

12/35 Programmazione II Lezione 5 2/11/2010

FondamentiProblema della FermataMacchina di TuringIndecidibilita

Esistono Piu Funzioni che Algoritmi

Dato il linguaggio L, l’insieme dei programmi che si possono scrivere con

L e numerabile:

programma: stringa di caratteri codificati con numeri = numeronaturale (binario);esiste una funzione di ordinamento totale sui programmi scritti in L(Prog L ), ad es. l’ordinamento lessicografico;la cardinalita di Prog L coincide con quella di N.

Consideriamo F , l’insieme delle funzioni N → {0, 1}:

Teorema (Cantor): F non e numerabile;F ha una cardinalita maggiore di quella di N (quella dei numerireali).

13/35 Programmazione II Lezione 5 2/11/2010

FondamentiProblema della FermataMacchina di TuringIndecidibilita

Esistono Piu Funzioni che Algoritmi

Dimostrazione (per assurdo):

Supponiamo che F sia numerabile: F = {fj}j∈N .

Biezione con l’insieme B di tutte le sequenze (infinite) di cifre binarie:

bj,1, bj,2, . . . , bj,i dove bj,i = fj(i), per i , j ∈ N

Se F e numerabile, lo e anche B. Enumeriamolo tramite matrice:

b1,1, b1,2, b1,3, . . .b2,1, b2,2, b2,3, . . .b3,1, b3,2, b3,3, . . .

...

dove la riga j contiene la sequenza relativa alla funzione j-esima.

14/35 Programmazione II Lezione 5 2/11/2010

FondamentiProblema della FermataMacchina di TuringIndecidibilita

Esistono Piu Funzioni che Algoritmi

Sia b il complemento di b. Consideriamo la sequenza b1,1, b2,2, b3,3, . . . :

successione che e un elemento di B ma non appare nella matrice;ogni elemento sulla diagonale (bj,j) della matrice e diverso (percostruzione) dalla nuova successione (che ha valore bj,j): assurdo.

b1,1, b1,2, b1,3, . . .b2,1, b2,2, b2,3, . . .b3,1, b3,2, b3,3, . . .

...

Quindi, la cardinalita di F e strettamente maggiore di quella di N.

L’insieme dei programmi Prog L e “molto piu piccolo” dell’insieme dellepossibili funzioni.

15/35 Programmazione II Lezione 5 2/11/2010

Nomi e Ambiente

Parte II

Nomi e Ambiente

16/35 Programmazione II Lezione 5 2/11/2010

Nomi e AmbienteNomiAmbiente

Nomi

Nome: sequenza di caratteri usata per denotare una componente del

programma:

un oggetto (in senso generale);identificatori: token alfanumerici;simboli di operatori (primitivi): +, -, ...

Esempi:

v a r area : r e a l ;

dichiarazione del nome di una variabile (Pascal);

calcolaArea (b , h : r e a l ) : r e a l ;

dichiarazione del nome di una funzione (Pascal).

17/35 Programmazione II Lezione 5 2/11/2010

Nomi e AmbienteNomiAmbiente

Aliasing

Il nome e l’oggetto denotato non sono la stessa cosa:

nome = sequenza di caratteri;denotazione = oggetto complesso (variabile, funzione, tipo, etc).

Stesso oggetto con molti nomi (alias).

E anche possibile riutilizzare gli stessi nomi in parti diverse del

programma per componenti diverse:

stesso nome per piu oggetti.

18/35 Programmazione II Lezione 5 2/11/2010

Nomi e AmbienteNomiAmbiente

Astrazione

L’uso dei nomi realizza un primo meccanismo elementare di astrazione.

Astrazione sui dati:

es., usare il nome di una variabile permette di astrarre dallalocazione di memoria, dall’indirizzo, etc.:

area := ( b ∗ h ) / 2 ;

ambiente: implementazione del meccanismo che determinal’associazione nome-locazione.

Astrazione sul controllo:

un nome associato a un insieme di comandi (procedura) eregole per determinare la visibilita e l’utilizzo del sottoprogramma(interfaccia).

19/35 Programmazione II Lezione 5 2/11/2010

Nomi e AmbienteNomiAmbiente

Oggetti Denotabili

Definiti dall’utente:

variabili, parametri formali, sottoprogrammi, tipi, etichette, moduli,costanti, eccezioni, ...

Definiti dal linguaggio:

tipi primitivi, operazioni primitive, costanti predefinite, paroleriservate, ...

20/35 Programmazione II Lezione 5 2/11/2010

Nomi e AmbienteNomiAmbiente

Progettazione Nomi

Qual e’ la lunghezza massima ammissibile?

Sono permessi caratteri di connessione (es., “ ” (underscore))?

C’e differenza tra maiuscole e minuscole (case-sensitive)?

Le parole speciali sono considerate parole riservate o parole chiave?

21/35 Programmazione II Lezione 5 2/11/2010

Nomi e AmbienteNomiAmbiente

Progettazione Nomi

Se la loro lunghezza massima e troppo corta, i nomi difficilmente possono

essere significativi (cioe, possono suggerire un significato):

FORTRAN I: max 6;COBOL: max 30;FORTRAN 90 e ANSI C: max 31;Ada e Java: nessun limite;C++: nessun limite, ma gli implementatori possono imporre unlimite.

Connettori:

Pascal, Modula-2 e FORTRAN 77 non li permettono;altri lo permettono.

22/35 Programmazione II Lezione 5 2/11/2010

Nomi e AmbienteNomiAmbiente

Progettazione Nomi

Nomi case-sensitive:

svantaggio per la leggibilita (?):

ad es., nomi che appaiono simili sono diversi.

in C++ e Java alcuni nomi predefiniti mescolano maiuscole o minuscole

(notazione “a gobba di cammello”):

ad es., IndexOutOfBoundsException.

in C, C++ e Java i nomi sono case-sensitive:

non avviene in altri linguaggi.

23/35 Programmazione II Lezione 5 2/11/2010

Nomi e AmbienteNomiAmbiente

Nomi: Parole Riservate

Aiuto alla leggibilita.

Una parola chiave e una parola che e “speciale” solo in certi contesti;

es., in Fortran:

Rea l VarName

Real e un tipo di dato seguito da un nome, pertanto si trattadell’uso come parola chiave;

Rea l = 3 . 4

Real e una variabile in questo caso.

Una parola riservata e una parola speciale che non puo essere usata perun nome definito dall’utente.

24/35 Programmazione II Lezione 5 2/11/2010

Nomi e AmbienteNomiAmbiente

Binding (1)

Un binding e un’associazione, come quella che avviene tra un attributo eun’entita o tra un operazione e un simbolo (operatore).

Binding-time: momento in cui avviene il binding:

Language design-time (progettazione del linguaggio):

collega i nomi primitivi (costanti, tipi e operatori).

Language implementation-time (implementazione):

associare un tipo floating point a una rappresentazione.

Programming-time (scrittura del programma):

definisce le associazioni che saranno portate a termine nellafase successiva.

25/35 Programmazione II Lezione 5 2/11/2010

Nomi e AmbienteNomiAmbiente

Binding (2)

Binding-time: momento in cui avviene il binding:

Compile-time (compilazione del programma):

associare una variabile a un tipo (es., variabili globali in C).

Linking-time (collegamento del programma):

associare un nome a una variabile esterna.

Loading-time (caricamento del programma):

associare una variabile a una cella di memoria (es., unavariabile static in C).

Run-time (esecuzione del programma):

associare una variabile locale non statica a una cella dimemoria (es., puntatori/riferimenti a variabili in memoriadinamica).

26/35 Programmazione II Lezione 5 2/11/2010

Nomi e AmbienteNomiAmbiente

Binding Statico / Dinamico

Un’associazione e statica se avviene prima dell’esecuzione (run-time) eresta immutata per tutta l’esecuzione del programma.

Un’associazione e dinamica se avviene per la prima volta durantel’esecuzione e puo essere cambiata nel corso dell’esecuzione delprogramma.

27/35 Programmazione II Lezione 5 2/11/2010

Nomi e AmbienteNomiAmbiente

Ambiente

Ambiente (Referencing Environment)

L’insieme delle associazioni fra nomi e oggetti denotabili esistenti a run-time inuno specifico punto del programma e in uno specifico momento dell’esecuzione.

Usualmente si escludono quelle definite dal linguaggio.

Nella macchina astratta: per ogni nome e per ogni sezione del codicedetermina l’associazione corretta.

28/35 Programmazione II Lezione 5 2/11/2010

Nomi e AmbienteNomiAmbiente

Dichiarazione

Una dichiarazione e un costrutto che permette di introdurreun’associazione nell’ambiente:

1 i n t x ;2 i n t f ( ) {3 r e t u r n 0 ;4 }5 type T = i n t ;

Riga 1: dichiarazione di una variabile.Riga 2: dichiarazione di una funzione.Riga 5: dichiarazione di un nuovo tipo.

29/35 Programmazione II Lezione 5 2/11/2010

Nomi e AmbienteNomiAmbiente

Ambiente: Molteplici Associazioni

1 { i n t pippo ;2 pippo = 2 ;3 { c h a r pippo ;4 pippo = ’ a ’ ;5 }6 }

Stesso nome, oggetti diversi:

il nome pippo denota due variabili diverse;puo dipendere anche dal momento in cui il flusso raggiunge unasezione di codice:

es: parametri o nomi locali nei sottoprogrammi ricorsivi.

30/35 Programmazione II Lezione 5 2/11/2010

Nomi e AmbienteNomiAmbiente

Ambiente: Molteplici Associazioni

Aliasing: diversi nomi per lo stesso oggetto:

es.: passaggio parametri per riferimento (visibile sia la variabilepassata sia il parametro che ne ha preso l’indirizzo).es.: riferimenti molteplici a uno stessa variabile dinamica. Cosastampa questo codice?

1 i n t ∗px , ∗py ;2 px = ( i n t ∗) malloc ( s i z e o f ( i n t ) ) ;3 ∗px = 5 ;4 py = px ;5 ∗py = 1 0 ;6 write (∗ px ) ;

31/35 Programmazione II Lezione 5 2/11/2010

Nomi e AmbienteNomiAmbiente

Blocco

Blocco

Regione testuale del programma identificata da segnalatori di inizio e fine chepossa contenere dichiarazioni locali a tale regione.

A partire da ALGOL 60:

Algol e derivati: begin ... end;C e derivati: { ... };Lisp: let ... in ...;

Blocco inline (anonimo): puo comparire dovunque possa comparire uncomando semplice.

Blocco associato a un sottoprogramma: corpo del sottoprogramma estesocon le dichiarazioni dei parametri.

32/35 Programmazione II Lezione 5 2/11/2010

Nomi e AmbienteNomiAmbiente

Ambiente di un Blocco

L’ambiente cambia con l’entrata e l’uscita dai blocchi.

Un blocco e il costrutto di granularita minima cui e associabile unambiente costante.

Ambiente di un blocco: ambiente corrente quando il blocco viene

eseguito:

costituito soprattutto dai binding per i nomi dichiarati localmentenel blocco.

33/35 Programmazione II Lezione 5 2/11/2010

Nomi e AmbienteNomiAmbiente

Ambiente

Continua...

34/35 Programmazione II Lezione 5 2/11/2010

Nomi e AmbienteNomiAmbiente

Riferimenti

[1] Linguaggi di programmazione: principi e paradigmi (Cap. 3 e 4).

Maurizio Gabbrielli, Simone Martini.

35/35 Programmazione II Lezione 5 2/11/2010