El término proviene del lenguaje ensamblador. No puedo verificar la etimología, pero supongo que el nombre proviene del otro uso de la sección. Mientras que la .data
sección denota variables que pueden cambiar durante el curso de la ejecución, la .text
sección contiene datos que no cambian durante la ejecución, lo que permite ponerla en ROM si es necesario. Eso lo hace útil para el código, sí, pero también lo hace útil para cadenas de texto que no cambian. Probablemente de ahí proviene el término.
Para abordar el comentario de Griffin sobre las funciones de primera clase, considere el siguiente código de Python 3:
def counter():
x = 0
def increment(y):
nonlocal x
x += y
print(x)
return increment
El código que realmente ejecuta increment
termina por verse internamente algo así como:
self.func_dict['x'] += y
print(self.func_dict['x'])
Ese código ejecutable se puede poner en la ROM. Nunca cambia durante la ejecución del programa, sin importar cuántas veces llame counter()
. Lo que sí cambia es el self
puntero y sus variables miembro. Esos deben ser puestos en .data
. Cuando usted return increment
, en realidad, está devolviendo una nueva instancia de un objeto de función de incremento. No está creando dinámicamente nuevo código ejecutable cada vez. El código en sí es inmutable a pesar de que el puntero no lo es.
El único código que debe almacenarse en la .data
sección es el generado por eval()
, porque no lo conoce el compilador o el compilador JIT al inicio del programa. Sin embargo, incluso ese código es inmutable. Si cambia la cadena y eval()
vuelve a llamar , no está cambiando el código de la vez anterior que llamó eval()
, está creando un conjunto completamente nuevo de código.
Aunque el modelo de programación puede hacer que parezca que el código es mutable, el código de auto-modificación real en el nivel de instrucción del procesador es peligroso y rara vez se encuentra fuera de los temas de vudú del sistema operativo como el cambio de contexto del proceso.
.text
Es una directiva de montaje. Asamblea es texto.