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 .data
phầ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 để increment
kế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à self
con 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 .data
phầ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.
.text
là một chỉ thị lắp ráp. Hội là văn bản.