Istilah ini berasal dari bahasa assembly. Saya tidak dapat memverifikasi etimologinya, tetapi dugaan saya adalah bahwa namanya berasal dari penggunaan bagian lain. Sedangkan .data
bagian menunjukkan variabel yang dapat berubah selama eksekusi, .text
bagian tersebut berisi data yang tidak berubah selama eksekusi, yang memungkinkannya untuk dimasukkan ke dalam ROM jika diperlukan. Itu membuatnya berguna untuk kode, ya, tetapi juga membuatnya berguna untuk string teks yang tidak berubah. Mungkin dari situlah istilah itu berasal.
Untuk menanggapi komentar Griffin tentang fungsi-fungsi kelas satu, pertimbangkan kode python 3 berikut:
def counter():
x = 0
def increment(y):
nonlocal x
x += y
print(x)
return increment
Kode yang benar-benar Anda jalankan untuk increment
akhirnya tampak seperti:
self.func_dict['x'] += y
print(self.func_dict['x'])
Kode yang dapat dieksekusi itu dapat dimasukkan ke dalam ROM. Tidak pernah berubah sepanjang pelaksanaan program, tidak peduli berapa kali Anda menelepon counter()
. Apa yang dilakukannya perubahan adalah self
pointer dan variabel anggotanya. Itu harus dimasukkan .data
. Saat Anda return increment
, Anda sebenarnya mengembalikan instance baru dari objek fungsi kenaikan. Anda tidak secara dinamis membuat kode yang dapat dieksekusi baru setiap saat. Kode itu sendiri tidak dapat diubah meskipun penunjuknya tidak.
Satu-satunya kode yang harus disimpan di .data
bagian ini adalah yang dihasilkan oleh eval()
, karena tidak diketahui oleh kompiler atau kompiler JIT pada awal program. Namun, bahkan kode itu tidak dapat diubah. Jika Anda mengubah string dan menelepon eval()
lagi, Anda tidak mengubah kode dari waktu sebelumnya Anda menelepon eval()
, Anda membuat set kode yang sama sekali baru.
Meskipun model pemrograman mungkin membuatnya terasa seperti kode bisa berubah, kode modifikasi diri yang sebenarnya pada tingkat instruksi prosesor berbahaya dan jarang ditemukan di luar topik OS voodoo seperti proses konteks switching.
.text
adalah arahan majelis. Majelis adalah teks.