Чому розділ коду називається текстовим розділом?


14

Розділ виконуваного файлу, який містить код, іноді називають .textсекцією. У архітектурах сегментованої пам'яті сегмент, відображений у вигляді коду, іноді називають текстовим сегментом. Повідомлення про помилку Unix "текстовий файл зайнятий" ( ETXTBSY) означає "цей файл - це програма, яка виконується".

Як текст став означати виконуваний (машинний) код ?

Ідеальна відповідь могла б: пояснити зв’язок між словом та його значенням; надати посилання на походження чи принаймні історію терміна; дати деяке уявлення про те, які громади використовують його.


.text- це директива складання. Збірка - це текст.
Остін Генлі

6
Аналогічне запитання було задано і відповіли на StackOverflow 3 роки тому: stackoverflow.com/questions/1282506/…
Стівен C

@StephenC Дякую за посилання. Легко знайти, гуглюючи "текстовий сегмент", я намагався здебільшого "текстовий розділ", і він не з'явився. Тож воно сягає принаймні часів GE, але все ще не зрозуміло, яким чином змістилося значення.
Жил "ТАК - перестань бути злим"

Відповіді:


5

Термін походить від асемблерної мови. Я не можу перевірити етимологію, але я здогадуюсь, що назва походить від іншого використання розділу. Тоді як .dataрозділ позначає змінні, які можуть змінюватися в ході виконання, в .textрозділі містяться дані, які не змінюються під час виконання, що дозволяє вносити їх у ПЗУ за потреби. Це робить його корисним для коду, так, але також робить його корисним для рядків тексту, які не змінюються. Ось, мабуть, звідси і походить термін.

Щоб вирішити коментар Гриффіна щодо функцій першого класу, врахуйте наступний код python 3:

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

Код, який ви фактично виконуєте increment, шукає всередині щось подібне:

self.func_dict['x'] += y
print(self.func_dict['x'])

Цей виконуваний код можна поставити в ПЗУ. Він ніколи не змінюється впродовж виконання програми, незалежно від того, скільки разів ви дзвонили counter(). Що робить зміна є selfпокажчиком і його змінні - члени. Їх треба вкласти .data. Коли ви return increment, ви фактично повертаєте новий екземпляр об'єкта функції збільшення. Ви не динамічно створюєте новий виконуваний код кожен раз. Сам код незмінний, навіть якщо вказівник на нього не є.

Єдиний код, який повинен зберігатися в .dataрозділі, - це той, який генерується через eval(), оскільки він не відомий компілятору або компілятору JIT на початку програми. Однак навіть цей код незмінний. Якщо ви зміните рядок і eval()повторно зателефонуєте , ви не змінюєте код від попереднього виклику eval(), ви створюєте цілий новий набір коду.

Хоча модель програмування може викликати відчуття, що код є змінним, фактичний самомодифікуючий код на рівні інструкцій процесора є небезпечним і рідко зустрічається за межами тем вуду ОС, як переключення контексту процесу.


То що відбувається, коли ви використовуєте функціональну мову, враховуючи, що код також є змінним / 1-й клас?
Гриффін

1
Перегляньте мою редакцію про функції першого класу.
Карл Білефельдт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.