क्या आप कार्यान्वयन के बिना एक प्रोग्रामिंग भाषा निर्दिष्ट कर सकते हैं?


11

क्या सैद्धांतिक रूप से एक प्रोग्रामिंग भाषा निर्दिष्ट करना संभव है जिसके लिए कोई कार्यान्वयन मौजूद नहीं हो सकता है? एक प्रोग्रामिंग भाषा फ़ंक्शंस को परिभाषित करने का एक तरीका है। कार्यान्वयन का अर्थ उस इनपुट पर प्रोग्राम के अनुरूप फ़ंक्शन के आउटपुट पर उस भाषा में दिए गए प्रोग्राम को निष्पादित करने के लिए एक विधि है।

ऐसी भाषा की न्यूनतम आवश्यकताएं क्या हैं?


3
किसी भाषा का "कार्यान्वयन" क्या है?
राफेल

@ राफेल: यह आप हैं जिन्होंने "प्रोग्रामिंग लैंग" को "भाषा" में बदल दिया है। आपके संपादन से पहले, यह स्पष्ट था कि किसी भाषा के कार्यान्वयन का क्या मतलब है।
त्सुकोशी इतो

@TsuyoshiIto: काफी नहीं; मैंने केवल प्रश्न का मिलान करने के लिए शीर्षक को अनुकूलित किया, जिसे cstheory.SE पर बदल दिया गया था। मैंने इसे वापस बदल दिया, लेकिन यह अभी भी स्पष्ट नहीं है कि इसका क्या मतलब है। एक संकलक? दुभाषिया? वैसे भी, यहाँ एक सवाल है कि लगभग एक साल पुराना है और एक उपयोगकर्ता द्वारा, जो स्पष्ट रूप से कभी भी इस सवाल का पुनरीक्षण नहीं किया है, की सलाह देता है।
राफेल

@ राफेल: "भाषा का कार्यान्वयन क्या है?" सभी सुराग निकालने के बाद बस मेरी समझ से परे था। लेकिन मैं मानता हूं कि यह सवाल शुरू से ही अस्पष्ट था।
त्सुयोशी इतो

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

जवाबों:


7

आमतौर पर, एक प्रोग्रामिंग भाषा को लागू करना कम से कम एक भाषा (या किसी भाषा के लिए एक संकलक) में एक दुभाषिया दे रहा है जो ट्यूरिंग-पूर्ण से अधिक नहीं है।

इस "परिभाषा" का उपयोग करके हम एक प्रोग्रामिंग भाषा को इस तरह निर्दिष्ट कर सकते हैं:

इस प्रोग्रामिंग भाषा को लागू करने के लिए कार्यान्वयन के साथ समस्या को हल करना आवश्यक है। (जो असंभव है क्योंकि हमारा कार्यान्वयन ट्यूरिंग मशीन से अधिक शक्तिशाली नहीं होना चाहिए)।

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


1
सामान्यीकृत: कोई भी भाषा जो एक फ़ंक्शन को निर्दिष्ट करती है जो एक अकल्पनीय समस्या को हल करती है उसे लागू नहीं किया जा सकता है।
eda-qa mort-ora-y

@ edA-qamort-ora-y तकनीकी रूप से इसे लागू किया जा सकता है। आप हॉल्टिंग समस्या का फैसला नहीं कर सकते , लेकिन एक टीएम दूसरी मशीन का अनुकरण कर सकती है और स्वीकार कर सकती है कि क्या मशीन रुकती है; इस तरह की टीएम द्वारा स्वीकार की जाने वाली भाषा बिल्कुल (इनकोडिंग) मशीनों की भाषा है जो रुक जाती है। लेकिन व्यावहारिक उद्देश्यों के लिए हम आम तौर पर प्रोग्रामिंग भाषाओं के आदिम संचालन को समाप्त करने की गारंटी देते हैं! (कम से कम "समझदार" इनपुट पर)
बेन

1
हां, किसी भाषा के कार्यों में :) से कम समय की जटिलता होनी चाहिए :)O()
edA-qa mort-ora-y

@ edA-qamort-ora-y यह हमेशा सच नहीं है। उदाहरण के लिए, हास्केल के डीनोटेशनल शब्दार्थ और इस प्रकार स्पष्ट रूप से मॉडल में है। व्यवहार में, सभी हास्केल कार्यान्वयन अपवाद और विचलन के बीच अंतर करते हैं, और जीएचसी में एक निर्दिष्ट ऑपरेशन शब्दार्थ है जो बताता है कि अपवाद कैसे काम करने वाले हैं। लेकिन, यह एक अनुरूप क्रियान्वयन संभव होगा जो हमेशा के लिए शून्य से विभाजित हो जाए! 1/0 Ω ( ) let loop = loop in loopΩ()
फिलिप जेएफ

3

बस एक जिज्ञासु पक्ष ध्यान दें: C ++ टेम्पलेट इंजन ट्यूरिंग-पूर्ण है

प्रमेय 1: तात्कालिक सीमा की अनुपस्थिति में, C ++ टेम्प्लेट ट्यूरिंग-पूर्ण हैं।

कोरोलरी 1: तात्कालिकता की सीमा के अभाव में, किसी दिए गए प्रोग्राम को संकलित करते समय C ++ कंपाइलर रुक जाएगा या नहीं।

... इसलिए C ++ को एक प्रोग्रामिंग भाषा माना जा सकता है जिसके लिए कोई "कार्यान्वयन" मौजूद नहीं हो सकता है ...: -D


तो क्या एक सी "संकलक" को एक दुभाषिया के रूप में इस्तेमाल किया जा सकता है अगर कोई उस कोड के बारे में परवाह नहीं करता है जो उत्पन्न हुआ था लेकिन बस निदान का उत्पादन किया गया था?
सुपरैट

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

2

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

तार पर एक (आंशिक) कार्यों की गणना के लिए एक "प्रोग्रामिंग" भाषा को से तक मानचित्रण माना जा सकता है । जब तक कि भाषा में अमल नहीं किया जा सकता है, तब तक एक भी अपरिहार्य कार्य नहीं है।2 Σ *Σ2Σ

उदाहरण के लिए, कोई प्रथम-क्रम अंकगणित ले सकता है। फिर उन कार्यों को परिभाषित करना आसान है जो गणना योग्य नहीं हैं, उदाहरण के लिए, फ़ंक्शन जिसने TM दिया , यह तय करें कि क्या सभी इनपुट पर देता है। इसे अंकगणित की भाषा में पहले क्रम के सूत्र द्वारा आसानी से व्यक्त किया जा सकता है। दूसरी ओर यह कम्प्यूटेबिलिटी सिद्धांत में एक आसान परिणाम है कि यह एक कम्प्यूटेशनल फ़ंक्शन नहीं है, इसलिए फ़ंक्शन का कोई कार्यान्वयन नहीं हो सकता है।एम 0MM0

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

(मेरा अनुमान है कि आप शायद प्रोग्रामिंग भाषाओं को या तो विनिर्देश भाषाओं के साथ या औपचारिक भाषाओं के साथ भ्रमित कर रहे हैं । किसी भी मामले में, हम उन भाषाओं को परिभाषित कर सकते हैं जो कम्प्यूटेशनल नहीं हैं।)


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

@, यदि आप cstheory पर मूल प्रश्न को देखते हैं, तो आप देखेंगे कि केवल शीर्षक में प्रश्न में कोई शब्द प्रोग्रामिंग नहीं है। ओपी द्वारा पोस्ट किया गया प्रश्न निश्चित रूप से स्पष्ट है। ps: मुझे एक प्रोग्रामिंग भाषा क्या है इसकी परिभाषा एक कठोर (औपचारिक होने की आवश्यकता नहीं है) में रुचि होगी। हम प्रोग्रामिंग भाषाओं के बारे में नकारात्मक परिणामों को केवल अंतर्ज्ञान और उदाहरणों के आधार पर साबित नहीं कर सकते। यदि आपके पास एक परिभाषा के लिए संदर्भ है तो आप इसे संपादित करें या प्रश्न के लिए टिप्पणी के रूप में पोस्ट करें।
केव

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

1

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.