Tại sao phần mã được gọi là phần văn bản?


14

Phần của một tệp thực thi có chứa mã đôi khi được gọi là .textphần. Trong các kiến ​​trúc bộ nhớ được phân đoạn, một phân đoạn được ánh xạ dưới dạng mã đôi khi được gọi là phân đoạn văn bản. Thông báo lỗi unix tập tin văn bản ở chế độ bận bận ( ETXTBSY) có nghĩa là tập tin này là một chương trình đang được thực hiện.

Làm thế nào đã văn bản có nghĩa là mã thực thi (máy) ?

Một câu trả lời lý tưởng sẽ: giải thích mối liên hệ giữa từ này và nghĩa của nó; cung cấp một trích dẫn cho nguồn gốc hoặc ít nhất là lịch sử của thuật ngữ; đưa ra một số ý tưởng về những cộng đồng sử dụng nó.


.textlà một chỉ thị lắp ráp. Hội là văn bản.
Austin Henley

6
Một câu hỏi tương tự đã được hỏi và trả lời trên StackOverflow 3 năm trước: stackoverflow.com/questions/1282506/ mẹo
Stephen C

@StephenC Cảm ơn đã liên kết. Dễ dàng tìm thấy bằng cách tìm kiếm đoạn văn bản trên Google, tôi đã thử hầu hết với phần văn bản của Google và nó không xuất hiện. Vì vậy, nó ít nhất là từ thời GE, nhưng vẫn chưa rõ ý nghĩa được hình thành như thế nào.
Gilles 'SO- ngừng trở nên xấu xa'

Câu trả lời:


5

Thuật ngữ này xuất phát từ ngôn ngữ lắp ráp. Tôi không thể xác minh từ nguyên, nhưng tôi đoán là tên này xuất phát từ việc sử dụng khác của phần này. Trong khi .dataphần biểu thị các biến có thể thay đổi trong quá trình thực hiện, thì.text phần chứa dữ liệu không thay đổi trong khi thực hiện, cho phép nó được đưa vào ROM nếu cần. Điều đó làm cho nó hữu ích cho mã, vâng, nhưng cũng làm cho nó hữu ích cho các chuỗi văn bản không thay đổi. Đó có lẽ là nơi mà thuật ngữ này đến từ.

Để giải quyết nhận xét của Griffin về các chức năng hạng nhất, hãy xem xét mã python 3 sau:

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

Mã bạn thực sự thực thi để incrementkết thúc tìm kiếm nội bộ như:

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

Mã thực thi đó có thể được đưa vào ROM. Nó không bao giờ thay đổi trong suốt quá trình thực hiện chương trình, bất kể bạn gọi bao nhiêu lần counter(). Những gì không thay đổi là selfcon trỏ và các biến thành viên của nó. Những người phải được đưa vào .data. Khi bạn return increment, bạn thực sự đang trả về một thể hiện mới của một đối tượng hàm tăng. Bạn không tự động tạo mã thực thi mới mỗi lần. Bản thân mã là bất biến mặc dù con trỏ đến nó thì không.

Mã duy nhất phải được lưu trữ trong .dataphần này được tạo bởi eval(), bởi vì trình biên dịch hoặc trình biên dịch JIT không được biết đến khi bắt đầu chương trình. Tuy nhiên, ngay cả mã đó là bất biến. Nếu bạn thay đổi chuỗi và gọi eval()lại, bạn sẽ không thay đổi mã từ lần trước bạn đã gọi eval(), bạn đang tạo một bộ mã hoàn toàn mới.

Mặc dù mô hình lập trình có thể tạo cảm giác giống như mã có thể thay đổi, nhưng mã tự sửa đổi thực tế ở cấp hướng dẫn của bộ xử lý là nguy hiểm và hiếm khi được tìm thấy bên ngoài các chủ đề voodoo của hệ điều hành như chuyển đổi ngữ cảnh.


Vậy điều gì sẽ xảy ra khi bạn đang sử dụng một ngôn ngữ chức năng xem xét rằng mã có thể thay đổi / lớp 1 không?
Griffin

1
Xem chỉnh sửa của tôi về các chức năng hạng nhất.
Karl Bielefeldt
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.