Возьмите следующий код Lua (который я использую, потому что Lua скомпилирован в байт-код перед интерпретацией):
local myVar = "h";
local function printer()
print(myVar)
end;
printer();
myVar = 7;
printer();
Выходные данные: h
, затем в новой строке 7
.
Из-за динамической типизации языка я предполагаю, что переменная должна быть перераспределена в памяти из-за изменения типа данных. Исходя из этого предположения, myVar
должен ссылаться на разные места в разных частях сценария. Если это так, для меня имеет смысл, что должны быть скомпилированы две версии printer
: одна до изменения и одна после изменения.
Я также считал, что каждой переменной может быть выделено определенное место в памяти, и что данное место в памяти можно проверить, чтобы найти текущее выделенное место для значения переменной. Если это так, то я предполагаю, что ссылочные типы, такие как таблицы, имеют ссылку, сохраненную в указанном местоположении (двойная ссылка)?
Итак, скомпилирована ли функция для каждой его версии, которая может работать? Отслеживаются ли изменения местоположения указателем? Или здесь происходит какой-то другой процесс?