2010-04-16 9 views
8

मैंने सुना है कि किसी भी विशेष भाषा में पर्याप्त समय और कौशल के साथ प्रोग्रामर दिया गया है और कोड की पर्याप्त रेखाएं हैं, तो किसी भी प्रोग्राम को किसी दिए गए भाषा के साथ बनाया जा सकता है। मुझे पता है कि यह निश्चित रूप से लागत प्रभावी नहीं होगा, उदाहरण के लिए, बेसिक में एडोब फोटोशॉप को फिर से लिखना, लेकिन पर्याप्त अच्छा और धीरज पर्याप्त प्रोग्रामर संभावित रूप से किसी भी भाषा में कोई प्रोग्राम बना सकता है?क्या कोई भी भाषा संभवतः किसी भी प्रोग्राम को बनाने के लिए उपयोग की जा सकती है?

+0

कृपया अनंत बंदर प्रमेय पढ़ें। http://en.wikipedia.org/wiki/Infinite_monkey_theorem।मजाकिया बात यह है कि एक बंदर को पर्याप्त समय देना, आप सुनिश्चित हो सकते हैं कि आखिरकार यह विंडोज का एक नया संस्करण लिख देगा :) (और मैं निश्चित रूप से बंदर कोडर के बारे में बात नहीं कर रहा हूं!)। –

उत्तर

18

एक भाषा Turing complete है, तो सैद्धांतिक रूप से आप किसी भी प्रोग्राम उस में लिख सकते हैं - हालांकि, यहां तक ​​कि इस तरह के यूजर इंटरफेस और ओएस एपीआई के रूप में कुछ सीमाओं, है। उदाहरण के लिए, Brainfuck ट्यूरिंग पूर्ण है, लेकिन जीयूआई रखने का कोई तरीका नहीं है क्योंकि आप वीडियो मेमोरी तक नहीं पहुंच सकते हैं, और कोई थ्रेडिंग समर्थन नहीं है। हालांकि, इसके साथ किसी भी कम्प्यूटेशनल कार्य करना संभव है।

+1

आपके पास बीएफ के लिए एक्सटेंशन हो सकते हैं जो वीडियो मेमोरी तक पहुंच प्रदान करते हैं। या यहां तक ​​कि इसे केवल पॉइंटर श्रेणियों में से एक बना दें जो पहुंच योग्य है। लेकिन वह इसे चूसने से नहीं रोक पाएगा। (ओह, और बीएफ के लिए एक्सटेंशन हैं जो नेटवर्क I/O, फ़ाइल I/O और बहु ​​थ्रेडेड कोड का समर्थन करते हैं ... मैंने कभी भी बहु-थ्रेडेड का उपयोग नहीं किया है, लेकिन अन्य दो काम बहुत अच्छे हैं।) –

+0

यह ध्यान दिया जाना चाहिए कि किसी भी भाषा को "प्रोग्रामिंग भाषा" माना जाता है, ट्यूरिंग-पूर्ण है (बीएफ सहित, जिसमें केवल 8 ऑपरेशन हैं), इसलिए ऐसा कुछ नहीं है जो पूरा करना मुश्किल हो। –

3

यह सब समय का सवाल है, है ना? बेसिक के लिए उपयोग करने के लिए उपयुक्त पुस्तकालयों और एपीआई की कमी Adobe Photoshop प्रोजेक्ट को हमेशा के लिए ले सकती है, और यह समाप्त होने पर बहुत आसानी से नहीं चल सकती है, लेकिन सैद्धांतिक रूप से करने योग्य है।

1

भाषा ट्यूरिंग-पूर्ण हो गया है और यह भी फ़ाइलें, सॉकेट आदि जैसे कई अलग अलग कार्यों के लिए देशी ओएस का उपयोग करने की ...

1

ज़रूर (sorta) कोई तरीका होना चाहिए होगा। एक व्यापार बंद है, प्रदर्शन। कुछ भाषाएं सिस्टम के कुछ कार्यों तक पहुंचने में सक्षम नहीं हो सकती हैं जिससे उन्हें मशीन पर कुछ कार्य करने में असमर्थ बना दिया जाता है। कुछ भाषाएं सिर्फ ... दूसरों की तुलना में कमजोर हैं और इसमें कुछ समय लगेगा।

1

आप एक हेक्स संपादक में थोड़ा सा टाइप करके विंडोज 95 को फिर से बना सकते हैं लेकिन बिंदु क्या है?

+0

मैं शर्त लगाऊंगा कि यह लड़का ऐसा कर सकता है: http://stackoverflow.com/questions/2615481/things-you-can-draw-with-html-tables/2615638#2615638 – MusiGenesis

+0

ठीक है, वैसे ही वोज़ ऐसा करता था यह ऐप्पल I का प्रदर्शन करते समय। हालांकि मुझे लगता है कि उसने एक हेक्स संपादक के बजाय भौतिक स्विच का उपयोग किया है :) – Duncan

+0

आप कहते हैं कि जैसे कि यह _wasn't_ मूल रूप से कैसे बनाया गया था ... – msw

1

आपको "किसी भी कार्यक्रम" से आपका क्या मतलब है, इसके बारे में सावधान रहना होगा। उदाहरण के लिए, यदि आपको एक प्रोग्राम लिखने के लिए कहा गया था जिसमें "हैलो वर्ल्ड" युक्त डिस्क पर एक टेक्स्ट फ़ाइल बनाई गई है, और आपको इसे शुद्ध जावास्क्रिप्ट में लिखने के लिए कहा गया था, तो यह असंभव होगा क्योंकि शुद्ध जावास्क्रिप्ट में डिस्क पर कुछ भी लिखने की सुविधा नहीं है ।

इस विचार की पूरी तरह से चर्चा के लिए, आप computability पढ़ना चाहेंगे।

0

मुझे लगता है कि अगर आपकी भाषा का मतलब सभी इनपुट और आउटपुट को एक्सेस करने के लिए आवश्यक है तो हाँ।

0

यदि आपने "शक्तिशाली शक्तिशाली कंप्यूटर पर" जोड़ा है, और यह देखते हुए कि भाषा में पुस्तकालय हैं जो प्रोग्राम को जो भी करने की ज़रूरत है उसे संभाल सकता है ", तो उत्तर अभी भी नहीं होगा। कुछ भाषा प्रोग्रामर इतनी पागल हो सकती हैं कि वे खुद को मार दें। अगर मुझे कभी भी विजुअल बेसिक 3 (कक्षाओं या संग्रहों) पर वापस जाने के लिए मजबूर नहीं किया गया था, तो मुझे नहीं पता था कि नोटपैड को फिर से लिखना है।

7

यह इस बात पर निर्भर करता है कि आप "किसी भी कार्यक्रम" और "किसी भी भाषा" को कैसे परिभाषित करते हैं।

आइए पहले के साथ शुरू करें: "कोई प्रोग्राम"। प्रोग्रामिंग भाषा के बावजूद, कई प्रोग्राम हैं (वास्तव में, असीमित कई प्रोग्राम) हैं जिन्हें पर पर लिखा नहीं जा सकता है। सबसे मशहूर लोगों में से एक तथाकथित हैल्टिंग समस्या है: एक प्रोग्राम H लिखें, जब किसी भी प्रोग्राम को P दिया गया हो और कोई भी इनपुट x निर्धारित करता है कि P(x) अंततः रुका होगा। एलन ट्यूरिंग ने कई दशकों पहले साबित किया कि इस तरह के एक कार्यक्रम के लिए असंभव है। Ergo, आप किसी भी प्रोग्रामिंग भाषा में इस प्रोग्राम को नहीं लिख सकते हैं।

अब, चलो के बारे में "किसी भी भाषा" बात करते हैं। वास्तव में भाषाओं के विभिन्न वर्ग हैं। कुछ दूसरों की तुलना में अधिक शक्तिशाली हैं। उदाहरण के लिए नियमित अभिव्यक्ति (जो प्रोग्रामिंग भाषा का एक प्रकार है) नहीं किसी भी मनमाने ढंग से समारोह की गणना कर सकते हैं। वे अपनी कम्प्यूटेशनल शक्ति में सीमित हैं। हालांकि, अधिकांश सामान्य प्रयोजन प्रोग्रामिंग भाषाएं जिन्हें आमतौर पर "ट्यूरिंग-पूर्ण" कहा जाता है। इतिहास के

संक्षिप्त सा: आदेश लंगड़ा समस्या के undecidability साबित करने के लिए में, एलन ट्यूरिंग एक काल्पनिक मशीन ट्यूरिंग मशीन कहा जाता है का आविष्कार किया। एक टीएम असीमित स्मृति वाला एक काल्पनिक कंप्यूटर है, जो एक विशेष कार्य की गणना करता है। यह पता चला है कि आप एक यूनिवर्सल ट्यूरिंग मशीन का निर्माण कर सकते हैं जो किसी भी अन्य ट्यूरिंग मशीन का अनुकरण कर सकता है।

एक ही समय के बारे में में अलोंजो चर्च लैम्ब्डा पथरी का आविष्कार किया। नियंत्रण रेखा भी गणना के एक सार गणितीय मॉडल है, लेकिन पूरी तरह से अलग है। लोगों ने सोचना शुरू किया: उन दो मॉडल में से कौन सा शक्तिशाली है? क्या कोई ऐसी चीज है जो यूटीएम गणना कर सकती है कि एलसी नहीं कर सकता है और इसके विपरीत? क्या एलसी हलिंग समस्या हल कर सकता है?

यह पता चला है के रूप में, आप नियंत्रण रेखा में एक UTM के लिए एक एमुलेटर लिख सकते हैं और आप एक टीएम जो नियंत्रण रेखा की व्याख्या का निर्माण कर सकते हैं। इसका मतलब है कि एक टीएम गणना कर सकता है कि एलसी गणना कर सकता है (इसे केवल दुभाषिया में चलाकर) और एलसी यूटीएम की गणना कर सकते हैं सब कुछ गणना कर सकते हैं (इसे केवल एमुलेटर में चलाकर)। तो, हमारे पास

LC ≤ UTM ∧ UTM ≤ LC ⇒ LC = UTM 

अंग्रेजी में: एलसी और यूटीएम बिल्कुल समान रूप से शक्तिशाली हैं। वास्तव में, यह पता चला है कि गणना के हर मॉडल और हर मशीन और हर प्रोग्रामिंग भाषा हम कभी भी मिल गया है सबसे के रूप में शक्तिशाली नियंत्रण रेखा और UTM के रूप में और वास्तव में हर दूसरे मॉडल पर है। इससे तथाकथित चर्च-ट्यूरिंग-थीसिस होता है जो बताता है कि गणना के सभी पर्याप्त शक्तिशाली मॉडल समान रूप से शक्तिशाली हैं और गणना का कोई मॉडल नहीं हो सकता है जो यूटीएम या एलसी से अधिक शक्तिशाली है। (लूप घिरा कि कम शक्तिशाली हैं, उदाहरण के नियमित अभिव्यक्ति या कुल कार्य या केवल के साथ एक भाषा के लिए की तरह गणना के मॉडल हो सकते हैं।)

हम गणना ट्यूरिंग-पूर्ण के इस तरह के मॉडल कहते हैं। और, बीटीडब्ल्यू, you don't need much to be Turing-complete

तो, के साथ इस तरह से बाहर, अब हम परिभाषित कर सकते हैं कि हम क्या "किसी भी कार्यक्रम" और "किसी भी भाषा" मतलब:

एक कार्यक्रम एक ट्यूरिंग-पूर्ण भाषा में लिखा जा सकता है, तो, तो इसे में लिखा जा सकता है किसी भी ट्यूरिंग-पूर्ण भाषा

0

मुझे लगता है कि यदि आप "रचनात्मक पर्याप्त" जोड़ते हैं और आप शोषण को प्रोग्रामिंग माना जाता है और "किसी भी कार्यक्रम" की परिभाषा को किसी भी प्रोग्राम के अस्तित्व में शामिल किया जाता है, तो उत्तर हाँ है।

संबंधित मुद्दे

 संबंधित मुद्दे