I nomi sono sequenze di caratteri usate per denotare qualcos’altro; nei linguaggi di programmazione i nomi sono spesso degli identificatori (sequenze alfanumeriche).
Un nome si deve riferire ad un oggetto denotabile, che può essere:
L’associazione fra nome ed oggetto denotato si chiama binding. Un binding può essere statico o dinamico.
L’ambiente è un insieme di associazioni nomi-oggetti esistenti a run-time in uno specifico punto del programma al momento dell’esecuzione. Lo stesso nome potrebbe infatti denotare oggetti diversi in punti diversi del programma.
La dichiarazione è il meccanismo con cui si crea un’associazione in ambiente.
Un’altra caratteristica degli ambienti è l’aliasing, ovvero quando nomi diversi denotano lo stesso oggetto, gli esempi più classici sono i passaggi per riferimento e i puntatori.
Nei linguaggi moderni l’ambiente è strutturato in blocchi: un blocco è una regione del programma (identificata da un simbolo di inizio e uno di fine) che può contenere informazioni locali a quella regione.
Il vantaggio dei blocchi è che consentono un’agile gestione locale dei nomi pur mantenendo un certo livello di chiarezza e libertà.
La caratteristica fondamentale dei blocchi è che l’unico modo per sovrapporli è annidandoli: non può esistere una condizione in cui un blocco A contiene un blocco B che termina dopo che è terminato il blocco A.