La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Le funzioni a tempo di esecuzione

Presentazioni simili


Presentazione sul tema: "Le funzioni a tempo di esecuzione"— Transcript della presentazione:

1 Le funzioni a tempo di esecuzione
Record di attivazione AN FI Funzioni Run Time

2 Invocazione di una funzione P(<args>)
creazione di una nuova attivazione (istanza) del servitore P allocazione di memoria per gli argomenti e le variabili locali trasferimento degli argomenti trasferimento del controllo esecuzione del codice della funzione AN FI Funzioni Run Time

3 Il modello di valutazione applicativo
valutazione del nome della funzione (determinazione del codice da applicare); determinazione degli argomenti da sostituire ai parametri formali; avviene valutando le espressioni specificate al momento della invocazione applicazione del codice agli argomenti. AN FI Funzioni Run Time

4 AN FI 98-99 Funzioni Run Time
Esempio public double try(double a, double b){ return ( a==0 ) ? 1 : b; } Cliente: double x =1.0; double y = 2.0; try( x,y ) AN FI Funzioni Run Time

5 AN FI 98-99 Funzioni Run Time
Valutazione Lega a al valore 1 Lega b al valore 2 return (a == 0) ? 1 : b; //con a=1, b=2 ________________________ Risultato: 2 AN FI Funzioni Run Time

6 Valutazione: un nuovo caso
double x = 0.0; try( x,1/x ) Il corpo della funzione non viene eseguito in quanto la valutazione di 1/x porta ad overflow. _______________________ Risultato: Run-Time Error AN FI Funzioni Run Time

7 Meccanismi di trasferimento degli argomenti
Data la chiamata f(X), X viene trasferito a f per valore o copia (by value): si trasferisce il valore di X Oppure (in altri linguaggi) per indirizzo (by reference): si trasferisce l’indirizzo di X per valore-risultato (by value-result): si copia il valore di X alla chiamata e alla terminazione della funzione AN FI Funzioni Run Time

8 AN FI 98-99 Funzioni Run Time
L’environment La definizione di una funzione introduce un nuovo binding nell’environment di definizione della funzione (in C il global environment). Al momento dell’invocazione, si crea un nuovo environment composto da un frame che contiene i binding dei parametri e degli identificatori dichiarati localmente alla funzione AN FI Funzioni Run Time

9 Organizzazione della memoria
Area codice e Area dati. L’area dati e' a sua volta differenziata in tre parti: un' area dati globali, uno stack uno heap. AN FI Funzioni Run Time

10 AN FI 98-99 Funzioni Run Time
Heap Lo heap e’ l’area di memoria destinata alle variabili dinamiche. AN FI Funzioni Run Time

11 AN FI 98-99 Funzioni Run Time
Stack Lo stack (pila) contiene la rappresentazione a frame dell'environment corrente di esecuzione. Il frame relativo all’attivazione di una funzione e’ rappresentati da una struttura di dati detta record di attivazione. AN FI Funzioni Run Time

12 AN FI 98-99 Funzioni Run Time
Record di attivazione Viene creato al momento della invocazione di una funzione e distrutto (deallocato) al temine della esecuzione della funzione stessa. Poiche' le funzioni terminano in modo LIFO la zona di memoria riservata ai RA puo' essere gestita in modo efficiente attraverso una struttura a pila AN FI Funzioni Run Time

13 AN FI 98-99 Funzioni Run Time
Record di attivazione AN FI Funzioni Run Time

14 AN FI 98-99 Funzioni Run Time
Esempio: fattoriale Impostazione sintatticamente ricorsiva che da’ luogo a un processo computazionale ricorsivo int fact( int n ){ return(n==0) ? 1 : n*fact(n-1); } Cliente: fact( 3 ) AN FI Funzioni Run Time

15 AN FI 98-99 Funzioni Run Time
Record di attivazione DL fact(3) 3 RA n n*fact(n-1); 2 fact(2) n*fact(n-1); n 1 fact(1) n*fact(n-1); n -> 1 fact(0) n AN FI Funzioni Run Time

16 AN FI 98-99 Funzioni Run Time
fact(3) fact(3) 3 * fact(2) fact(2) 2 * fact(1) fact(1) 1 * fact(0) fact(0) =1 AN FI Funzioni Run Time

17 AN FI 98-99 Funzioni Run Time
Fact1 int fact1( int n, int v, int k ){ return (n==k)?V:fact1(n,v*(k+1),k+1); } v k DL RA n v k AN FI Funzioni Run Time

18 AN FI 98-99 Funzioni Run Time
fact1(3,1,0) fact(3,1,0) fact(3,1*1,1) fact(3,1,1) fact(3,1*2,2) fact(3,2,2) fact(3,2*3,3) fact(3,6,3) =6 SL | RTA | DL 3 1 SL | RTA | DL 3 1 SL | RTA | DL 3 2 SL | RTA | DL 3 6 AN FI Funzioni Run Time

19 AN FI 98-99 Funzioni Run Time
Definizioni AN FI Funzioni Run Time

20 Ambiente lessicale e dinamico
L'ambiente lessicale e' l'ambiente in cui compare la definizione della funzione. L'ambiente dinamico e' l'ambiente presente al momento di una particolare attivazione della funzione. AN FI Funzioni Run Time

21 AN FI 98-99 Funzioni Run Time
Chiusura lessicale L’oggetto computazionale che correla una espressione con l’environment da usare nella sua valutazione prende il nome di chiusura e in particolare di chiusura lessicale nel caso in cui l’ambiente sia quello di definizione della espressione AN FI Funzioni Run Time

22 Tempo di vita delle variabili
e' il periodo di tempo per cui un'area di memoria e' allocata ad una variabile. In caso di allocazione statica, il tempo di vita e' di norma quello del programma. In caso di allocazione dinamica, il tempo di vita della variabile puo' dipendere dal tempo di vita dell'unita' di programma (blocco) in cui e' avvenuta la allocazione. AN FI Funzioni Run Time

23 Categorie di variabili
variabili statiche: create prima della esecuzione che vivono per tutto il tempo di vita del programma; variabili semistatiche: e' nota staticamente l'occupazione complessiva di memoria. Verranno create dinamicamente; variabili semidinamiche: create all'atto della attivazione del blocco in cui sono dichiarate e la cui occupazione di memoria e' nota solo al momento della creazione; variabili dinamiche: l’ occupazione complessiva di memoria cambia durante la esecuzione del programma. AN FI Funzioni Run Time

24 Modello di valutazione normale
la determinazione degli argomenti avviene con sostituzioni testuali dei valori attuali ai parametri AN FI Funzioni Run Time

25 AN FI 98-99 Funzioni Run Time
Valutazione int x = 0; try( x,1/x ) lega a alla chiusura x/envCaller lega b alla chiusura y/envCaller essendo envCaller l’ambiente al momento della chiamata return (eval(x,envCaller) == 0) ? 1 : eval(y, envCaller) ________________________ Risultato: 1 AN FI Funzioni Run Time


Scaricare ppt "Le funzioni a tempo di esecuzione"

Presentazioni simili


Annunci Google