Mengapa bagian kode disebut bagian teks?

14

Bagian dari executable yang berisi kode kadang-kadang disebut .textbagian. Dalam arsitektur memori tersegmentasi, segmen yang dipetakan sebagai kode kadang-kadang disebut segmen teks. Pesan kesalahan unix "file teks sibuk" ( ETXTBSY) berarti "file ini adalah program yang sedang dieksekusi".

Bagaimana teks bisa berarti kode yang dapat dieksekusi (mesin) ?

Jawaban yang ideal akan: menjelaskan hubungan antara kata dan artinya; memberikan kutipan untuk asal atau setidaknya sejarah istilah; berikan beberapa gagasan tentang komunitas mana yang menggunakannya.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
.textadalah arahan majelis. Majelis adalah teks.
Austin Henley
6
Pertanyaan serupa diajukan dan dijawab di StackOverflow 3 tahun lalu: stackoverflow.com/questions/1282506/…
Stephen C
@StephenC Terima kasih atas tautannya. Mudah ditemukan dengan googling "segmen teks", saya mencoba sebagian besar dengan "bagian teks" dan tidak muncul. Jadi itu setidaknya sudah ada sejak zaman GE, tapi masih belum jelas bagaimana maknanya ditetapkan.
Gilles 'SANGAT berhenti menjadi jahat'

Jawaban:

5

Istilah ini berasal dari bahasa assembly. Saya tidak dapat memverifikasi etimologinya, tetapi dugaan saya adalah bahwa namanya berasal dari penggunaan bagian lain. Sedangkan .databagian menunjukkan variabel yang dapat berubah selama eksekusi, .textbagian 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 incrementakhirnya 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 selfpointer 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 .databagian 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.

Karl Bielefeldt
sumber
Jadi apa yang terjadi ketika Anda menggunakan bahasa fungsional mengingat bahwa kode tersebut juga bisa berubah / kelas 1?
Griffin
1
Lihat hasil edit saya tentang fungsi-fungsi kelas satu.
Karl Bielefeldt