Quines, जो प्रोग्राम हैं जो अपने कोड को अपने हिस्से के रूप में या अपने सभी आउटपुट उत्पन्न करते हैं, एक प्रोग्रामिंग पहेली के लिए एक साफ विचार है। हालांकि, क्या उनका इससे आगे कोई उपयोग है?
Quines, जो प्रोग्राम हैं जो अपने कोड को अपने हिस्से के रूप में या अपने सभी आउटपुट उत्पन्न करते हैं, एक प्रोग्रामिंग पहेली के लिए एक साफ विचार है। हालांकि, क्या उनका इससे आगे कोई उपयोग है?
जवाबों:
केवल समय मैंने कभी भी quines के लिए किसी भी व्यावहारिक उपयोग के बारे में सुना है जब केन थॉम्पसन ने यूनिक्स लॉगिन कार्यक्रम में एक ट्रोजन घोड़े को छिपाने के लिए इसका इस्तेमाल किया था ।
ट्रोजन में कुछ ऐसा था if (login == "Trojan") login();
( जैसे शायद उचित सी में लिखा गया हो), लेकिन कोड में ऐसा कुछ स्पष्ट होगा। तो उसने जो किया वह उसे एक क्वीन में एम्बेड करना और सी कंपाइलर के बायनेरिज़ में छिपाना था।
क्वीन की सेल्फ रेप्लिकेटिंग प्रॉपर्टीज यह सुनिश्चित करने के लिए पर्याप्त थीं कि किसी सोर्स कोड में इस बैकडोर का कोई निशान नहीं होने के बावजूद, यह प्रभावी रूप से हर बार संकलन करेगा कि C कंपाइलर एक यूनिक्स लॉगिन () फंक्शन में आएगा।
मुझे लगता है कि स्पष्ट अन्वेषण कागज पढ़ने से आ सकता है। यह एक अच्छा पेपर है।
यह भी देखें: क्या केन थॉम्पसन का कंपाइलर हैक अब भी खतरा है?
एक Quine बीज के इस्तेमाल किया गया था Tierra , एक डिजिटल जीव सिम्युलेटर, और जीवन फिर इसे से विकसित। क्वीन का उपयोग किया गया था क्योंकि यह गारंटी देता है कि पहली पीढ़ी व्यवहार्य संतानों का उत्पादन करेगी।
परजीवी और सहजीवी जीवन रूपों और यहां तक कि मेटा-परजीवियों सहित कई दिलचस्प परिणामों के कारण विकास हुआ। क्या इसे 'उपयोगी' माना जा सकता है?
कुछ Googling के बाद, आश्चर्यजनक उत्तर यह है कि कोड स्व मरम्मत करने के लिए, जाहिरा तौर पर उनका उपयोग करने के लिए कम से कम कुछ सैद्धांतिक शैक्षणिक प्रयास हैं ।
मेरे खोज शब्दों में से एक "आनुवंशिक प्रोग्रामिंग" था, अगर कोई भी आगे देखना चाहता है - यह एकमात्र संभावित उपयोगी संबंधित प्रोग्रामिंग क्षेत्र है जिसके बारे में मैं सोच सकता था।
EDIT - गोडेल के प्रमेय के गणितीय प्रमाण (रॉन मैमन के उत्तर) की एक अंग्रेजी रूपरेखा में Quines का उपयोग पाया गया ।
मैंने अतीत में वेब पृष्ठों में Quine जैसी तकनीकों का उपयोग किया है। ध्यान रहे, यह 1998-99 में था ...
मेरे पास अब हम एक "वेब ऐप" कहते हैं, जो सीजीआई-बीआईएन कार्यक्रमों का एक सेट है, जिनमें से कुछ ने मेनफ्रेम के साथ कुछ समय लेने वाली बातचीत की। दो बार समय लेने वाले हिस्से को करने से बचाने के लिए, कुछ मामलों में मैं जावास्क्रिप्ट के साथ भेजूंगा जो मूल पृष्ठ को फिर से लिखने के लिए पूर्व-संकलित जानकारी को "भविष्य में एक स्थान आरक्षित करने" के लिए भेज सकता है। मुझे याद नहीं है कि उस समय जावास्क्रिप्ट व्याख्या की क्या ख़ासियत की आवश्यकता थी, लेकिन क्विन जैसी एन्कोडिंग, और आउटपुट पर डीकोडिंग, "भविष्य में एक स्थान आरक्षित" एचटीएमएल और संबंधित जावास्क्रिप्ट आवश्यक हो गया।