Quines มีประโยชน์อะไรมากกว่าจิ๊กซอว์การเขียนโปรแกรมหรือไม่


9

Quines ซึ่งเป็นโปรแกรมที่สร้างรหัสของตัวเองในฐานะที่เป็นส่วนหนึ่งหรือทั้งหมดของการส่งออกของพวกเขาเป็นความคิดที่เรียบร้อยสำหรับปริศนาการเขียนโปรแกรม อย่างไรก็ตามพวกเขามีประโยชน์นอกเหนือจากนั้นหรือไม่?


2
ไม่มีแอปพลิเคชันที่ใช้งานได้จริงที่ฉันรู้
Robert Harvey

คำตอบ:


8

เวลาเท่านั้นที่ฉันเคยได้ยินจากการใช้งานจริงใด ๆ สำหรับ quines คือเมื่อเคน ธ อมป์สันใช้มันเพื่อซ่อนม้าโทรจันในโปรแกรมการเข้าสู่ระบบยูนิกซ์

โทรจันประกอบด้วยบางสิ่งเช่นif (login == "Trojan") login();(อาจจะเขียนใน C ที่เหมาะสมมากกว่า) แต่สิ่งที่คล้ายกันนั้นจะชัดเจนเกินไปในรหัส ดังนั้นสิ่งที่เขาทำคือการฝังไว้ในควินและซ่อนไว้ในไบนารีของคอมไพเลอร์ C

คุณสมบัติการจำลองตัวเองของควินนั้นเพียงพอที่จะทำให้แน่ใจว่าแม้ว่าจะไม่มีร่องรอยของแบ็คดอร์นี้ในซอร์สโค้ดใด ๆ ก็ตาม แต่มันก็จะคอมไพล์อย่างมีประสิทธิภาพทุกครั้งที่คอมไพเลอร์ C จะเจอฟังก์ชัน Unix login

ฉันเดาว่าการอธิบายที่ชัดเจนกว่านั้นอาจมาจากการอ่านกระดาษ มันเป็นกระดาษที่ดี

ดูเพิ่มเติม: แฮ็คคอมไพเลอร์ของ Ken Thompson ยังคงเป็นภัยคุกคามหรือไม่?


2
นั่นคือความเข้าใจของฉันเช่นกัน การใช้ควินินในทางปฏิบัติเท่านั้นคือในมัลแวร์
JohnFx

4

ควินินเคยใช้ในการเพาะเมล็ดTierraเครื่องจำลองสิ่งมีชีวิตแบบดิจิทัลและชีวิตก็วิวัฒนาการมาจากมัน ควินินถูกนำมาใช้เพราะมันรับประกันได้ว่ารุ่นแรกจะผลิตลูกหลานที่มีศักยภาพ

วิวัฒนาการนำไปสู่ผลลัพธ์ที่น่าสนใจมากมายรวมถึงรูปแบบชีวิตของกาฝากและ symbiotic และแม้แต่ปรสิตเมตาดาต้า อาจมีการพิจารณาว่า 'มีประโยชน์'?


4

หลังจาก Googling คำตอบที่น่าประหลาดใจก็คืออย่างน้อยก็มีความพยายามทางวิชาการในเชิงทฤษฎีที่จะใช้พวกเขาในการซ่อมโค้ดด้วยตนเอง

หนึ่งในคำค้นหาของฉันคือ "การเขียนโปรแกรมเชิงพันธุกรรม" ถ้าใครต้องการที่จะดูเพิ่มเติม - มันเป็นพื้นที่การเขียนโปรแกรมที่เกี่ยวข้องที่อาจเป็นประโยชน์เท่านั้นที่ฉันสามารถคิด

แก้ไข - เพิ่งพบการใช้ Quines ในโครงร่างภาษาอังกฤษของหลักฐานทางคณิตศาสตร์ (คำตอบรอน Maimon) ของทฤษฎีบทของ Godel


1

ฉันเคยใช้เทคนิคเหมือน Quine ในหน้าเว็บในอดีต ใจคุณนี่คือในปี 1998-99 ...

ฉันมีสิ่งที่เราเรียกว่า "เว็บแอพ" ซึ่งเป็นชุดของโปรแกรม CGI-BIN ซึ่งบางโปรแกรมใช้เวลาในการโต้ตอบกับ mainframes เพื่อบันทึกการใช้เวลานานสองครั้งในบางกรณีฉันจะส่งจาวาสคริปต์ที่สามารถเขียนหน้าต้นฉบับลงในแบบฟอร์มใหม่เพื่อส่งข้อมูลที่คำนวณล่วงหน้าไปแล้วเพื่อ "สำรองจุดในอนาคต" ฉันไม่สามารถจำความผิดปกติของการตีความ JavaScript ในเวลาที่ต้องการได้ แต่การเข้ารหัสแบบ Quine และการถอดรหัสเอาต์พุตของ "HTML" และการเชื่อมโยง JavaScript ที่จำเป็นกลายเป็นสิ่งจำเป็น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.