Implementación de cierres en Lua @

Tengo una pregunta sobre cómo se implementan los cierres.

Diga que esto está en un archivo llamadotest.lua:

local a = 'asdf'

local function b()
    return a
end

a = 10

return b

Y otro archivo hace

a = require 'test'
a()

imprimirá

10

Sia es un puntero en la pila a'asdf' (en el montón supongo, pero no importa), y el cierreb se crea tan presumiblemente la dirección que estaba ena se guarda parab para usar, ¿cómo funcionaa = 10 ¿Cambiar también el puntero dentro del cierre?

Wikipedia dice bastante bien lo que me deja perplejo:

Una implementación de lenguaje no puede admitir fácilmente cierres completos si su modelo de memoria de tiempo de ejecución asigna todas las variables locales en una pila lineal1. En dichos idiomas, las variables locales de una función se desasignan cuando la función regresa.

Estaba pensando que tal vezb realmente no guardó un puntero a'asdf' pero una pila desplazada aa, para que pueda cambiara y el desplazamiento de la pila te llevará aa que apunta a lo último que configuróa to, pero entonces, ¿cómo funciona esto cuandoa (el puntero) sale de la pila y el desplazamiento de la pila deja de ser válido?

1 Sé que Lua no asigna lavalore en la pila, pero asigna punteros locales en la pila a valores en el montón, ¿no?

Respuestas a la pregunta(1)

Su respuesta a la pregunta