Perché la sezione di codice è chiamata sezione di testo?


14

La sezione di un eseguibile che contiene codice è talvolta chiamata .textsezione. Nelle architetture di memoria segmentate, un segmento mappato come codice viene talvolta chiamato segmento di testo. Il messaggio di errore unix "file di testo occupato" ( ETXTBSY) significa "questo file è un programma in esecuzione".

In che modo testo ha significato codice eseguibile (macchina) ?

Una risposta ideale sarebbe: spiegare la connessione tra la parola e il suo significato; fornire una citazione per l'origine o almeno la storia del termine; dare un'idea di quali comunità lo usano.


.textè una direttiva di assemblaggio. L'Assemblea è un testo.
Austin Henley,

6
Una domanda simile è stata posta e ha risposto su StackOverflow 3 anni fa: stackoverflow.com/questions/1282506/…
Stephen C

@StephenC Grazie per il link. Facile da trovare cercando su Google "segmento di testo", avevo provato principalmente con "sezione di testo" e non si presentava. Quindi risale almeno ai giorni di GE, ma non è ancora chiaro come sia stato stabilito il significato.
Gilles 'SO- smetti di essere malvagio' il

Risposte:


5

Il termine deriva dal linguaggio assembly. Non riesco a verificare l'etimologia, ma la mia ipotesi è che il nome derivi dall'altro uso della sezione. Considerando che la .datasezione indica le variabili che possono cambiare nel corso dell'esecuzione, la .textsezione contiene dati che non cambiano durante l'esecuzione, consentendo di inserirli nella ROM se necessario. Ciò lo rende utile per il codice, sì, ma anche per le stringhe di testo che non cambiano. È probabilmente da lì che viene il termine.

Per rispondere al commento di Griffin sulle funzioni di prima classe, considera il seguente codice python 3:

def counter():
    x = 0
    def increment(y):
        nonlocal x
        x += y
        print(x)
    return increment

Il codice che effettivamente esegui incrementfinisce per apparire 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 si chiama counter(). Ciò che cambia è il selfpuntatore e le sue variabili membro. Quelli devono essere messi dentro .data. Quando si return incrementrestituisce effettivamente una nuova istanza di un oggetto funzione di incremento. Non stai creando dinamicamente ogni volta nuovo codice eseguibile. Il codice stesso è immutabile anche se il puntatore non lo è.

L'unico codice che deve essere memorizzato nella .datasezione è quello generato da eval(), perché non è noto al compilatore o al compilatore JIT all'avvio del programma. Tuttavia, anche quel codice è immutabile. Se cambi la stringa e chiami di eval()nuovo, non stai cambiando il codice dalla volta precedente che hai chiamato eval(), stai creando un nuovo set di codice.

Sebbene il modello di programmazione possa far sembrare che il codice sia mutabile, l'effettivo codice di auto-modifica a livello di istruzione del processore è pericoloso e raramente si trova al di fuori degli argomenti voodoo del sistema operativo come il cambio di contesto di processo.


Quindi cosa succede quando si utilizza un linguaggio funzionale considerando che il codice è mutabile / anche di 1a classe?
Griffin,

1
Vedi la mia modifica sulle funzioni di prima classe.
Karl Bielefeldt,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.