Quines ซึ่งเป็นโปรแกรมที่สร้างรหัสของตัวเองในฐานะที่เป็นส่วนหนึ่งหรือทั้งหมดของการส่งออกของพวกเขาเป็นความคิดที่เรียบร้อยสำหรับปริศนาการเขียนโปรแกรม อย่างไรก็ตามพวกเขามีประโยชน์นอกเหนือจากนั้นหรือไม่?
Quines ซึ่งเป็นโปรแกรมที่สร้างรหัสของตัวเองในฐานะที่เป็นส่วนหนึ่งหรือทั้งหมดของการส่งออกของพวกเขาเป็นความคิดที่เรียบร้อยสำหรับปริศนาการเขียนโปรแกรม อย่างไรก็ตามพวกเขามีประโยชน์นอกเหนือจากนั้นหรือไม่?
คำตอบ:
เวลาเท่านั้นที่ฉันเคยได้ยินจากการใช้งานจริงใด ๆ สำหรับ quines คือเมื่อเคน ธ อมป์สันใช้มันเพื่อซ่อนม้าโทรจันในโปรแกรมการเข้าสู่ระบบยูนิกซ์
โทรจันประกอบด้วยบางสิ่งเช่นif (login == "Trojan") login();
(อาจจะเขียนใน C ที่เหมาะสมมากกว่า) แต่สิ่งที่คล้ายกันนั้นจะชัดเจนเกินไปในรหัส ดังนั้นสิ่งที่เขาทำคือการฝังไว้ในควินและซ่อนไว้ในไบนารีของคอมไพเลอร์ C
คุณสมบัติการจำลองตัวเองของควินนั้นเพียงพอที่จะทำให้แน่ใจว่าแม้ว่าจะไม่มีร่องรอยของแบ็คดอร์นี้ในซอร์สโค้ดใด ๆ ก็ตาม แต่มันก็จะคอมไพล์อย่างมีประสิทธิภาพทุกครั้งที่คอมไพเลอร์ C จะเจอฟังก์ชัน Unix login
ฉันเดาว่าการอธิบายที่ชัดเจนกว่านั้นอาจมาจากการอ่านกระดาษ มันเป็นกระดาษที่ดี
ดูเพิ่มเติม: แฮ็คคอมไพเลอร์ของ Ken Thompson ยังคงเป็นภัยคุกคามหรือไม่?
ควินินเคยใช้ในการเพาะเมล็ดTierraเครื่องจำลองสิ่งมีชีวิตแบบดิจิทัลและชีวิตก็วิวัฒนาการมาจากมัน ควินินถูกนำมาใช้เพราะมันรับประกันได้ว่ารุ่นแรกจะผลิตลูกหลานที่มีศักยภาพ
วิวัฒนาการนำไปสู่ผลลัพธ์ที่น่าสนใจมากมายรวมถึงรูปแบบชีวิตของกาฝากและ symbiotic และแม้แต่ปรสิตเมตาดาต้า อาจมีการพิจารณาว่า 'มีประโยชน์'?
หลังจาก Googling คำตอบที่น่าประหลาดใจก็คืออย่างน้อยก็มีความพยายามทางวิชาการในเชิงทฤษฎีที่จะใช้พวกเขาในการซ่อมโค้ดด้วยตนเอง
หนึ่งในคำค้นหาของฉันคือ "การเขียนโปรแกรมเชิงพันธุกรรม" ถ้าใครต้องการที่จะดูเพิ่มเติม - มันเป็นพื้นที่การเขียนโปรแกรมที่เกี่ยวข้องที่อาจเป็นประโยชน์เท่านั้นที่ฉันสามารถคิด
แก้ไข - เพิ่งพบการใช้ Quines ในโครงร่างภาษาอังกฤษของหลักฐานทางคณิตศาสตร์ (คำตอบรอน Maimon) ของทฤษฎีบทของ Godel
ฉันเคยใช้เทคนิคเหมือน Quine ในหน้าเว็บในอดีต ใจคุณนี่คือในปี 1998-99 ...
ฉันมีสิ่งที่เราเรียกว่า "เว็บแอพ" ซึ่งเป็นชุดของโปรแกรม CGI-BIN ซึ่งบางโปรแกรมใช้เวลาในการโต้ตอบกับ mainframes เพื่อบันทึกการใช้เวลานานสองครั้งในบางกรณีฉันจะส่งจาวาสคริปต์ที่สามารถเขียนหน้าต้นฉบับลงในแบบฟอร์มใหม่เพื่อส่งข้อมูลที่คำนวณล่วงหน้าไปแล้วเพื่อ "สำรองจุดในอนาคต" ฉันไม่สามารถจำความผิดปกติของการตีความ JavaScript ในเวลาที่ต้องการได้ แต่การเข้ารหัสแบบ Quine และการถอดรหัสเอาต์พุตของ "HTML" และการเชื่อมโยง JavaScript ที่จำเป็นกลายเป็นสิ่งจำเป็น