Scope dinamico e associazioni non attive

agnenga1
Per piacere, qualcuno mi può spiegare perché la variabile locale $v$ del blocco $B$ dello stralcio riportato sotto non debba essere *più visibile* nel contesto presentato di scope dinamico? In precedenza veniva data questa definizione di scope dinamico: Secondo la regola dello s.dinamico, l'associazione valida per un nome X, in un qualsiasi punto P di un programma, è la più recente (in senso temporale) associazione creata per X che sia ancora attiva quando il flusso d'esecuzione arriva a P.

Allora, $B$ pare attivo (come dichiarato nel testo sotto la figura dei Record d'Attivazione), e non vedo perché l'associazione $v$ debba essere disattivata non essendo un nome ridefinito a livello di blocchi successivi (come invece capita per $x$ e $w$). Leggendo la parte del testo che precede questo esempio è impossibile capire il senso di questa affermazione. Secondo voi a quale caso si fa riferimento nel testo citato? Forse al fatto che alcune dichiarazioni sono visibili solo all'interno del blocco che le contiene, e quindi in altri blocchi si perde la visibiltà?

(Schema dei blocchi: Blocco $A$ $sup$ i blocchi $B$ e $C$; il blocco $C$ $sup$ il blocco $D$; le variabili locali dei blocchi sono quelle di Figura 5.17.)


Risposte
apatriarca
Non è molto chiaro il testo, ma credo che \(v\) non sia più visibile nel blocco \(D\) essendo locale al solo blocco \(B\).

agnenga1
È quello che penso anch'io. Non ho esperienza di linguaggi con scope dinamico, ma in tutte le pagine che precedono questo esempio non c'è niente che renda chiaro il discorso. Del resto esistono parole chiave che limitano la possibilità di riferirsi a nomi al di fuori del contesto della dichiarazione o di certi insiemi di blocchi in qualche modo connessi (p.es. variabili dichiarate private in una classe, ma lì lo scope è statico, per quel che ne so, anche se a livello logico non mi sembra che il discorso sia precluso a un ambito dinamico). Comunque sia, grazie per il parere che hai dato.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.