linguaggi/s02/20260219.md
... ...
@@ -1,12 +1,187 @@
1 1
---
2 2
title: Linguaggi
3
-description:
3
+description: Lezione 19 febbraio 2026
4 4
published: true
5 5
date: 2026-02-19T06:38:48.738Z
6
-tags:
6
+tags:
7 7
editor: markdown
8 8
dateCreated: 2026-02-19T06:38:48.738Z
9 9
---
10 10
11
-# Header
12
-Your content here
... ...
\ No newline at end of file
0
+# Variabili
1
+
2
+L’ambiente (in uno specifico blocco) può essere
3
+suddiviso in:
4
+– ambiente locale: associazioni create all’ingresso nel blocco - variabili locali - parametri formali
5
+– ambiente non locale : associazioni ereditate da altri blocchi
6
+– ambiente globale: quella parte di ambiente non locale relativo alle associazioni comuni a tutti i blocchi - dichiarazioni esplicite di variabili globali - dichiarazioni del blocco più esterno - associazioni esportate da moduli ecc.
7
+
8
+## Operazioni sugli oggetti denotabili
9
+
10
+• Creazione
11
+• Accesso
12
+• Modifica (se l’oggetto è modificabile)
13
+• Distruzione
14
+
15
+Creazione e distruzione di un oggetto non coincidono con creazione e distruzione dei legami per esso
16
+Alcuni eventi fondamentali
17
+
18
+1. Creazione di un oggetto
19
+2. Creazione di un legame per l’oggetto
20
+3. Riferimento all’oggetto, tramite il legame
21
+4. Disattivazione di un legame
22
+5. Riattivazione di un legame
23
+6. Distruzione di un legame
24
+7. Distruzione di un oggetto
25
+ Il tempo tra 1 e 7 è la vita (o il tempo di vita: lifetime)
26
+ dell’oggetto
27
+ Il tempo tra 2 e 6 è la vita dell’associazione
28
+
29
+Nota: La vita di un oggetto non coincide con la vita dei legami per quell’oggetto
30
+• Vita dell’oggetto più lunga di quella del legame:(variabile passata ad una proc per riferimento)
31
+
32
+```
33
+procedure P (var X:integer); begin… end;
34
+…
35
+var A:integer;
36
+…
37
+P(A);
38
+```
39
+
40
+- area di mem allocata dinamicamente
41
+
42
+```
43
+int *X, *Y;
44
+…
45
+X = (int *) malloc (sizeof (int));
46
+Y=X;
47
+…
48
+free (X);
49
+X=null;
50
+```
51
+
52
+## Scope
53
+
54
+Una dichiarazione locale ad un blocco è visibile in quel blocco e in tutti i blocchi in esso annidati, a meno che non intervenga in tali blocchi una nuova dichiarazione dello stesso nome (che nasconde, o maschera, la precedente)
55
+
56
+- in presenza di procedure (cioè di blocchi che sono eseguiti in posizioni diverse dalla loro definizione)
57
+ – in presenza ambiente non locale (e non globale)
58
+
59
+```
60
+{int x=10;
61
+void foo () {
62
+ x++;
63
+ }
64
+void fie (){
65
+ int x = 0;
66
+ foo();
67
+ }
68
+fie();
69
+}
70
+```
71
+
72
+quale x incrementa foo?
73
+
74
+un riferimento non-locale in un blocco B puo essere risolto:
75
+
76
+- nel blocco che include sintatticamente B (**scope statico**)
77
+- nel blocco che e eseguito immediatamente prima di B (**scope dinamico**)
78
+
79
+![scopeStatico](assets/imgs/scopeStatico.png)
80
+
81
+### Scope dinamico
82
+
83
+Un nome non locale e' risolto nel blocco attivato piu' di recente e non ancora disattivato.
84
+![20260219_2026-02-19_14-06-31](assets/imgs/20260219_2026-02-19_14-06-31.png)
85
+
86
+Scope statico: indipendenza dalla posizione
87
+![20260219_2026-02-19_14-07-26](assets/imgs/20260219_2026-02-19_14-07-26.png)
88
+Il corpo di foo e' parte dello scope della x piu esterna
89
+la chiamata di foo e' compresa nello scope della x piu interna
90
+foo puo essere chiamata in molti contesti diversi
91
+l'unico modo in cui foo puo essere compilata in modo univoco e' che il riferimento a x sia sempre quello piu esterno.
92
+
93
+La chiamata di foo interna a file e quella nel main accedono alla stessa variabile: la x esterna.
94
+
95
+Scope statico: indipendenza dai nomi locali
96
+
97
+![20260219_2026-02-19_14-11-29](assets/imgs/20260219_2026-02-19_14-11-29.png)
98
+
99
+la modifica del locale x in y dentro fie:
100
+
101
+- modifica la semantica del programma in scope dinamico
102
+- non ha alcun effetto in scope statico
103
+
104
+Scope dinamico: specializzare una funzione
105
+
106
+visualizza e' una procedura che rende a colore sol video una certa forma
107
+![20260219_2026-02-19_14-13-32](assets/imgs/20260219_2026-02-19_14-13-32.png)
108
+
109
+Scope statico vs dinamico
110
+
111
+Scope statico:
112
+
113
+- informazione completa dal testo del programma
114
+- le associazioni sono note a tempo di compilazione
115
+- dunque: principi di indipendenza
116
+- concettualmente piu complesso da implementare ma piu efficiente (algol, pascal, C, java)
117
+
118
+Scope dinamico:
119
+
120
+- informazione derivata dall'esecuzione
121
+ – spesso causa di programmi meno ``leggibili’’
122
+ – concettualmente più semplice da implementare, ma meno efficiente
123
+ – Lisp (alcune versioni), Perl
124
+
125
+Differiscono solo in presenza congiunta di
126
+– ambiente non locale e non globale
127
+– procedure
128
+
129
+Algol, Pascal, Ada, Java permettono di annidare blocchi di
130
+sottoprogrammi
131
+non possibile in C
132
+
133
+Questo non vuol dire che la regola di scoping (statico o
134
+dinamico) sia indifferente in C !
135
+
136
+Determinare l'ambiente
137
+
138
+L'ambiente e' dunque determinato da:
139
+
140
+- regola di scope (dinamico o statico)
141
+- regole specifiche (es. dichiarare la variabile prima di assegnarla)
142
+
143
+# Gestione della memoria
144
+
145
+Statica a pila, con heap. Implementazione delle regole di scope.
146
+
147
+Tipi di allocazione della memoria
148
+vita di un oggetto corrisponde (in genere) con tre meccanismi di allocazione di memoria:
149
+
150
+- statica: memoria allocata a tempo di compilazione (es. variabili globali)
151
+- dinamica: memoria allocata a tempo di esecuzione (pila, heap)
152
+
153
+## Allocazione statica
154
+
155
+Un oggetto ha un indirizzo assoluto che è mantenuto per tutta l’esecuzione del programma
156
+Solitamente sono allocati staticamente:
157
+– variabili globali
158
+– variabili locali sottoprogrammi (senza ricorsione)
159
+– costanti determinabili a tempo di compilazione
160
+– tabelle usate dal supporto a run-time
161
+
162
+Spesso usate zone protette di memoria
163
+
164
+Nota:E invece se devo assegnare staticamente mem a una funz quanta mem assegno?
165
+
166
+un programma con 3 funz da 1k di mem
167
+
168
+quanta mem alloco? 3k? 1k?
169
+Devo vedere quante chiamate alle funz ho (1 chiamata = 1k mem occupata)
170
+Se c'e ricorsione e' un casino -> non posso determinare prima quanta mem allocare
171
+quindi per permettere la ricorsione **devo** usare allocazione dinamica della mem.
172
+Es.
173
+FORTRAN: non ammette la ricorsione
174
+![20260219_2026-02-19_14-43-50](assets/imgs/20260219_2026-02-19_14-43-50.png)
175
+
176
+![20260219_2026-02-19_14-40-34](assets/imgs/20260219_2026-02-19_14-40-34.png)
linguaggi/s02/assets/imgs/20260219_2026-02-19_14-06-31.png
... ...
Binary files /dev/null and b/linguaggi/s02/assets/imgs/20260219_2026-02-19_14-06-31.png differ
linguaggi/s02/assets/imgs/20260219_2026-02-19_14-07-26.png
... ...
Binary files /dev/null and b/linguaggi/s02/assets/imgs/20260219_2026-02-19_14-07-26.png differ
linguaggi/s02/assets/imgs/20260219_2026-02-19_14-11-29.png
... ...
Binary files /dev/null and b/linguaggi/s02/assets/imgs/20260219_2026-02-19_14-11-29.png differ
linguaggi/s02/assets/imgs/20260219_2026-02-19_14-13-32.png
... ...
Binary files /dev/null and b/linguaggi/s02/assets/imgs/20260219_2026-02-19_14-13-32.png differ
linguaggi/s02/assets/imgs/20260219_2026-02-19_14-40-34.png
... ...
Binary files /dev/null and b/linguaggi/s02/assets/imgs/20260219_2026-02-19_14-40-34.png differ
linguaggi/s02/assets/imgs/20260219_2026-02-19_14-43-50.png
... ...
Binary files /dev/null and b/linguaggi/s02/assets/imgs/20260219_2026-02-19_14-43-50.png differ
linguaggi/s02/assets/imgs/scopeStatico.png
... ...
Binary files /dev/null and b/linguaggi/s02/assets/imgs/scopeStatico.png differ
linguaggi/s02/assets/imgs/vv.png
... ...
Binary files /dev/null and b/linguaggi/s02/assets/imgs/vv.png differ