Sono auto-apprendimento del Pragmatic Language Programming di Michael L. Scott. La seguente citazione spiega come il binding profondo e il binding superficiale sono diversi in presenza di scope statico:
program binding_example(input, output); procedure A(I : integer; procedure P); procedure B; begin writeln(I); end; begin (* A *) if I > 1 then P else A(2, B); end; procedure C; begin end; begin (* main *) A(1, C); end.
Figure 3.15 contains a Pascal program that illustrates the impact of deep binding rules in the presence of static scoping. When B is called via formal parameter P, two instances of I exist. Because the closure for P was created in the initial invocation of A, B uses that invocation’s instance of I in its writeln statement, and the output is a 1.
With shallow binding it would print a 2.
-
In primo luogo sono nuovo di Pascal. È corretto che nel programma, lì sono quattro parti separate:
-
la definizione della procedura
A
, che definisce solo la proceduraB
-
un blocco denominato
A
-
la definizione della procedura
C
-
un blocco denominato
main
?
Durante l'esecuzione del programma,
-
è il blocco
main
prima eseguito e poi il bloccoA
? -
Perché dice che "Quando B viene chiamato tramite il parametro formale P, esistono due istanze di I"?
-
-
Ora per capire la differenza tra attacchi profondi e superficiali in presenza di scope statico
-
Perché in presenza di scope statiche e rilegature profonde, il programma stampa
1
? -
Perché in presenza di oscillazione statica e rilegatura poco profonda, il programma stampa
2
?
-
Grazie.