This topic has missing or partial documentation. Please help us improve it.
Per capire come Rubinius implementa Ruby è necessario comprendere diversi concetti del linguaggio. Lo scopo di questo capitolo è introdurre le funzionalità di Rubinius affrontando concetti del linguaggio Ruby che dovrebbero essere già noti. La documentazione di Rubinius assume che abbiate familiarità con Ruby o con i concetti relativi a macchine virtuali e compilatori.
Il concetto di visibilità (scope) ha un ruolo centrale nella comprensione degli argomenti che seguono. Nella sintassi di Ruby, la visibilità è in genere un concetto derivato. In altre parole, non vi sono elementi della sintassi il cui scopo principale sia delimitare o riferirsi allo scope. Per questo motivo, parlare di visibilità può generare confusione. Ne è un esempio una normale definizione di metodo:
a = 5
def diligent(a)
puts a * 2
end
In questo caso, il metodo #diligent
ci fornisce un nome con cui riferirci
all’istruzione puts a * 2
, ma definisce anche uno scope lessicale chiuso
per la variabile a
. Lo scope è chiuso perché l’istruzione a = 5
che
precede il metodo non ha nessuna relazione con la variabile a
in
#diligent
.
Spesso si afferma che tutto in Ruby è un oggetto. Non è del tutto vero. Quasi tutto in Ruby è un oggetto, ma alcuni elementi assolutamente essenziali per l’esecuzione di codice Ruby non sono necessariamente oggetti su cui si possono mettere le mani. Quali tra questi “elementi dell’ambiente di esecuzione” siano oggetti in Ruby dipende molto dall’implementazione. Lo scope è uno di questi.
Essenzialmente, lo scope come concetto è un contesto che consente di
rispondere a domande quali: Qual è il valore di self
qui? Quali variabili
locali esistono qui? Quale valore avrà la costante APPLE
in questo punto del
codice?
I seguenti elementi di Ruby sono trattati con lo scopo di comprendere come vengono implementati da Rubinius e come il concetto di scope sia coinvolto in ciascuno.