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.
.textbir montaj direktifidir. Derleme metindir.