इतनी सारी प्रोग्रामिंग लैंग्वेज क्यों हैं?


130

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

लेकिन इतनी अलग प्रोग्रामिंग भाषाएं क्यों हैं? मैं अनुमान लगा रहा हूं कि ये सभी भाषाएं समान काम कर सकती हैं, इसलिए क्यों न सिर्फ एक भाषा से चिपके रहें और कंप्यूटर का उपयोग करें? विशेष रूप से, क्या कोई कारण है कि मुझे कंप्यूटर प्रोग्रामर के रूप में एक कार्यात्मक भाषा पता होनी चाहिए ?

कुछ संबंधित पढ़ने:


2
OO और non-OO में भी अंतर है। इसके अलावा, कुछ भाषाएं अच्छे पैकेज के साथ आती हैं: आर, मेपल, मैटलैब, मैथेमेटिका जो अक्सर अन्य भाषाओं की कमी होती है।
अर्टेम काज़नाचेव


4
पहले से ही प्रोग्रामर प्रोग्रामर
stackexchange.com/q/7551/45322

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

4
इतनी कारें क्यों हैं? इतने हवाई जहाज क्यों हैं? और नौकाओं के बारे में क्या! सच में! आप समुद्र के नीचे जाते हैं और वहां, जैसे, सभी तरह के खतरे हैं! उन सभी प्रकार की चीजों का क्या मतलब है?!?!? यह अक्षम है! यह बेकार है !! और उन सभी विभिन्न विकल्पों में से फ्रीकिन बिंदु क्या है ?!?!? गीज़ - लोगों को बुद्धिमान! किसी को संभवतः युगो, एफ -150 और महासागर लाइनर के अलावा किसी और चीज की आवश्यकता नहीं थी! ओह, हाँ, विमानों - MD-80 के बारे में सब कुछ के लिए ठीक काम करेंगे। वहाँ। अब जब कि सब ठीक हो गया है ... :-)
बॉब जार्विस

जवाबों:


116

प्रोग्रामिंग भाषाएं विकसित होती हैं और समय (नवीनता) के साथ बेहतर होती हैं।

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

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

शोधकर्ता गणना व्यक्त करने के वैकल्पिक तरीकों के बारे में सोचते हैं। इसके कारण लिस्प और भाषा के पेड़ की कार्यात्मक भाषा शाखा, प्रोलॉग और तर्क प्रोग्रामिंग शाखा, एर्लैंग और अन्य अभिनेता-आधारित प्रोग्रामिंग मॉडल, अन्य लोगों के बीच में चला गया।

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

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

अंत में, कुछ भाषाओं को विशेष डोमेन का समर्थन करने के लिए डिज़ाइन किया गया है। उदाहरणों में SQL, R, Makefiles, Graphviz input language, Mathmatica, LaTeX शामिल हैं। इन भाषाओं की कार्यक्षमता को सामान्य प्रयोजन की भाषाओं (सीधे) में एकीकृत करना काफी बोझिल होगा। ये भाषाएं अपने विशेष डोमेन के लिए विशिष्ट सार पर आधारित हैं।

प्रोग्रामिंग भाषा डिजाइन में विकास के बिना, हम सभी अभी भी असेंबली भाषा या C ++ का उपयोग कर रहे हैं।

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


1
पूरी तरह से सहमत। मुझे इसमें दिलचस्पी है जहाँ बहु-प्रतिमान भाषाएँ (जैसे स्काला) एक-दो वर्षों में होंगी। यदि वे आसान डीएसएल एकीकरण की अनुमति देते हैं, तो हम वास्तव में भाषा संख्या में क्रमिक गिरावट देख सकते हैं।
राफेल

2
बहुत विस्तृत जवाब! हम स्वीकार कर सकते हैं कि अधिकांश प्रोग्रामिंग भाषाएं ट्यूरिंग समतुल्य हो सकती हैं, लेकिन इसका मतलब यह नहीं है कि वे जो अमूर्तता का समर्थन करते हैं वह उनके समस्या डोमेन के लिए उपयुक्त है।
साइबरफॉनिक

असेंबली और C ++ को एक ही बॉक्स में रखने से मेरा दिल दुखता है। C ++ बहुत विकसित हुआ है !! विशेष रूप से C ++ 11 और आगे।
पेरेग्रेसिंग-एलके

66

tldr: चांदी की बुलेट भाषा नहीं है।

मुझे उम्मीद है कि वे मुझ पर मुकदमा नहीं करेंगे, लेकिन यहां स्टैनफोर्ड प्रस्तुतियों में से एक से एक तस्वीर है।

यहां छवि विवरण दर्ज करें

जब आप कोई भाषा चुनने का निर्णय लेते हैं, तो आप इन 3 विशेषताओं में से केवल 2 को चुन सकते हैं ।

और यही कारण है कि लोग दुखी हैं और एक सुपरलंगेज का आविष्कार करना चाहते हैं जो उनमें से सभी 3 को कवर करेगा।

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

ऐसे कारकों के संयोजन से एक नई भाषा निकलती है।

( और मैंने सुना है कि हर अच्छे प्रोग्रामर को अपनी नई भाषा बनानी चाहिए; )


11
समय के साथ त्रिभुज सिकुड़ रहा है, इस अर्थ में कि कोने एक साथ करीब हो रहे हैं ..... मुझे आशा है / सपना।
डेव क्लार्क

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

यह एक दिलचस्प कथन है और कैप प्रमेय की याद दिलाता है। क्या यह सिर्फ एक अनौपचारिक तर्क है, या त्रिकोण सिद्ध हो सकता है?
अवनु

1
@evnu, यहां एक भाग का एक समान तर्क दिया गया है: सामान्यता मानने का मतलब है कि भाषा L में किसी भी लंबाई n के मान्य कार्यक्रम एक बड़ी समस्या वाले स्थान को कवर करते हैं, प्रत्येक समस्या का उप-समूह केवल लंबाई n कार्यक्रमों के कुछ अंशों द्वारा कवर किया जाता है। यदि आपके विशेष उप-स्थान के बाहर लंबाई n के कार्यक्रम आपके उप-स्थान के अंदर होते हैं, तो आपको एक छोटा कार्यक्रम खोजने की अधिक संभावना होगी, जो आपकी समस्या को हल कर देगा (इसलिए आप संभवतः अधिक उत्पादक होंगे), लेकिन भाषा कम सामान्य होगी- - यह अन्य उप-प्रक्षेत्रों में समस्याओं को कम अच्छी तरह से हल करेगा (यानी लंबे कार्यक्रमों के साथ)।
जोनास कोल्कर

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

25

दुनिया उन चीजों से भरी हुई है जिनमें कई अलग-अलग विविधताएं हैं: वर्ड प्रोसेसर, कारें, घर के डिजाइन, पेय पदार्थ, कैंडी, पेन, फावड़े, आदि। जिन कारणों से हमारे पास इतने सारे हैं उन्हें कुछ सिद्धांतों तक उबला जा सकता है:

  • किसी को लगता है कि वे मौजूदा उत्पादों में सुधार कर सकते हैं
  • स्थानीय विचारों द्वारा एक अलग डिजाइन की आवश्यकता होती है (सोचें: स्टिल्ट्स पर घर बनाम कंक्रीट स्लैब पर घर)
  • उत्पाद की एक नई श्रेणी एक ऐसी आवश्यकता को भरती है जहाँ पहले कोई भी मौजूद नहीं था

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

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

पेन का विकास तब से जारी रहेगा जब तक कि कोई भी उत्पाद प्रत्येक उपयोगकर्ता की आवश्यकताओं को पूरा नहीं करता है। कुछ पेन सस्ते और डिस्पोजेबल होते हैं, कुछ महंगे होते हैं और उच्च गुणवत्ता वाली सामग्री से निर्मित होते हैं; कुछ जैल का उपयोग करते हैं, कुछ स्याही का उपयोग करते हैं, कुछ वर्णक का उपयोग करते हैं; कुछ में ट्विस्ट-ऑफ कैप हैं, कुछ में कैप बिल्कुल नहीं हैं; विस्तृत बैरल, संकीर्ण बैरल, गोल बैरल, वर्ग बैरल; छोटा बड़ा; लाल, सफेद, काला, नीला। आदि आदि।

लेकिन पेन के बारे में काफी है।

प्रोग्रामिंग लैंग्वेज के हमारे वर्तमान असंख्य को पहले वाले से ही पता लगाया जा सकता है: 1940 के दशक के शुरुआती कंप्यूटरों के लिए संख्यात्मक मशीन कोड। कंप्यूटर में प्रवेश करने के लिए आदिम, उपयोग करने में कठिन और श्रमसाध्य, लेकिन उन्होंने काम किया। यह लंबे समय के बाद नहीं था कि प्रोग्रामर ने मशीन कोड को mnemonic शब्द (जैसे ADD, CALL, LOAD) सौंपा और "असेंबली लैंग्वेज" नामक भाषाओं के वर्ग को जन्म दिया।

विभिन्न प्रोसेसर आर्किटेक्चर ने अंतर्निहित मशीनों की विशिष्ट विशेषताओं के आधार पर अलग-अलग mnemonic कोड के लिए कॉल किया। इन मतभेदों को ध्यान में रखते हुए विभिन्न विधानसभा भाषाओं का आविष्कार किया गया।

(शायद अब तक आप देख सकते हैं कि यह कहां है ...)

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

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

और फिर ऑब्जेक्ट-ओरिएंटेड, स्टेटिकली टाइप्ड, डायनामिकली टाइप्ड, लेट बाइंडिंग, अर्ली बाइंडिंग, लो मेमोरी यूसेज, हाई मेमोरी यूसेज, पैरेललसेबल, विशिष्ट उपयोगों के लिए भाषाएं, और ऑन और ऑन हैं।

अंततः, हमारे पास विभिन्न प्रोग्रामिंग भाषाएं हैं क्योंकि हम अलग-अलग प्रोग्रामिंग भाषाएं चाहते हैं। हर भाषा डिजाइनर के अपने विचार होते हैं कि उनकी "स्वप्न" भाषा कैसे दिखेगी और संचालित होगी। विविधता एक अच्छी चीज है।


मुझे यहाँ पर कोई भी आकर्षक कारण नहीं दिया गया है, इसके लिए हमारे पास कई भाषाएं होनी चाहिए इसके अलावा लोग जो भी कारण चाहते हैं।
राफेल

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

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

20

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

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

Microsoft द्वारा कार्यात्मक प्रोग्रामिंग को अब धक्का दिया जा रहा है, उदाहरण के लिए, जिन्होंने VS2010 और 11 में F # (.NET के लिए उनकी कार्यात्मक भाषा) को शामिल किया है; वे MSR, IIRC में कुछ हास्केल डेवलपर्स को भी नियुक्त करते हैं।

ध्यान दें, कि कुछ गैर-लैम्ब्डा-कैलकुलस कार्यात्मक प्रोग्रामिंग भाषाएं भी हैं, जैसे कि रिफाल , जो कि पैटर्न मिलान और पुनर्लेखन पर आधारित है।

क्योंकि कार्यात्मक भाषाओं में अमूर्तता का स्तर अलग है, समस्याओं को हल करने के लिए आपका दृष्टिकोण बदलता है, जब आप कार्यात्मक प्रोग्रामिंग तकनीकों का उपयोग करते हैं। कुछ लोग कहते हैं कि यह आपको सामान्य रूप से बेहतर प्रोग्रामर बना सकता है।


1
भाषाओं का एक और दिलचस्प वर्ग तर्क प्रोग्रामिंग भाषाएं हैं, जैसे प्रोलॉग। मेरे पास केवल DataLog के साथ एक बहुत ही सीमित अनुभव था इसलिए शायद कोई और उन लोगों के बारे में एक उत्तर लिख सके?
डेनियल

2
मैं मानता हूं कि हमें प्रत्येक प्रोग्रामिंग प्रतिमान के लिए एक प्रोग्रामिंग भाषा की आवश्यकता है: अनिवार्य, OO, घोषणात्मक, कार्यात्मक, आदि। लेकिन यह व्याख्या नहीं करता है कि हमारे पास इतने सारे, क्यों, OO भाषाएँ हैं।
दाई

@ दाई, ठीक है, क्या हम वास्तव में? सैद्धांतिक आधार केवल भाषा की विशेषता नहीं है। उदाहरण के लिए, कोई कह सकता है कि जावा या C # की एक प्रमुख विशेषता आभासी मशीन (C ++ की तुलना) है, जो जावा को काफी अलग बनाती है।
डेनियल

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

@ दाई, सभी के बाद C # और Java के बीच बहुत से छोटे अंतर हैं। इसके अलावा, मुझे लगता है कि विंडोज के लिए जावा वीएम या उस तरह का कुछ कानूनी विवाद था।
डेनियल

19

विशेष रूप से, क्या कोई कारण है कि मुझे कंप्यूटर प्रोग्रामर के रूप में एक कार्यात्मक भाषा पता होनी चाहिए?

हाँ। क्योंकि हैसेल ने मेरे सोचने के तरीके को बदल दिया है। यह आपके सोचने के तरीके को भी बदल सकता है।

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

पढ़ें:

  1. भाषा और विचार विकि

  2. केनेथ ई। इवर्सन, ट्यूरिंग अवार्ड व्याख्यान द्वारा विचार के लिए एक उपकरण के रूप में अधिसूचना

लेकिन इतनी अलग प्रोग्रामिंग भाषाएं क्यों हैं?

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

इसके अलावा, पढ़ा । ;-)


5
परमात्मा की पुनरावृत्ति करना है!
प्रतीक देवघर

4
मानव है?
सुरेश

1
यकीन नहीं होता कि हास्केल के लिए यह एक अच्छा विज्ञापन था। ;)
बैरी ब्राउन

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

"मैंने आधे दिन में भिक्षुओं से पहले आने वाली हर चीज को समाप्त कर दिया।" वास्तव में? आपने आधे दिन में टाइपकास्टेस, फंक्शनलर्स, एडीटी, प्रकार आदि सीखे? यह असंभव है। LYAH के अध्याय 12 में मठ हैं। RWH के अध्याय 6 तक कोई भी भिक्षु नहीं हैं, और उन्हें बहुत धीरे-धीरे पेश किया जाता है - पूर्ण परिभाषा अध्याय 14 में है।
sdcvvc

13

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

"ए थ्योरी ऑफ़ ऑब्जेक्ट्स" में आबिदी और कार्डेली ने ऑब्जेक्ट-ओरिएंटेड फ़ाउंडेशन से प्रोग्रामिंग भाषाओं का एक पूरा परिवार विकसित किया है। वे साबित करते हैं कि कार्यात्मक प्रोग्रामिंग OO का एक विशेष मामला है, लेकिन काफिला नहीं।

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


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

12

चूंकि अन्य लोगों ने पहले ही इस प्रश्न के लिए अच्छे उत्तर दे दिए हैं, इसलिए मैं सिर्फ एलन पर्लीस को उद्धृत करूंगा।

ट्यूरिंग टार पिट से सावधान रहें, जिसमें सब कुछ संभव है लेकिन ब्याज की कुछ भी आसान नहीं है।

इसके अलावा, http://weblog.raganwald.com/2004/10/beware-of-turing-tar-pit.html , एक अच्छा पढ़ा है।


11

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

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

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

यह बहुत ही ज्ञानवर्धक ब्लॉग पोस्ट पढ़ें, इतने सारे पायथन वेब फ्रेमवर्क क्यों? जाहिर है, पायथन में लगभग 50 वेब फ्रेमवर्क हैं। यह सिर्फ हास्यास्पद है; उसके लिए कोई समझदार तर्कसंगत कारण नहीं है। लेकिन पोस्ट का लेखक जवाब देता है: इतने सारे पायथन वेब फ्रेमवर्क हैं क्योंकि एक को बनाना इतना आसान है । आपको अधिक अजगर वेब फ्रेमवर्क या अधिक प्रोग्रामिंग भाषाओं के लिए तर्कसंगत कारण की आवश्यकता नहीं है। लोग नए निर्माण करेंगे क्योंकि वे नहीं जानते कि क्या पहले से ही उपलब्ध है, या क्योंकि उन्हें आशा है कि वे पैसे कमा सकते हैं, या सिर्फ इसलिए कि नई चीजें बनाना मजेदार है!

एक व्यक्तिगत उदाहरण का वर्णन करता हूं। लगभग 10 साल पहले मैं एक फिनिश कंपनी के लिए कुछ सी ++ कोड लिख रहा था। आप जानते हैं, फ़िनलैंड में उनके पास वे विशाल ट्रक हैं जो अच्छी तरह से लंबी दूरी की यात्रा करते हैं और एक स्थान से दूसरे स्थान तक बहुत सारे सामान पहुँचाते हैं। मुझे यकीन है, अमेरिका में भी ऐसे ट्रक हैं। तो एक सामान्य समस्या यह सुनिश्चित करना है कि सभी 24 या तो टायर ठीक हैं। बेशक, समय-परीक्षण वाली तकनीक है: दबाव और तापमान पर नजर रखी जा सकती है, और कठोर परिवर्तनों से संकेत मिलेगा कि कुछ गलत हो गया है। बेशक, इस प्रौद्योगिकी के सभी निहितार्थ के साथ, स्वामित्व, पेटेंट है। (याद रखें: पेटेंट नवाचार को बढ़ावा देने वाले हैं!) इसलिए फिनिश की यह कंपनी टायर की स्थिति का पता लगाना चाहती थी ... ध्वनि। सभी टायरों से आने वाली आवाज़ को सुनने और उन ध्वनियों पर किसी प्रकार के सिग्नल प्रोसेसिंग मैजिक को करने के लिए माइक्रोफोन स्थापित करने पर विचार किया गया था ताकि यह देखा जा सके कि क्या टायरों में से किसी में किसी प्रकार की समस्या थी, और मैं एक प्रोटोटाइप बना रहा था इस पागलपन का। (उन्होंने नमूना ध्वनियों को रिकॉर्ड करने के लिए एक समर्पित प्रयोगशाला भी बनाई थी; एक बार उन्होंने मुझे एक विशेष अवसर का एक प्रभावशाली वीडियो रिकॉर्ड भेजा था जब वे 5 या 10 टन दबाव के अधीन होने के बाद एक नमूना टायर को विस्फोट करने में कामयाब रहे थे और इसे कुछ हास्यास्पद तापमान तक गर्म कर दिया था। ।) जाहिर है, फिर से, इस विकास के लिए कोई विशेष तर्कसंगत कारण नहीं था, सिवाय इसके कि यह मजेदार था और कुछ लोग पैसा बनाना चाहते थे। तो यह भी समझें कि ऐसे कई कारण हैं कि क्यों कोई नई प्रोग्रामिंग भाषा विकसित करना शुरू करेगा। इन सभी को सीखने की कोई आवश्यकता या संभावना भी नहीं है। (उन्होंने नमूना ध्वनियों को रिकॉर्ड करने के लिए एक समर्पित प्रयोगशाला भी बनाई थी; एक बार उन्होंने मुझे एक विशेष अवसर का एक प्रभावशाली वीडियो रिकॉर्ड भेजा था जब वे 5 या 10 टन दबाव के अधीन होने के बाद एक नमूना टायर को विस्फोट करने में कामयाब रहे थे और इसे कुछ हास्यास्पद तापमान तक गर्म कर दिया था। ।) जाहिर है, फिर से, इस विकास के लिए कोई विशेष तर्कसंगत कारण नहीं था, सिवाय इसके कि यह मजेदार था और कुछ लोग पैसा बनाना चाहते थे। तो यह भी समझें कि ऐसे कई कारण हैं कि क्यों कोई नई प्रोग्रामिंग भाषा विकसित करना शुरू करेगा। इन सभी को सीखने की कोई आवश्यकता या संभावना भी नहीं है। (उन्होंने नमूना ध्वनियों को रिकॉर्ड करने के लिए एक समर्पित प्रयोगशाला भी बनाई थी; एक बार उन्होंने मुझे एक विशेष अवसर का एक प्रभावशाली वीडियो रिकॉर्ड भेजा था जब वे 5 या 10 टन दबाव के अधीन होने के बाद एक नमूना टायर को विस्फोट करने में कामयाब रहे थे और इसे कुछ हास्यास्पद तापमान तक गर्म कर दिया था। ।) जाहिर है, फिर से, इस विकास के लिए कोई विशेष तर्कसंगत कारण नहीं था, सिवाय इसके कि यह मजेदार था और कुछ लोग पैसा बनाना चाहते थे। तो यह भी समझें कि ऐसे कई कारण हैं कि क्यों कोई नई प्रोग्रामिंग भाषा विकसित करना शुरू करेगा। इन सभी को सीखने की कोई आवश्यकता या संभावना भी नहीं है। एक बार जब उन्होंने मुझे एक विशेष अवसर का प्रभावशाली वीडियो रिकॉर्ड भेजा, जब वे 5 या 10 टन दबाव के अधीन होने के बाद एक नमूना टायर में विस्फोट करने और कुछ हास्यास्पद तापमान तक इसे गर्म करने में कामयाब रहे।) स्पष्ट रूप से, फिर से, कोई विशेष तर्कसंगत नहीं था। इस विकास का कारण, सिवाय इसके कि यह मजेदार था और कुछ लोग पैसा बनाना चाहते थे। तो यह भी समझें कि ऐसे कई कारण हैं कि क्यों कोई नई प्रोग्रामिंग भाषा विकसित करना शुरू करेगा। इन सभी को सीखने की कोई आवश्यकता या संभावना भी नहीं है। एक बार जब उन्होंने मुझे एक विशेष अवसर का प्रभावशाली वीडियो रिकॉर्ड भेजा, जब वे 5 या 10 टन दबाव के अधीन होने के बाद एक नमूना टायर में विस्फोट करने और कुछ हास्यास्पद तापमान तक इसे गर्म करने में कामयाब रहे।) स्पष्ट रूप से, फिर से, कोई विशेष तर्कसंगत नहीं था। इस विकास का कारण, सिवाय इसके कि यह मजेदार था और कुछ लोग पैसा बनाना चाहते थे। तो यह भी समझें कि ऐसे कई कारण हैं कि क्यों कोई नई प्रोग्रामिंग भाषा विकसित करना शुरू करेगा। इन सभी को सीखने की कोई आवश्यकता या संभावना भी नहीं है।

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

निष्कर्ष में, कई लोग, कई देश, कई प्रोग्रामिंग भाषाएं हैं। यह जीवन का स्वभाव मात्र है! आइए इसके लिए आभारी रहें: इसका मतलब है कि प्रोग्रामिंग / कंप्यूटर विज्ञान का क्षेत्र बहुत अधिक जीवित और समृद्ध है।


बहुत सही जवाब, मुझे नहीं पता कि इसे क्यों स्वीकार नहीं किया गया था!
Am_I_Helpful

8

इतनी अलग प्रोग्रामिंग भाषाएं क्यों हैं?

क्योंकि बनाने के लिए विकल्प हैं:

  • विनिर्देशन की विधि: इंपीरियल बनाम कार्यात्मक
  • टाइपिंग: स्टेटिकली टाइप्ड बनाम डायनामिक टाइप्ड
  • मूल्यांकन का क्रम: कॉल-बाय-वैल्यू बनाम कॉल-बाय-नाम
  • प्रतिरूपकता: वर्ग-आधारित बनाम अमूर्त डेटा प्रकार-आधारित
  • निष्पादन मॉडल: अनुक्रमिक बनाम समवर्ती

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

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


यदि ये सभी भाषाएं एक ही काम कर सकती हैं, तो क्यों न केवल एक भाषा से चिपके रहें और प्रोग्रामिंग कंप्यूटर के लिए इसका उपयोग करें?

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

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


विशेष रूप से, क्या कोई कारण है कि मुझे कंप्यूटर प्रोग्रामर के रूप में एक कार्यात्मक भाषा पता होनी चाहिए?

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


1

आप इसे विकास के रूप में देख सकते हैं।

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

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

उसके बाद 4 वीं स्तर की भाषाएं उत्पन्न हुईं, जैसे तर्क भाषाएं (जैसे प्रोलॉग)। सबसे सामान्य भाषाएं तीसरे स्तर की भाषाओं के उत्तराधिकारी हैं; उनमें से कुछ जावा, सी # हैं।

हम इंटरनेट / वेब के लिए विशिष्ट भाषाओं को भी देखते हैं, जैसे ASP.NET, PHP।

और एक विशिष्ट डोमेन (डीएसएल) के लिए भाषाएं, जो ज्यादातर एक जेनेरिक भाषा के साथ मिलकर काम करती हैं।

फिर बच्चों के लिए प्रोग्रामिंग सीखने के लिए भाषाएं हैं, जैसे लोगो।

इसके अलावा तेजी से लिखने वाले कोड के लिए भाषाएं, जैसे पायथन, रूबी आदि, एक्सएमएल (एक्सएसएलटी) से निपटने के लिए भाषाएँ।

और मैं शायद बहुत सारी भाषाओं और यहां तक ​​कि भाषाओं की श्रेणियों को भूल गया हूं।


1
आपका कालक्रम भ्रमित है। प्रोलोग 1972 से है, जो तब आद्या (1983) से छोटी है। मुझे नहीं पता कि "तीसरे स्तर की भाषाओं के उत्तराधिकारियों" से आपका क्या मतलब है; कुछ भाषाएं सी और पास्कल (जो अडाट भी शामिल हैं), फोरट्रान के वंशज नहीं हैं।
मुकदमा

1
@prosfilaes, रास्ता भ्रमित। FORTRAN पहली भाषा थी जो अभी भी उपयोग में है, फिर LISP, उसके बाद COBOL आया। अल्गोल को एल्गोरिदम के प्रकाशन के लिए परिभाषित किया गया था, न कि मशीन का उपयोग (लेकिन एक प्रकार के कंपाइलर वैसे भी आए थे), थॉट्स पास्कल के साथ और बाद में सी। पीएल / 1 अल्गोल-एचएच नियंत्रण संरचनाओं के साथ फोरट्रान और कोबोल का एक अजीब मिश्रण था।
वॉनब्रांड

1

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

इसका मतलब यह भी है कि थेरस एक लंबा इतिहास और समयरेखा रहा है जो मुख्य रूप से 1930 के दशक में लैम्ब्डा कैलकुलस के साथ शुरू हुआ था ।

प्रोग्रामिंग भाषाओं के साथ सिद्धांत और अनुप्रयोग के बीच एक मजबूत परस्पर क्रिया / तालमेल / सहजीवन है। नए अनुप्रयोगों का आविष्कार किया गया है जो नए सिद्धांतों और इसके विपरीत की ओर जाता है। एक प्रोग्रामिंग भाषा कई मायनों में सिद्धांत और अनुप्रयोग के बीच एक सेतु है

इतिहास से एक दिलचस्प मामला अध्ययन फोरट्रान है। यह अच्छी तरह से ज्ञात नहीं है लेकिन फोर्ट्रान के पहले के संस्करणों (ज्यादातर फोरट्रान77 से पहले) में एक अस्पष्ट व्याकरण था । इसका मतलब है कि एक ही आदेश हो सकता है वैध तरीके से क्योंकि वहाँ कई वैध "व्याख्याओं" (यह "व्याख्या" भाषाओं के एक ही तकनीकी भावना नहीं है) संकलक द्वारा संकलित अलग अलग तरीकों से "व्याख्या" /।

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

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

वहाँ भी लगता है कि नई प्रोग्रामिंग भाषाओं में वृद्धि की लंबी प्रवृत्ति के साथ संयोजन के रूप में बड़े पैमाने पर तेजी से बढ़ती Moores कानून की प्रसंस्करण शक्ति है जो कुछ लगता है कि धीमा हो सकता है।

प्रोग्रामिंग भाषाओं में वर्तमान longrange प्रवृत्तियों की ओर हो रहा है बिग डाटा और साथ में चलाना साथ जैसे MapReduceक्लोजर में भी वर्तमान रुचि है ।

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

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

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


डिज़ाइन पैटर्न भी देखें जो अक्सर भाषाओं को पार करते हैं और भाषाओं में लागू होते हैं। भाषा अध्ययन / कार्यक्षमता का एक अन्य महत्वपूर्ण पहलू पुस्तकालयों
vzn

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

बिंदु को मूल आरटीआई / प्रारंभिक फोरट्रान लेकिन बाद के संस्करणों को अधिक कठोर व्याकरण परिभाषाओं के साथ औपचारिक रूप दिया गया। भाषा सिद्धांत के साथ भाषा के विकास को दर्शाने वाला एक केस स्टडी ।
vzn

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

परिशिष्ट, नए / उभरते भाषाओं में मामले का अध्ययन: गूगल जाना , Node.js , एप्पल तेज
vzn

-3

वे नहीं थे, यह सिर्फ एक विपणन नौटंकी है - यदि आप भाषा थोड़े "सी" की तरह दिखते हैं, तो यह प्रवेश के लिए स्पष्ट बाधा को कम करता है।

कुछ जिन पर कोई C प्रभाव नहीं पड़ता है: SQL, पास्कल, डेल्फी, FORTRAN, COBOL, Ada, PowerBuilder, HyperTalk, Lisp, Simula, FOCAL, BASIC, PL / I, Alolol, Algol-68, SNOBOL, Modula, Visual BASIC। ट्यूटर, लोगो, फोर्थ, DIBOL, हेलिक्स, AppleScript, पायथन, एर्लांग, रूबी, पिक, इंग्लिश, आरपीजी, PL / SQL, ASP, प्रोलॉग, स्मॉलटॉक, पर्ल, बैश, वैंड बेसिक, REXX, DOS बैच भाषा।

वे जो C की तरह LOOK करते हैं, लेकिन उनमें बहुत कम हैं: जावास्क्रिप्ट, जावा, C #, (यकीनन) Objective-C।

यह सभी मार्केटिंग है, जावा, सी ++, और जावास्क्रिप्ट थोड़े सी की तरह दिखता है, लेकिन कवर के तहत शायद ही अलग हो सकता है।


5
"वे नहीं थे" - क्या नहीं थे? किसी भी मामले में, मैं यह नहीं देखता कि यह सवाल का जवाब कैसे देता है। यह बस भाषाओं की एक सूची है, साथ ही एक पूरी तरह से निराधार दावे के साथ कि विपणन किसी भी तरह से शामिल है।
डेविड रिचरबी

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