Kod bölümüne neden metin bölümü adı verilir?


14

Yürütülebilir dosyanın kod içeren .textbölümüne bazen bölüm denir . Bölümlenmiş bellek mimarilerinde, kod olarak eşlenen bir bölüme bazen metin bölümü denir. “Metin dosyası meşgul” ( ETXTBSY) unix hata mesajı , “bu dosya yürütülmekte olan bir programdır” anlamına gelir.

Metin , yürütülebilir (makine) kod anlamına nasıl geldi ?

İdeal bir cevap: kelime ve anlamı arasındaki bağlantıyı açıklar; köken veya en azından terimin tarihi için bir atıf sağlamak; hangi toplulukların kullandığı hakkında fikir verebilir.


.textbir montaj direktifidir. Derleme metindir.
Austin Henley

6
Benzer bir soru soruldu ve StackOverflow 3 yıl önce cevaplandı: stackoverflow.com/questions/1282506/…
Stephen C

@StephenC Bağlantı için teşekkürler. "Metin segmenti" ni bularak bulmak kolay, çoğunlukla "metin bölümü" ile denedim ve ortaya çıkmadı. Yani en azından GE günlerine dayanıyor, ancak anlamın nasıl kurulduğu hala net değil.
Gilles 'SO- kötü olmayı kes

Yanıtlar:


5

Terim, montaj dilinden gelir. Etimolojiyi doğrulayamıyorum, ama tahminim, ismin bölümün diğer kullanımından geldiği. .dataBölüm, yürütme sırasında değişebilen değişkenleri belirtirken , bölüm yürütme .textsırasında değişmeyen verileri içerir ve gerekirse ROM'a yerleştirilmesine izin verir. Bu, kod için yararlı olur, evet, aynı zamanda değişmeyen metin dizeleri için de yararlı olur. Muhtemelen bu terim geldi.

Griffin'in birinci sınıf işlevler hakkındaki yorumunu ele almak için aşağıdaki python 3 kodunu göz önünde bulundurun:

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

Gerçekte yürüttüğünüz kod, incrementdahili olarak şuna benzer:

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

Bu yürütülebilir kod ROM'a eklenebilir. Kaç kez aradığınız önemli değil, programın yürütülmesi boyunca asla değişmez counter(). Ne yapar değişikliği olan selfişaretçi ve üye değişkenleri. Bunlar içine konmalı .data. Ne zaman return increment, aslında bir artım fonksiyon nesnenin yeni bir örneğini dönüyor. Her seferinde dinamik olarak yeni yürütülebilir kod oluşturmuyorsunuz. İşaretçi olmasa bile kodun kendisi değişmez.

Programın başında derleyici veya JIT derleyicisi tarafından bilinmediği için bölümde depolanması gereken tek kod .datatarafından oluşturulan koddur eval(). Ancak, bu kod bile değiştirilemez. Dizeyi değiştirir ve eval()tekrar ararsanız , kodu daha önce aradığınız zaman değiştirmezseniz, eval()tamamen yeni bir kod kümesi oluşturursunuz.

Programlama modeli, kodu değiştirilebilir gibi hissettirse de, işlemci talimat düzeyinde gerçek kendini değiştiren kod tehlikelidir ve nadiren süreç bağlamı değiştirme gibi OS voodoo konularının dışında bulunur.


Peki, kodun değiştirilebilir / 1. sınıf olduğunu düşünerek işlevsel bir dil kullandığınızda ne olur?
Griffin

1
Birinci sınıf işlevler hakkındaki düzenlememe bakın.
Karl Bielefeldt
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.