Le terme vient du langage d'assemblage. Je ne peux pas vérifier l'étymologie, mais je suppose que le nom vient de l'autre utilisation de la section. Alors que la .data
section dénote des variables qui peuvent changer au cours de l'exécution, la .text
section contient des données qui ne changent pas pendant l'exécution, ce qui permet de les mettre dans la ROM si nécessaire. Cela le rend utile pour le code, oui, mais le rend également utile pour les chaînes de texte qui ne changent pas. C'est probablement de là que vient le terme.
Pour répondre au commentaire de Griffin sur les fonctions de première classe, considérez le code python 3 suivant:
def counter():
x = 0
def increment(y):
nonlocal x
x += y
print(x)
return increment
Le code que vous exécutez réellement increment
finit par ressembler en interne à quelque chose comme:
self.func_dict['x'] += y
print(self.func_dict['x'])
Ce code exécutable peut être placé dans la ROM. Il ne change jamais pendant l'exécution du programme, quel que soit le nombre de fois que vous appelez counter()
. Ce qui change, c'est le self
pointeur et ses variables membres. Il faut les mettre .data
. Lorsque vous return increment
, vous renvoyez en fait une nouvelle instance d'un objet de fonction d'incrémentation. Vous ne créez pas dynamiquement de nouveau code exécutable à chaque fois. Le code lui-même est immuable même si son pointeur ne l'est pas.
Le seul code qui doit être stocké dans la .data
section est celui généré par eval()
, car il n'est pas connu du compilateur ou du compilateur JIT au début du programme. Cependant, même ce code est immuable. Si vous modifiez la chaîne et appelez à eval()
nouveau, vous ne modifiez pas le code de la dernière fois que vous avez appelé eval()
, vous créez un tout nouvel ensemble de code.
Bien que le modèle de programmation puisse donner l'impression que le code est modifiable, le code d'auto-modification réel au niveau des instructions du processeur est dangereux et rarement trouvé en dehors des sujets vaudous du système d'exploitation tels que le changement de contexte de processus.
.text
est une directive d'assemblage. L'assemblage est du texte.