"शक्तिशाली" भाषा क्या है?


22

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


5
एक भाषा अपने उपयोगकर्ता के समान शक्तिशाली होती है।
ysolik

6
@ysolik जरूरी नहीं कि सच हो। मैं किसी को एक भद्दी भाषा दे सकता था और देख सकता था कि वे कितनी दूर हैं। यह एक सेशन है, NOOP! =)
मार्क कैनलास

2
@ मर्क अगर हम चरम सीमा पर बात कर रहे हैं, तो आप सही हैं। हालांकि, यदि आप आज की अधिक या कम व्यापक रूप से उपयोग की जाने वाली भाषाओं पर विचार करते हैं, तो उपयोगकर्ता इसका एक बड़ा हिस्सा है।
ysolik

1
PowerBASIC: इससे अधिक शक्तिशाली कोई और नहीं मिल सकता। ^ ^
गैबलिन

1
@ysolik: यह कहना अधिक सटीक होगा "कोई भाषा अपने उपयोगकर्ता से अधिक शक्तिशाली नहीं हो सकती है।"
डंकन बेने

जवाबों:


32

हम परिभाषित नहीं कर सकते हैं कि "शक्तिशाली" भाषा पहली बार "शक्तिशाली" शब्द को परिभाषित किए बिना क्या है।

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

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

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

क्या हर कोई देखता है कि यहाँ क्या चल रहा है? वस्तुतः हर बुलेट-पॉइंट फीचर की व्याख्या "शक्ति" के संकेत के रूप में की जा सकती है, और इसलिए इसके ठीक विपरीत हो सकता है!

किसी ने, कहीं, स्पष्ट रूप से सोचा था कि चर चर एक भयानक विचार था जो भाषा को बहुत शक्तिशाली बना देगा । मैं न्याय नहीं करूंगा; मैं एक PHP आदमी नहीं हूँ।

मेरा प्रस्ताव है कि इस सभी पवित्र-युद्ध बकवास के बजाय, हम सभी इसे वास्तव में सरल परिभाषा का उपयोग करते हैं:

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

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

अन्यथा, आप सिर्फ बंदूक की लड़ाई के लिए वास्तव में एक बड़ा चाकू ला सकते हैं ।


1
+1 यह एकमात्र परिभाषा है जो भाषा शक्ति के सभी विभिन्न धारणाओं को शामिल करने की कोशिश करती है। मुझे विशेष रूप से पसंद है कि आप कैसे दिखाते हैं कि परस्पर विरोधी विशेषताएं दोनों को शक्तिशाली माना जा सकता है। कंप्यूटर विज्ञान भाषा की पसंद में भी व्यापार-नापसंद का विज्ञान है।
21x:02 बजे कोडेक्सआर्केनम

11

मैं शायद पक्षपाती हूं क्योंकि मैं एक सिस्टम प्रोग्रामर हूं। मुझे लगता है कि कर्नेल, सिस्टम, सर्वर और एप्लिकेशन प्रोग्रामिंग के सभी के लिए उपयोग की जाने वाली एक प्रोग्रामिंग भाषा, या कई प्रोग्रामिंग प्रतिमानों का समर्थन करती है, या दोनों को "शक्तिशाली" कहा जा सकता है।

सी, सी ++, डी शक्तिशाली हैं, लेकिन जाहिर है कि यह सिर्फ मेरी विनम्र राय है।


आप कर्नेल स्तर की प्रोग्रामिंग के लिए जावा का उपयोग करेंगे या क्या मैं आपको गलत समझ रहा हूं?
डेवी

@ डेवी 8, आप सही हैं, मेरी अपनी परिभाषा से, मुझे जावा को शामिल नहीं करना चाहिए था।
ग्रोथ

5

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

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

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

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

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

COBOL भी अमूर्त स्पेक्ट्रम के उच्च अंत को मारने में विशेष रूप से अच्छा नहीं है। विकिपीडिया के अनुसार इसमें "कोई उपयोगकर्ता-परिभाषित प्रकार नहीं है, और कोई उपयोगकर्ता-परिभाषित कार्य नहीं है", जो एल्गोरिदम और डेटा संरचनाएं बनाना बहुत मुश्किल है।


1
इसके साथ मुझे जो समस्या है वह यह है कि यह COBOL को एक बहुत शक्तिशाली भाषा के रूप में इंगित करता है।
डेविड थॉर्नले

2
मुझे लगता है कि आप लिस्प को नहीं जानते हैं? :)
डैश-टॉम-बैंग

1
@Matt: यह बात है। क्या एक भाषा के लिए क्या एक भाषा के द्वारा सीमित है प्रयोग किया जाता है किया जा सकता है के लिए इस्तेमाल किया, और वहाँ एक बहुत कुछ है आपको उतना ही कम है कि नहीं सार दूर स्मृति-संबंधी विवरण करता है एक भाषा के साथ की तुलना में अजगर के साथ क्या कर सकते हैं।
मैसन व्हीलर

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

1
@ Jörg W Mittag: आप सही हैं, लेकिन मुझे लगता है कि मैंने जो वाक्य उद्धृत किया है, वह हार्डवेयर संसाधनों के प्रत्यक्ष नियंत्रण (जैसे मेमोरी) को संदर्भित करता है: C ++ आपको अधिक नियंत्रण देता है। बेशक, यदि आप एक वर्चुअल मशीन को लागू करते हैं तो आपके पास पूर्ण नियंत्रण है, लेकिन मुझे लगता है कि मेसन व्हीलर ने वास्तविक मशीन का नियंत्रण होने का उल्लेख किया है।
जियोर्जियो

4

यह महान लंबाई (जैसे, comp.lang.lisp, कई बार) पर बार-बार बहस की गई है। मुझे नहीं लगता कि कोई भी कभी भी "सही" उत्तर के साथ आता है, लेकिन बहुत सारे लोग ऐसे उत्तर के साथ आए हैं जो मुझे स्पष्ट रूप से गलत बताते हैं।

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

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

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


3

संक्षिप्तता और लचीलेपन का सही संतुलन।

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

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

एक शक्तिशाली भाषा एक ऐसी भाषा है जो आपको कम से कम लंबाई के साथ कई अलग-अलग चीजें कहने की अनुमति देती है।


1
-1। मुझे खेद है, लेकिन यह न केवल एक गलत धारणा है, बल्कि एक खतरनाक है, क्योंकि यह लाइन के नीचे उत्पादकता को गंभीर रूप से बाधित कर सकता है।
मेसन व्हीलर

@ मेसन व्हीलर: क्या आप विस्तृत कर सकते हैं?
जॉय एडम्स

@ जॉय: इस सवाल पर मेरी प्रतिक्रिया देखें।
मेसन व्हीलर

1

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

कहा जा रहा है कि, माथियास फेलिएसेन का पेपर ऑन द एक्सप्रेसिव पावर ऑफ प्रोग्रामिंग लैंग्वेजेस दिलचस्प पढ़ने के लिए बनाता है। इसमें वह भाषाओं में अभिव्यक्ति की धारणा को औपचारिक बनाने का प्रयास करता है।


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

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

1

भाषाई शक्ति का गठन करने पर बहुत असहमति प्रतीत होती है। क्या यह मरोड़, विरासत, अनुकूलनशीलता, या सिर्फ सादा ट्यूरिंग पूर्णता है? मुझे लगता है कि ये सभी कारक खेल में आते हैं, इसलिए शायद इसे देखने का सबसे अच्छा तरीका स्टेटमेंट पॉइंट के रूप में है। हां, मैं पेन-एंड-पेपर आरपीजी बात कर रहा हूं, यहां।

विचार यह है कि प्रत्येक भाषा में "अंकों" की एक ही संख्या होती है, जिसे कई श्रेणियों में मनमाने ढंग से वितरित किया जा सकता है। चर्चा के प्रयोजनों के लिए, केवल कारक संक्षिप्तता, सुगमता और लचीलापन हैं। एक भाषा तब बेहद कठिन और लचीली हो सकती है, लेकिन फलस्वरूप पढ़ने में बहुत मुश्किल होती है; या बहुत सुपाठ्य और लचीला, लेकिन अत्यंत क्रियात्मक।

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

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

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

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

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

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

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

क्षमा करें, मैं आपके पोस्ट को फिर से पढ़ता हूं और मुझे सहमत होना है कि मैं थोड़ा बहुत तेजी से पढ़ता हूं .. लेकिन मैं अभी भी असहमत हूं कि हर (मुख्य धारा) भाषा में लगभग समान बिंदु हैं। चलो जावा और c ++ लेते हैं क्योंकि वे ऐसी भाषा हैं जिन्हें मैं कुछ अच्छा जानता हूं। मुझे पूरा यकीन है कि मैं पुष्टि कर सकता हूं कि c ++ जावा की तुलना में अधिक शक्तिशाली है, क्योंकि c ++ मूल रूप से सब कुछ है जो जावा करता है (gc को छोड़कर - लेकिन फिर जावा मैन्युअल मेमोरी प्रबंधन को भी नहीं पेश करता है) PLUS अधिक (वास्तविक टेम्पलेट FTW)। जो कुछ हद तक मुझे लगता है कि मैं यह कहना चाहता था: नहीं, नहीं सभी भाषा प्रोग्रामिंग परी भूमि में समान रूप से समान हैं, यहां तक ​​कि
n1ckp

केवल मुख्यधारा की भाषाओं की तुलना करते समय।
n1ckp

0

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

मेरा तर्क है कि सबसे "शक्तिशाली" भाषा वह है जो आपको समय, ऊर्जा और अन्य प्रस्तावों के न्यूनतम निवेश के साथ अपने लक्ष्यों को प्राप्त करने की अनुमति देती है; यह वह भाषा है, जो सबसे बड़ी रॉय प्रदान करती है। कुछ स्थितियों में यह C हो सकता है; दूसरों में, जावा; अभी भी दूसरों में, हास्केल।

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


-1

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

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


अस्पष्टीकृत डाउनवोट का मुकाबला करने के लिए +1, और क्योंकि मैं आमतौर पर इससे सहमत हूं। यह जिस कार्य के लिए डिज़ाइन किया गया था, उसके लिए एक लैंग गेज का उपयोग करें। जटिल GUI को C में न लिखें, VB6 में जटिल एल्गोरिथम या OSes न लिखें
Gerry

-1

वे सभी उपकरण आपके सीने में उपकरण हैं। एक हथौड़ा शक्तिशाली हो सकता है, लेकिन अगर आपको रिंच की आवश्यकता नहीं है। यदि आप एक सिस्टम प्रोग्रामर हैं, तो C / C ++ बहुत अच्छा है, लेकिन Adobe Flash उस गेमिंग वेब साइट के लिए एक बेहतर फिट है जिसे आप बनाना चाहते हैं।


-1

सबसे शक्तिशाली प्रोग्रामिंग भाषा वह है जो निम्नलिखित रैखिक प्रोग्रामिंग समस्या को हल करती है :

अधिकतम

      विकास की कठोरता
    + कोड पढ़ने में
    आसानी + डिबगिंग की आसानी
    + सफलता / अभिव्यक्ति की संक्षिप्तता
    + सीखने / सिखाने में आसानी
    - सीपीयू उपयोग
    - मेमोरी आवश्यकताएँ

का विषय है

  • यह ट्यूरिंग कम्प्लीट होना चाहिए।
  • यह बहु-प्रतिमान होना चाहिए : कार्यात्मक, वस्तु-उन्मुख, तर्क प्रोग्रामिंग, बाधा प्रोग्रामिंग, संगामिति, वितरित कंप्यूटिंग, आदि।
  • यह बहुमुखी होना चाहिए , कमांड-लाइन इंटरफेस, घटक पुस्तकालयों, सर्वर, जीयूआई और वेब अनुप्रयोगों के निर्माण की अनुमति देता है।
  • यह पोर्टेबल होना चाहिए , यानी, क्रॉस-प्लेटफ़ॉर्म सेटिंग में पोर्ट करना और बनाए रखना आसान है।
  • यह अनुकूलनीय होना चाहिए , अर्थात, बदलने के लिए खुला और नए हार्डवेयर (क्वांटम चिप्स), नए प्रतिमान के रूप में विकसित करने में सक्षम, और प्रौद्योगिकी में अन्य नवाचार होते हैं।
  • इसे पुस्तकालयों के विकास को प्रोत्साहित करना चाहिए (जैसे CPAN, CTAN, और CRAN)।
  • यह स्वतंत्र और खुला स्रोत होना चाहिए ।

(और हाँ, मुझे पता है, मैंने पहले ही पूरी तरह से विरोधाभासी उत्तर पोस्ट कर दिया है। ऐसा इसलिए है क्योंकि मैं एक डायलेक्टियन हूं।)


-2

यह प्राकृतिक भाषाओं के संबंध में लिखा गया था, लेकिन मुझे लगता है कि यह प्रोग्रामिंग भाषाओं के लिए भी उपयुक्त है:

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

"पावर" बस एक भाषा पर दूसरे के लिए जिम्मेदार नहीं है। यह कहना मूर्खतापूर्ण होगा "चीनी कोरियाई की तुलना में अधिक शक्तिशाली भाषा है।" इसी तरह, यह कहना मूर्खतापूर्ण है "APL COBOL की तुलना में अधिक शक्तिशाली भाषा है।"

कुछ उद्देश्य माप के साथ भाषाई शक्ति को समान करने के कई प्रयास किए गए हैं। मेरा मानना ​​है कि ये प्रयास विफल हैं:

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

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


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

1
@ n1ck: क्या आप पावर = पठनीयता कह रहे हैं? तथा :। BF की पठनीयता की कमी से तात्पर्य इसकी कमी से है? एपीएल और जे में भी बहुत कम पठनीयता है, फिर भी वे बेहद उपयोगी और संक्षिप्त हैं (हालांकि मैं निश्चित रूप से उपयोगिता या शक्ति के साथ सफलता नहीं है)। विपरीत दिशा में जा रहे हैं, COBOL बहुत पठनीय है; इसकी सीधी क्रिया; लेकिन फिर, यह शायद ही एपीएल या बीएफ से अधिक शक्तिशाली बनाता है। बीएफ अत्यधिक मनोरंजक है; इसमें मनोरंजन करने की शक्ति है; लेकिन यह पावर योग्यता पावर नहीं है। समस्या यह है कि किसी को भी पावर का एक अच्छा सिद्धांत नहीं लगता है जिसके पीछे वे एक आम सहमति प्राप्त कर सकते हैं।
ए.एन. अन्य

1
नहीं, मेरा मतलब उस शक्ति = पठनीयता से नहीं था। मैं बस आपके विचार से असहमत हूं कि सभी भाषा समान हैं और हम भाषा की तुलना 'शक्तिशालीता' पर नहीं कर सकते हैं, हालांकि आप इसे परिभाषित करते हैं। मेरी राय में, भाषा को कोई भी शक्ति देने के लिए एक पठनीयता की आवश्यकता होती है लेकिन यह वास्तव में प्रश्न नहीं है। अगर हम वास्तव में इस सवाल का जवाब देना चाहते हैं, तो हमें सबसे पहले शक्तिशालीता को परिभाषित करने की आवश्यकता होगी, लेकिन मेरे विचार में यह 'हर स्थिति में सर्वश्रेष्ठ' के समान नहीं है, जो कि आपका जवाब मुझे संकेत देता है कि आपने इसकी व्याख्या इस तरह से की है (अर्थात कोई सर्वश्रेष्ठ नहीं हर चीज के लिए भाषा, जिसे मैं मानता हूं)।
n1ckp
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.