Quines có hữu ích như bất cứ điều gì hơn là một câu đố lập trình không?


9

Các quines, là các chương trình tạo mã riêng của chúng như một phần hoặc toàn bộ đầu ra của chúng là một ý tưởng gọn gàng cho một câu đố lập trình. Tuy nhiên, họ có bất kỳ sử dụng ngoài đó?


2
Không có một ứng dụng thực tế nào mà tôi biết.
Robert Harvey

Câu trả lời:


8

Lần duy nhất tôi từng nghe về bất kỳ việc sử dụng thực tế nào cho quines là khi Ken Thompson sử dụng nó để ẩn một con ngựa thành Troia trong chương trình đăng nhập Unix .

Trojan bao gồm một cái gì đó giống như if (login == "Trojan") login();(có lẽ được viết bằng C thích hợp), nhưng một cái gì đó như thế sẽ quá rõ ràng trong mã. Vì vậy, những gì anh ta đã làm là nhúng nó vào một quine và giấu nó trong các nhị phân của trình biên dịch C.

Các thuộc tính tự sao chép của quine là đủ để đảm bảo rằng mặc dù không có dấu vết của cửa hậu này trong bất kỳ mã nguồn nào, nó sẽ biên dịch hiệu quả mỗi khi trình biên dịch C đi qua hàm đăng nhập Unix ().

Tôi đoán những giải thích rõ ràng hơn có thể đến từ việc đọc bài báo. Đó là một bài báo tốt.

Xem thêm: Hack trình biên dịch của Ken Thompson có còn là mối đe dọa không?


2
Đó cũng là sự hiểu biết của tôi. Việc sử dụng thực tế duy nhất của một quine là trong phần mềm độc hại.
JohnFx

4

Một quine đã được sử dụng để gieo hạt Tierra , một mô phỏng sinh vật kỹ thuật số và cuộc sống sau đó phát triển từ nó. Các quine đã được sử dụng bởi vì nó đảm bảo rằng thế hệ đầu tiên sẽ tạo ra con cái khả thi.

Sự tiến hóa đã dẫn đến nhiều kết quả thú vị, bao gồm các dạng sống ký sinh và cộng sinh, và thậm chí cả siêu ký sinh trùng. Điều đó có thể được coi là "hữu ích" không?


4

Sau một số Googling, câu trả lời đáng ngạc nhiên là có ít nhất một số nỗ lực học tập lý thuyết để sử dụng chúng để tự sửa mã, rõ ràng.

Một trong những thuật ngữ tìm kiếm của tôi là "lập trình di truyền", nếu có ai muốn tìm kiếm thêm - đó là lĩnh vực lập trình liên quan có khả năng hữu ích duy nhất tôi có thể nghĩ đến.

EDIT - Chỉ tìm thấy việc sử dụng Quines trong một bản phác thảo bằng tiếng Anh của một bằng chứng toán học (câu trả lời của Ron Maimon) của Định lý Godel.


1

Trước đây tôi đã sử dụng các kỹ thuật giống như Quine trong các trang web. Tâm trí bạn, đây là vào năm 1998-99 ...

Tôi đã có cái mà bây giờ chúng ta gọi là "ứng dụng web", một bộ chương trình CGI-BIN, một số trong đó thực hiện một số tương tác tốn thời gian với máy tính lớn. Để tiết kiệm thực hiện phần tốn thời gian hai lần, trong một số trường hợp nhất định, tôi sẽ gửi JavaScript có thể viết lại trang gốc thành một biểu mẫu để gửi lại thông tin được tính toán trước để "bảo lưu một vị trí trong tương lai". Tôi không thể nhớ lại tính đặc biệt của giải thích JavaScript tại thời điểm đó là gì, nhưng mã hóa giống như Quine và giải mã trên đầu ra, của HTML "dự trữ một vị trí trong tương lai" và JavaScript liên quan trở nên cần thiết.

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.