El scoping de un lenguaje refiere a su manejo de ámbitos o scopes.
Global vs. Local
Podemos limitar el ambiente de variables a un entorno particular.
local A B Var in
A = 4
B = 5
Var = A*B + 3
{Browse Var} % 23
endEn un scope global, las variables pueden ser accedidas en todo el programa, lo cual puede traer problemas.
Las variables pueden ser reasignadas al definir un nuevo entorno.
local A in
A = 4
local A in
A = 7
{Browse A} % 7
end
{Browse A} % 4
endSi se referencia a una variable que no pertenece al entorno, se buscara en un entorno superior.
Estático vs. Dinámico
Supongamos el siguiente código:
local P Q in
proc {Q X}
{Browse stat(X)}
end
proc {P X}
{Q X}
end
local Q in
proc {Q X}
{Browse dyn(X)}
end
{Q 'X'}
end
endSi el scoping del lenguaje de programación es estático, se imprimirá stat(X). En caso contrario, se imprimirá dyn(X). Oz es un lenguaje con scoping estático.
En un lenguaje de scoping estático, las variables libres toman valor en el momento de la definición. En un lenguaje de scoping dinámico, las variables libres toman valor en el momento de la ejecución.
Los lenguajes estáticos son mas declarativos. Su comportamiento es mas facil de analizar.