programming languages computer प्रोग्रामिंग भाषाओं का जिक्र करते समय "अभिव्यंजक" का क्या अर्थ है?




हिस्ट्री ऑफ़ प्रोग्रामिंग लैंग्वेजेज (6)

इस शब्द को मैंने बहुत सुना जैसे "जावास्क्रिप्ट एक बहुत ही अभिव्यंजक भाषा है"। क्या इसका मतलब यह है कि बहुत सारे नियम नहीं हैं, या "अभिव्यंजक" का एक अधिक विशिष्ट अर्थ है?


'एक्सप्रेसिव' का मतलब है कि कोड लिखना आसान है जिसे समझना आसान है, संकलनकर्ता और मानव पाठक दोनों के लिए।

दो कारक जो अभिव्यक्ति के लिए बनाते हैं:

  • सहज ज्ञान युक्त पठनीय निर्माण
  • बॉयलरप्लेट कोड की कमी

कम अभिव्यंजक जावा eqivalent के साथ इस अभिव्यंजक ग्रूवी की तुलना करें:

3.times {
   println 'Hip hip hooray'
}

बनाम

for(int i=0; i<3; i++) {
    System.out.println("Hip hip hooray");
}

कभी-कभी आप स्पष्टता के लिए सटीक व्यापार करते हैं - ग्रूवी उदाहरण काम करता है क्योंकि यह ऐसे सामान को मानता है जो जावा आपको स्पष्ट रूप से निर्दिष्ट करने के लिए बनाता है।


यहाँ, एक बहुत ही विवादास्पद तुलना:

http://redmonk.com/dberkholz/2013/03/25/programming-languages-ranked-by-expressiveness/

तो, इन मैट्रिक्स द्वारा सबसे अच्छी भाषाएं क्या हैं?

यदि आप मंझला और IQR द्वारा रैंकिंग के आधार पर शीर्ष 10 चुनते हैं, तो उनमें से चौराहे ले लो, यहाँ क्या बचा है। मंझला और IQR नामों के तुरंत बाद सूचीबद्ध होते हैं:

Augeas (48, 28): कॉन्फ़िगरेशन फ़ाइलों के लिए एक डोमेन-विशिष्ट भाषाएँ

पपेट (52, 65): कॉन्फ़िगरेशन के लिए एक और डीएसएल आरईबीओएल (57, 47): वितरित कंप्यूटिंग के लिए डिज़ाइन की गई भाषा

eC (75, 75): एक्रे सी, ऑब्जेक्ट ओरिएंटेशन के साथ एक C व्युत्पन्न

कॉफीस्क्रिप्ट (100, 23): एक उच्च-स्तरीय भाषा जो जावास्क्रिप्ट को स्थानांतरित करती है

क्लोजर (101,51): कार्यात्मक, समवर्ती प्रोग्रामिंग के लिए एक लिस्प बोली

वाला (123, 61): गनोम द्वारा प्रयुक्त एक वस्तु-उन्मुख भाषा

हास्केल (127, 71): एक विशुद्ध रूप से कार्यात्मक, मजबूत स्थैतिक टाइपिंग के साथ संकलित भाषा


नील ग्रेगर के पास इस विषय पर एक अच्छी उद्धरण के साथ एक ब्लॉग है ...

मेरे दिमाग में, एक भाषा निर्माण अभिव्यंजक है यदि यह आपको एक एपीआई लिखने (और उपयोग करने) में सक्षम बनाता है जिसे निर्माण के बिना नहीं लिखा जा सकता (और उपयोग किया जाता है)।

मैं कहूंगा कि इसका मतलब है कि आप कोड में अपने विचारों को अधिक स्वाभाविक रूप से व्यक्त कर सकते हैं।



मैं इसका मतलब यह निकालता हूं कि यह एक आसान-से-पढ़ने और रसीले तरीके से विचारों / एल्गोरिदम / कार्यों को व्यक्त करने में सक्षम है।

आमतौर पर मैं एक भाषा को जोड़-तोड़ वाली चीनी के साथ अभिव्यक्त करता हूं, हालांकि हमेशा ऐसा नहीं होता है। यह अभिव्यंजक होने के C # में उदाहरण होंगे:

  • foreach (स्पष्ट रूप से पुनरावृति लिखने के बजाय)
  • using कथन (स्पष्ट रूप से कोशिश / अंत में लिखने के बजाय)
  • क्वेरी अभिव्यक्ति (LINQ प्रश्न लिखने के लिए सरल सिंटैक्स)
  • विस्तार विधियाँ (मुख्य रूप से LINQ के लिए फिर से, विधि कॉल की अनुमति देना)
  • अनाम विधियां और लंबोदर भाव (आसान प्रतिनिधि और अभिव्यक्ति वृक्ष निर्माण की अनुमति)

एक अलग उदाहरण जेनरिक होगा: सी # से पहले जेनेरिक मिले, आप कोड में "केवल एक स्ट्रिंग युक्त एक ArrayList " के विचार को व्यक्त नहीं कर सकते थे। (आप इसे दस्तावेज़ कर सकते हैं, ज़ाहिर है, या अपने स्वयं के StringList प्रकार लिख सकते हैं, लेकिन यह बिल्कुल समान नहीं है।)


वह काफी मुश्किल है।

मेरे लिए, यह उस सहजता के साथ करना है जिस पर आप अपनी मंशा व्यक्त कर सकते हैं। यह अलग-अलग भाषाओं में अलग-अलग है, और यह भी बहुत कुछ इस बात पर निर्भर करता है कि आप क्या करना चाहते हैं, इसलिए यह एक ऐसा क्षेत्र है जहाँ सामान्यीकरण सामान्य हैं। यह निश्चित रूप से व्यक्तिपरक और व्यक्तिगत भी है।

यह सोचना आसान है कि उच्च स्तरीय भाषा हमेशा अधिक अभिव्यंजक होती है, लेकिन मुझे नहीं लगता कि यह सच है। यह इस बात पर निर्भर करता है कि आप क्या समस्या एक्सप्रेस पर व्यक्त करने की कोशिश कर रहे हैं।

यदि आप फ़्लोटिंग-पॉइंट संख्या को प्रिंट करना चाहते हैं जिसमें बाइनरी पैटर्न 0xdeadbeef , तो उदाहरण के लिए, बश की तुलना में C में करना बहुत आसान है। फिर भी बैश, सी की तुलना में एक अति-उच्च-स्तरीय भाषा है। दूसरी ओर, यदि आप कोई प्रोग्राम चलाना चाहते हैं और उसके आउटपुट को टेक्स्ट फाइल में इकट्ठा करना चाहते हैं, तो यह इतना आसान है कि यह बैश में लगभग अदृश्य है, फिर भी सी में कोड के कम से कम पेज की आवश्यकता होगी (एक POSIX वातावरण मानकर)।