ट्यूरिंग पूर्णता के अलावा अन्य शक्ति का मापन


18

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

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

जवाबों:


24

आप जिस धारणा की तलाश कर रहे हैं उसे अभिव्यक्ति कहा जाता है और माथियास फेलेसेन की गणितीय रूप से कठोर परिभाषा है:

" प्रोग्रामिंग भाषाओं की अभिव्यंजक शक्ति पर "

www.ccs.neu.edu/scheme/pubs/scp91-felleisen.ps.gz (पोस्टस्क्रिप्ट)

इस विचार के पीछे अंतर्ज्ञान यह है कि यदि आपके पास दो अलग-अलग भाषाओं में दो समान कार्यक्रम हैं - कहते हैं, प्रोग्राम ए में भाषा X में और प्रोग्राम Y में भाषा Y-- और यदि आप A में स्थानीय परिवर्तन करते हैं, तो B के लिए वैश्विक परिवर्तन की आवश्यकता होती है , तब X, Y से अधिक अभिव्यंजक है।

एक उदाहरण Felleisen प्रदान करता है असाइनमेंट: योजना प्रोग्रामिंग भाषाओं में आप असाइनमेंट ऑपरेटर को निकाल सकते हैं और अभी भी ट्यूरिंग पूरी भाषा है। हालांकि, इस तरह की प्रतिबंधित भाषा में, एक ऐसी सुविधा को जोड़ना, जिसे स्थानीयकृत किया जाएगा यदि असाइनमेंट की अनुमति दी गई थी, तो असाइनमेंट के साथ कार्यक्रम में वैश्विक परिवर्तन की आवश्यकता होगी।

मेरी चर्चा ने कुछ विवरणों को सरल बना दिया है, और आपको पूर्ण खाते के लिए कागज को स्वयं पढ़ना चाहिए।

अपने अन्य प्रश्न का उत्तर देने के लिए: आप कह सकते हैं कि जावा असेंबली की तुलना में अधिक अभिव्यंजक है क्योंकि आप अपने जावा प्रोग्राम में एक नया वर्ग जोड़ सकते हैं, और फिर अपने कार्यक्रम के अन्य हिस्सों को वैश्विक संशोधन के बिना अपने तरीकों से कॉल करके बहुरूपता का लाभ प्राप्त कर सकते हैं। एक्सेप्शन हैंडलिंग एक और उदाहरण है जहां जावा असेंबली की तुलना में अधिक अभिव्यंजक है: throwस्टैक पर नियंत्रण स्थानांतरित करने के लिए आपको बस एक स्टेटमेंट लिखने की आवश्यकता है । अधिक प्राथमिक स्तर पर, आप एक caseशुरुआत के पास एक नया बयान भी जोड़ सकते हैं switchऔर आपको हाथ से किसी भी कूदने वाले ऑफसेट को फिर से शुरू करने के बारे में चिंता करने की आवश्यकता नहीं होगी।


आपका बहुत बहुत धन्यवाद! यही वह है जिसकी तलाश में मैं हूं!
Casebash

6

यदि मैं आपके प्रश्न को सही ढंग से समझता हूं, तो आप फिर भी ऐसी चीज की तलाश कर रहे हैं जो अपेक्षाकृत औसत दर्जे की हो और न कि केवल व्यक्तिपरक निर्णय कॉल हो। यदि ऐसा है, तो मैं व्यक्तिगत रूप से किसी विशेष समस्या (सभी समस्याओं और सभी प्रोग्रामर पर औसतन) को हल करने में लगने वाले समय की राशि का पक्ष लूंगा। इस उपाय में, आपको केवल भाषा ही नहीं, बल्कि इसके साथ उपयोग की जाने वाली रूपरेखा / एपीआई पर भी विचार करने की आवश्यकता हो सकती है। रसीला वाक्यविन्यास एक बहुत छोटा कारक है: बहुत अधिक महत्वपूर्ण यह है कि सबसे अधिक आवश्यक कार्यक्षमता आसानी से सुलभ है।

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


मैं कहूंगा कि लिया गया समय मापने के साथ ही व्यक्तिपरक भी है। किस प्रोग्रामर ने समय लिया? यदि आप एक ही प्रोग्रामर के साथ दोनों भाषाओं का परीक्षण करते हैं, तो वह किस भाषा को बेहतर जानता है? इससे निपटने के लिए सांख्यिकीय तरीके हैं, लेकिन एक व्यक्ति इसे अकेले नहीं कर सकता है।
जॉन फिशर

1
@ जॉन: सिर्फ इसलिए कि कुछ का विश्लेषण केवल सांख्यिकीय रूप से किया जा सकता है इसका मतलब यह नहीं है कि यह व्यक्तिपरक है।
डेविड थॉर्नले

@ डेविड: यह वास्तव में मेरी बात नहीं थी। मुद्दा यह था कि बिना किसी पूर्व अध्ययन के, प्रश्नकर्ता उन भाषाओं की "शक्ति" की तुलना करने में असमर्थ होगा जिनकी उसने परवाह की थी - जब एक बड़े समूह पर सांख्यिकीय रूप से विश्लेषण नहीं किया गया तो इसे व्यक्तिपरक छोड़ दिया।
जॉन फिशर

1

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


2
इसके साथ कठिनाई यह है कि किसी भाषा को जानने से उसे जानने वाले को आसानी होती है। तो, यह उपाय व्यक्तिपरक हो जाता है।
जॉन फिशर

1

आपको अपनी शब्दावली को बेहतर ढंग से परिभाषित करने की आवश्यकता है।

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

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

संपादित करें

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

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


1
मुझे पता है कि ट्यूरिंग संपूर्णता कम्प्यूटेबिलिटी के बारे में है। हम जानते हैं कि संगणना के पैमाने पर कम उपाय मौजूद हैं, जैसे कि परिमित राज्य मशीनें। लेकिन हम इसके ऊपर की शक्ति के स्तर को परिभाषित करने के लिए कम्प्यूटेबिलिटी का उपयोग नहीं कर सकते हैं, क्योंकि ट्यूरिंग पूर्णता कम्प्यूटेबिलिटी के मामले में अधिकतम रूप से शक्तिशाली है
केसबैश

@ कैसबाश - आपने अभी भी यह नहीं कहा है कि "पावर" क्या है।
स्टीफन सी

2
Thats क्योंकि मैं नहीं जानता और वह इस सवाल का पूरा बिंदु है!
केसबश

तो फिर आपके जवाब देने की क्या बात है? यह एक टिप्पणी होनी चाहिए थी।
रीइनरईयरपोस्ट

@reinerpost - मेरे उत्तर की बात विस्तार से समझाना है कि प्रश्न निरर्थक है, और क्यों। मूल रूप से प्रश्न पूछ रहा है "कुछ ऐसा है जिसे 'अभिव्यंजक शक्ति' कहा जाता है - मुझे नहीं पता कि यह क्या है लेकिन क्या आप मुझे इसे मापने के लिए कह सकते हैं।" और मेरे उत्तर की ललक यह है कि 'अभिव्यक्ति की शक्ति' बीमार परिभाषित अवधारणा / संपत्ति है, और निश्चित रूप से एक औसत दर्जे का / मात्रात्मक नहीं है। (और यह स्पष्ट रूप से एक जवाब है और एक टिप्पणी नहीं है। शायद आप बस समझ नहीं पाए कि मैं क्या कहना चाह रहा हूं?)
स्टीफन सी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.