Топ-100

Ambiente (programmazione)

Un ambiente, in informatica e nellambito della programmazione, è definito come linsieme di tutte le associazioni tra identificatori e posizioni di memoria. Più formalmente, l ambiente è una funzione che associa il dominio semantico degli identificatori a quello dei valori denotabili da identificatori, quali ad esempio le posizioni di memoria, le procedure, le funzioni:
Env = Id → {\displaystyle \rightarrow } DVal
Si noti che, poiché le posizioni di memoria contengono dei valori, esiste unulteriore funzione, detta store, che lega il dominio delle posizioni di memoria Loc, sottoinsieme di DVal in quello dei valori memorizzabili SVal, come ad esempio un intero o un file di input o output:
Store = Loc → {\displaystyle \rightarrow } SVal
Ovviamente lassociazione tra identificatore e valore associato, come ad esempio in una variabile, necessita dellapplicazione in sequenza delle due funzioni:
i → ρ l → σ v {\displaystyle \mathbf {i} \rightarrow _{\rho }\mathbf {l} \rightarrow _{\sigma }\mathbf {v} } dove i: identificatore ρ: ambiente l: posizione σ: store v: valore
In definitiva, si può dire che gli identificatori fanno riferimento, tramite lambiente, ad una posizione, ed a questa viene associato un valore, che può variare dinamicamente, attraverso lo store.

1. Struttura dellambiente
La definizione formale di ambiente introduce due situazioni particolari a cui gli identificatori possono sottostare:
aliasing in cui due identificatori diversi fanno riferimento alla stessa posizione, e quindi allo stesso valore.
sharing in cui uno stesso identificatore ha due diversi significati, dipendentemente dal contesto in cui viene usato;
Generalmente, le dichiarazioni possono modificare ambiente e store, mentre i comandi modificano solo lo store. Una dichiarazione infatti introduce un nuovo legame tra un identificatore ed una posizione, ed eventualmente modifica lo store associando un valore alla posizione; un comando può modificare il contenuto delle posizioni, ma non lassociazione tra identificatore e posizione tranne in pochi linguaggi che ne consentono la manipolazione diretta.
Per semplicità è possibile immaginare lambiente come linsieme di tutti i nomi visibili in un certo momento durante lesecuzione di un programma; informalmente, quindi, possono far parte dellambiente le variabili, le procedure, le costanti, le classi.
Lelemento significativo per la gestione dellambiente è il sottoprogramma, o blocco, che ne rappresenta quindi lunità basilare di gestione. Lambiente visibile attivo allinterno di un sottoprogramma è strutturato nel modo seguente:
ambiente globale, ossia le associazioni comuni a tutti i sottoprogrammi, quali le dichiarazioni presenti nel blocco più esterno, o quelle esportate da moduli;
ambiente non locale, ossia le associazioni ereditate da altri sottoprogrammi secondo le regole di scoping.
ambiente locale, ossia le associazioni create allingresso del sottoprogramma; ne sono un esempio i parametri formali di funzioni o procedure o le dichiarazioni locali;
Per semplicità, facciamo riferimento ai soli linguaggi imperativi, ricordando che per i linguaggi funzionali possono essere fatte considerazioni analoghe. Possiamo immaginare una struttura a blocchi come segue:
begin // inizio programma begin // inizio blocco 1 end // fine blocco 1 begin // inizio blocco 2 begin // inizio sottoblocco 2.1 end // fine sottoblocco 2.1 end // fine blocco 2 end // fine programma
Ogni sottoblocco può quindi avere delle proprie dichiarazioni nonché dei comandi che sono ovviamente dipendenti dal linguaggio impiegato.
Si noti che non tutti i linguaggi di programmazione supportano questi tre tipi di ambiente ad esempio il Prolog non possiede un ambiente non locale.

1.1. Struttura dellambiente Ambiente globale
Insieme di associazioni che vengono create nella parte più esterna del programma, e che normalmente sono visibili allinterno di ogni sottoprogramma o sottoblocco. In alcuni linguaggi possono essere visibili automaticamente, allinterno dei sottoblocchi, solo le associazioni tra identificatori e nomi di procedura o funzione, ma non tra identificatori e posizioni, a meno che ciò non venga esplicitamente richiesto.

1.2. Struttura dellambiente Ambiente locale
Insieme di associazioni che vengono create o attivate quando si entra in un sottoprogramma. Ad esempio, in Perl:
my $x=3; # dichiarazioni per lambiente globale my $y=$x; { # inizio sottoblocco my $z="foo"; # dichiarazioni per lambiente locale my $x=777; $y="$y$z$x"; } print "y vale $y, x vale $x\n"; print defined$z? "z vale $z\n": "z non esiste\n"); OUTPUT y vale 3foo777, x vale 3 OUTPUT z non esiste
Allentrata nel sottoblocco viene generato un ambiente locale in cui vengono ricopiate tutte le associazioni dellambiente globale, quindi vengono generate le associazioni di ambiente secondo quanto indicato nelle dichiarazioni.
Nellesempio, si noti che la seconda definizione di $x è locale al sottoblocco, e quindi maschera il valore globale. Ogni uso di $x allinterno del sottoblocco pertanto farà riferimento allambiente locale. Luso di $y, invece, è riferito allambiente globale, e ben si vede nelloutput generato. Si noti che alla chiusura del sottoblocco lambiente locale viene distrutto, pertanto le variabili dichiarate internamente non saranno più esistenti allesterno del blocco.

1.3. Struttura dellambiente Ambiente non locale
Insieme di associazioni che devono essere ricavate da altri sottoprogrammi seguendo le regole di scoping messe a disposizione dal linguaggio.
Si supponga che un sottoprogramma P contenga un riferimento al nome x che non è locale per P e non è globale. Tale riferimento dovrà essere quindi risolto nellambiente di qualche altro sottoprogramma. Vi saranno quindi due diverse possibilità:
ambiente non locale dinamico scoping dinamico - Il riferimento al nome x sarà risolto con lultima associazione per x presente nella catena di chiamate per P. Quindi in ogni attivazione di sottoprogramma o blocco viene generato un nuovo ambiente: in questo modo non è possibile stabilire a priori staticamente quale sarà lassociazione impiegata, in quanto sarà dipendente dal flusso di esecuzione del programma.
ambiente non locale statico scoping statico o lessicale - Il riferimento al nome x sarà risolto basandosi sulla struttura sintattica di nidificazione di blocchi e sottoprogrammi. Quindi lambiente non locale sarà quello di definizione del sottoprogramma e quindi statico, e non quello di applicazione e quindi dinamico.
Per maggior chiarezza si veda lesempio seguente, scritto in uno pseudolinguaggio:
01: Procedure B 02: var x. // definita in B 03: Procedure P 04: 05: endProc P 06: beginBlock A 07: Procedure Q 08: var x. // definita in Q, dentro il blocco A 09: Call P 10: endProc Q 11: Call Q 12: endBlock A 13: endProc B
In un ambiente non locale statico, la x impiegata alla riga 4 è sempre e comunque quella definita nella riga 2, indipendentemente da altre ridefinizioni effettuate in altri sottoblocchi. Si noti che in questo modo si può definire lambiente non locale già a tempo di compilazione.
In un ambiente non locale dinamico, la chiamata di Q alla riga 11 provocherà lattivazione di un nuovo ambiente locale, in cui x viene ridefinito riga 8, e pertanto alla chiamata di P riga 9, la x che P utilizzerà alla riga 4 sarà riferita a questultima definizione. Si noti che in questo caso lambiente non locale può essere costruito solo a tempo di esecuzione.

2. Lambiente nei linguaggi interpretati
Il concetto formale di ambiente spesso viene semplificato, nelle sue caratteristiche, quando si fa uso di un linguaggio interpretato. Ricadono in questa categoria, ad esempio, JavaScript, PHP, Perl, ma anche i più noti interpreti di comandi di un qualsiasi sistema operativo. Normalmente non è obbligatorio dichiarare anticipatamente, ad esempio, le variabili che verranno usate nel corpo del programma, in quanto linterprete si fa carico di allocare la memoria e di creare le opportune associazioni nellambiente ogni qual volta una nuova variabile viene utilizzata.
Negli interpreti di comandi lambiente è spesso una semplice lista di associazioni tra un identificatore ed un valore di base in genere, numero intero o stringa. Ogni nuova istanza dellinterprete, in genere, eredita lambiente dellinterprete chiamante come nella shell di Unix o MS-DOS; analogamente ogni processo o comando invocato ha la possibilità di leggere tale ambiente, ed in alcuni casi di modificarlo. Spesso questo tipo di ambiente contiene informazioni legate alla gestione delle funzionalità proprie della shell stessa, come la lista delle directory dove cercare i comandi eseguibili detta path, la directory di default dellutente detta home directory, le caratteristiche del terminale in uso, e così via.
Nei linguaggi di scripting più evoluti lambiente può essere strutturato anche in maniera piuttosto complessa, come in un qualsiasi linguaggio imperativo che prevede la compilazione: in alcun casi, infatti, il programma viene sottoposto ad una compilazione on the fly ed eseguito in maniera più ottimizzata.

in un determinato linguaggio di programmazione Con l avvento dell ingegneria del software l attività di programmazione rappresenta in realta solo la
Kylix è un ambiente di programmazione creato da Borland per lo sviluppo RAD su piattaforma GNU Linux. Le funzionalità implementate in Kylix tendono a ricalcare
di programmazione di questa attraverso la scrittura del codice sorgente di un programma ad opera di un programmatore. Un linguaggio di programmazione è
Con la locuzione programmazione Web si indicano le attività e le tecniche di programmazione con i rispettivi linguaggi di scripting, che consentono la
rispettivamente ambiente integrato di progettazione e ambiente integrato di debugging in informatica, è un software che, in fase di programmazione supporta
variabili. Questo problema è stato in parte risolto dall introduzione dei namespace. Variabile informatica Ambiente programmazione Information hiding
Microsoft Windows. Variabili d ambiente nei sistemi operativi AmigaOS. Ambiente programmazione Interfaccia a linea di comando Processo informatica Sistema
In informatica, la programmazione orientata agli oggetti OOP, Object Oriented Programming è un paradigma di programmazione che permette di definire
un programma scritto in un linguaggio di programmazione da parte di un programmatore in fase di programmazione compreso all interno di un file sorgente
In informatica Java è un linguaggio di programmazione ad alto livello, orientato agli oggetti e a tipizzazione statica, che si appoggia sull omonima piattaforma
Kotlin è un linguaggio di programmazione general purpose, multi - paradigma, open source sviluppato dall azienda di software JetBrains. Kotlin si basa sulla