Terim, montaj dilinden gelir. Etimolojiyi doğrulayamıyorum, ama tahminim, ismin bölümün diğer kullanımından geldiği. .data
Bölüm, yürütme sırasında değişebilen değişkenleri belirtirken , bölüm yürütme .text
sı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, increment
dahili 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 self
iş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 .data
tarafı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.
.text
bir montaj direktifidir. Derleme metindir.