किसी विशिष्ट कार्य के लिए भाषा "अनुकूलित" क्या करती है?


15

अक्सर प्रोग्रामिंग भाषाएं होती हैं जो विशिष्ट कार्यों के लिए विशिष्ट होती हैं। कुछ प्रोग्रामिंग भाषाएं सरणी अंकगणित (जैसे मैट्रिसेस और बहुआयामी सरणियों के उपयोग) में उत्कृष्ट हैं, फिर भी कुछ उच्च स्तर के गणित में बहुत बेहतर हैं जो अन्य भाषाओं में पुन: पेश करने के लिए कठिन है (अभी भी सभी समान हैं)।

किसी भाषा के बारे में अन्य भाषाओं की तुलना में किसी विशिष्ट कार्य या अंत-लक्ष्य के लिए बेहतर क्या है, यह देखते हुए कि किसी भी विधानसभा को बस जमा करने के लिए तैयार है?

मैं ट्यूरिंग की पूरी भाषाओं के बारे में बात कर रहा हूं, जो कि ट्यूरिंग के बराबर हैं।


1
यह एक विश्वकोशीय प्रश्न है। मेरा सुझाव है कि आप इसे किसी तरह से तोड़ते हैं, इसे और अधिक विशिष्ट बनाते हैं।
एंड्रे सूजा लेमोस

5
क्या इसे "मार्केटिंग" कहना गलत होगा?
corsiKa

2
@corsiKa हाँ, मुझे लगता है कि यह विपणन के एक मुद्दे से अधिक है।
जेरेमी वेस्ट

जवाबों:


18

विचार करने के लिए कुछ चीजें हैं:

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

    इसी तरह, यदि आपको एसिंक्रोनस संचार का एक जटिल सिस्टम मिला है, तो आप संभवतः प्रथम श्रेणी के कार्य चाहते हैं ताकि आप कॉलबैक कर सकें।

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

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

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

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


8

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

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

उदाहरण के लिए गुणन विभिन्न मामलों का उपयोग करता है ( GMP गुणन देखें ।

जब भाषा उच्च स्तर के गणितीय कार्यों को निर्दिष्ट करती है, तो इसे लागू करना इष्टतम (इस मामले में कुशल) होता है, लेकिन यह भाषा विनिर्देश का हिस्सा नहीं है।

कृपया Matlab, Mathematica और Maple में मैट्रिक्स रैंक गणना पर एक नज़र डालें (मैं अभी सभी परीक्षण स्वयं नहीं कर सकता, लेकिन ये मेरे परीक्षणों के अनुरूप हैं)। ये सभी भाषाएं (वातावरण) समान स्तर के संचालन को लागू करती हैं लेकिन कार्यान्वयन विवरण अलग-अलग होते हैं जो विभिन्न समय देते हैं।

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

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


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

1
@jmite धन्यवाद। मुझे उम्मीद है कि यह अब मतभेद नहीं है
ईविल

@ ईविल: ठीक है, मुझे लगता है कि कार्यों के लिए अनुकूलित नहीं होने वाली भाषाओं के बारे में आपका बयान गलत है। आप कंप्यूटर के दृष्टिकोण से शब्द का अनुकूलन देख रहे हैं। लेकिन कुछ भाषाओं को केवल प्रोग्रामर के लिए आसान बनाने के लिए डिज़ाइन किया गया है और इसे लागू करने के तरीके को लागू करने के लिए लागू करने वालों का पता लगाने दें।
theDoctor

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

5

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

व्यवहार में, इनमें से लगभग किसी भी मात्रा को वास्तव में मापा नहीं जा सकता है। फिर भी, मुझे लगता है कि समस्या के बारे में सोचने का यह सही तरीका है।


4

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

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


3

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

उदाहरण के लिए, C और C ++ दोनों का उपयोग ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग के लिए किया जा सकता है - और वास्तव में, GObject लाइब्रेरी OO C. का एक अच्छा उदाहरण है। AC पॉइंट वाले फ़ंक्शन पॉइंटर्स C ++ क्लास पर वर्चुअल मेथड्स के समान उद्देश्य को पूरा कर सकते हैं और प्रदर्शन कर सकते हैं। बेहतर; डेवलपमेंट पेनल्टी मेमोरी को आवंटित करने, फंक्शन पॉइंट्स को इनिशियलाइज़ करने और 'पैरेंट' के तरीकों को कॉल करने की रणनीति चुनने के लिए ग्लू कोड है। अधिकांश समय यह टाइप करने के लिए स्पष्ट / सुरक्षित Class klass * = new class()है struct class *klass = malloc(sizeof(struct class));klass->fn1 = ...;klass->fnN = ...


खैर, जेमाइट का जवाब बुलेट के साथ प्रदान करता है जो आपके द्वारा लिखी गई चीजें गायब हैं। मैंने डोमेन विशिष्ट कार्यों के बारे में लिखा था जो इस मामले के लिए अनुकूलित हैं। मुझे सी पसंद है, मुझे ओसीसी जैसी चीजें पता हैं, लेकिन यह सी ऑब्जेक्ट ओरिएंटेड नहीं है (कंपाइलर इससे मदद नहीं करता है और कई अनुकूलन को रोका जाता है, कोई कचरा कलेक्टर नहीं है, आदि)। आप C ++ की तरह C फ़ंक्शन को अधिभार नहीं दे सकते, लेकिन निश्चित रूप से आप किसी भी व्यवहार का अनुकरण कर सकते हैं (jmite ने इस बारे में भी लिखा है)। मैं यह नहीं देखता कि यह कहा गया प्रश्न कैसे उत्तर देता है।
Evil

2
@ ईविल: ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग और ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग लैंग्वेज दो अलग-अलग अवधारणाएं हैं। ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग को ऑब्जेक्ट ओरिएंटेड भाषा की आवश्यकता नहीं होती है। यकीनन इसके लिए सिर्फ कागज या व्हाइटबोर्ड के अस्तित्व की आवश्यकता होती है ताकि आप अपना यूएमएल डिजाइन कर सकें।
स्लीवेटमैन

@slebetman मैंने नहीं देखा कि आ रहा है। तर्क से आपको कागज और व्हाइटबोर्ड की आवश्यकता नहीं है, आप बस वस्तुओं की कल्पना कर सकते हैं, और कुछ लोगों के अनुसार यह हम कैसे सोचते हैं, लेकिन यह ओओपी अवधारणाओं के भाषा समर्थन के करीब नहीं है। मुझे खेद है, लेकिन यह विवाद है जिसे मैं नहीं चुनना चाहता।
ईविल

@ ईविल: मैं आपकी मदद करने के लिए कुछ अमूर्तता के बिना मानसिक रूप से इसका ट्रैक रखने में सक्षम होने के बारे में निश्चित नहीं हूं । मेरी पहली नौकरी को C कोड का एक बड़ा टुकड़ा दिया जा रहा था जो फंक्शन पॉइंटर्स के साथ सभी सरणियों की तरह दिखता था (मुझे यह समझने में थोड़ा समय लगा कि अजीब वाक्य रचना का क्या मतलब है - कोई Google वापस तो नहीं) और मैं इसके साथ संघर्ष कर रहा था जब तक कि मैं एक पैटर्न देखना शुरू नहीं करता और महसूस किया कि वे सरणियाँ ऑब्जेक्ट्स थे और वे फ़ंक्शन पॉइंटर्स मेथड थे। अपने आप को एक छोटा व्हाइटबोर्ड खरीदा और बहुत सारे ए 4 पेपर का इस्तेमाल किया लेकिन आखिरकार मैं कोड को समझने में कामयाब रहा
स्लीवेटमैन

1
@slebetman यह देखते हुए कि ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग कम से कम 20 वर्षों से यूएमएल से पहले से है, आपका दावा है कि ऑब्जेक्ट ओरिएंटेशन के लिए यूएमएल डिजाइन आवश्यक हैं यह पूरी तरह से गलत प्रतीत होता है।
डेविड रिचरबी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.