यदि हम पुस्तक (या यदि आप चाहें तो भाषा विनिर्देश के किसी अन्य संस्करण) पर जाते हैं, तो सी कार्यान्वयन के लिए कितनी कम्प्यूटेशनल शक्ति हो सकती है?
ध्यान दें कि "C कार्यान्वयन" का एक तकनीकी अर्थ है: यह C प्रोग्रामिंग भाषा विनिर्देश का एक विशेष तात्कालिकता है जहां कार्यान्वयन-परिभाषित व्यवहार प्रलेखित है। एसी कार्यान्वयन को वास्तविक कंप्यूटर पर चलाने में सक्षम होने की आवश्यकता नहीं है। इसमें पूरी भाषा को लागू करना होता है, जिसमें बिट-स्ट्रिंग प्रतिनिधित्व वाली प्रत्येक वस्तु और कार्यान्वयन-परिभाषित आकार वाले प्रकार शामिल होते हैं।
इस प्रश्न के उद्देश्य के लिए, कोई बाहरी भंडारण नहीं है। एकमात्र इनपुट / आउटपुट जो आप कर सकते हैं, वह है getchar
(प्रोग्राम इनपुट पढ़ने के लिए) और putchar
(प्रोग्राम आउटपुट लिखने के लिए)। अपरिभाषित व्यवहार को आमंत्रित करने वाला कोई भी कार्यक्रम अमान्य है: एक मान्य कार्यक्रम में सी विनिर्देश द्वारा परिभाषित व्यवहार का कार्यान्वयन होना चाहिए और कार्यान्वयन-परिभाषित व्यवहार के परिशिष्ट जे (C99 के लिए) में सूचीबद्ध है। ध्यान दें कि मानक में उल्लिखित पुस्तकालय फ़ंक्शन को कॉल करना अपरिभाषित व्यवहार नहीं है।
मेरी प्रारंभिक प्रतिक्रिया यह थी कि C कार्यान्वयन परिमित ऑटोमेटन से अधिक कुछ नहीं है, क्योंकि इसमें पता योग्य मेमोरी की मात्रा की सीमा होती है (आप sizeof(char*) * CHAR_BIT
संग्रहण के बिट्स से अधिक पता नहीं कर सकते हैं , क्योंकि स्टोर किए जाने पर अलग-अलग मेमोरी एड्रेस के अलग-अलग बिट पैटर्न होने चाहिए। एक बाइट पॉइंटर में)।
हालाँकि मुझे लगता है कि एक कार्यान्वयन इससे अधिक कर सकता है। जहां तक मैं बता सकता हूं, मानक पुनरावृत्ति की गहराई पर कोई सीमा नहीं लगाता है। तो आप जितने चाहें उतने पुनरावर्ती फ़ंक्शन कॉल कर सकते हैं, केवल सभी लेकिन सीमित संख्या में कॉलों को गैर-पता योग्य ( register
) तर्कों का उपयोग करना चाहिए । इस प्रकार एक सी कार्यान्वयन जो मनमानी पुनरावृत्ति की अनुमति देता है और register
वस्तुओं की संख्या पर कोई सीमा नहीं है, नियतात्मक पुशडाउन ऑटोमेटा को एन्कोड कर सकता है।
क्या ये सही है? क्या आप अधिक शक्तिशाली सी कार्यान्वयन पा सकते हैं? क्या ट्यूरिंग-पूर्ण सी कार्यान्वयन मौजूद है?