Il termine deriva dal linguaggio assembly. Non riesco a verificare l'etimologia, ma suppongo che il nome derivi da un altro uso della sezione. Mentre la sezione .data
indica le variabili che possono cambiare durante l'esecuzione, la sezione .text
contiene dati che non cambiano durante l'esecuzione, consentendo di inserirli nella ROM se necessario. Ciò lo rende utile per il codice, sì, ma lo rende anche utile per le stringhe di testo che non cambiano. Probabilmente è da dove viene il termine.
Per rispondere al commento di Griffin sulle funzioni di prima classe, prendi in considerazione il seguente codice python 3:
def counter():
x = 0
def increment(y):
nonlocal x
x += y
print(x)
return increment
Il codice che esegui effettivamente per increment
finisce per cercare internamente qualcosa del tipo:
self.func_dict['x'] += y
print(self.func_dict['x'])
Quel codice eseguibile può essere inserito nella ROM. Non cambia mai durante l'esecuzione del programma, non importa quante volte chiami counter()
. Quello che fa cambia è il puntatore self
e le sue variabili membro. Questi devono essere messi in .data
. Quando si return increment
, si sta effettivamente restituendo una nuova istanza di un oggetto funzione di incremento. Non stai creando dinamicamente un nuovo codice eseguibile ogni volta. Il codice stesso è immutabile anche se il puntatore ad esso non lo è.
L'unico codice che deve essere memorizzato nella sezione .data
è quello generato da eval()
, perché non è noto al compilatore o al compilatore JIT all'inizio del programma. Tuttavia, anche quel codice è immutabile. Se modifichi la stringa e chiami di nuovo eval()
, non stai modificando il codice dal momento in cui hai chiamato eval()
, stai creando un nuovo set di codice completamente nuovo.
Sebbene il modello di programmazione possa far sembrare che il codice sia mutabile, il codice di auto modifica effettivo al livello di istruzione del processore è pericoloso e raramente trovato al di fuori degli argomenti voodoo del sistema operativo come il cambio di contesto del processo.