क्या सभी भाषाएँ मूल रूप से एक जैसी हैं?


39

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

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

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


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

4
भाषाओं की उत्पत्ति सामान्य नहीं है। लेकिन सभी भाषाएं कुछ समस्या को हल करने की कोशिश करती हैं। मुझे लगता है कि यह कुछ हद तक बोली जाने वाली भाषा के अनुरूप है। उद्देश्य स्वयं को व्यक्त करना है। मैं यह नहीं कह सकता कि 1 प्रक्रिया / OO / कार्यात्मक के ज्ञान के आधार पर भाषाओं को समझना सीधा है। मैंने ऐसा नहीं किया है, लेकिन अगर मुझे यह सवाल पूछना है, तो मैं बहुत सारे कोष्ठक के साथ पर्ल या लिस्प को देखूंगा और मैं यह नहीं कह पाऊंगा कि सभी प्रकार की 1 भाषा जानना पर्याप्त है।
शाहकलेश

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

2
यदि आप कार्यात्मक भाषा जानते हैं, तो आपको पता होना चाहिए कि लूप हर भाषा में संभव नहीं हैं।
जुलफ २ j ’०

पीट बहुत अलग है। :)

जवाबों:


88

अधिकांश प्रक्रियात्मक भाषाओं की मूल बातें बहुत समान हैं।

वे प्रस्ताव देते है:

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

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

अधिक दिलचस्प प्रक्रियात्मक भाषाएं प्रदान करती हैं

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

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

जिन भाषाओं को समझना कठिन है, वे गैर-प्रक्रियात्मक हैं:

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

भाषाओं के लिए दो प्रमुख प्रतिनिधित्वात्मक शैलियाँ हैं:

  • पाठ आधारित, जिसमें पहचानकर्ता नाम संस्थाओं और सूचना प्रवाह को सूत्रों में स्पष्ट रूप से एन्कोड किया गया है जो पहचानकर्ताओं का उपयोग संस्थाओं (जावा, एपीएल, ...) के नाम के लिए करता है
  • ग्राफिकल, जिसमें संस्थाओं को नोड्स के रूप में तैयार किया जाता है, और संस्थाओं के बीच संबंधों को उन नोड्स (यूएमएल, सिमुलिंक, लैब व्यू) के बीच स्पष्ट आर्क के रूप में तैयार किया जाता है।

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

इनमें से अधिकांश भाषाएँ गणना के बहुत कम मॉडल पर आधारित हैं:

  • लैम्ब्डा कैलकुलस (लिस्प और सभी कार्यात्मक भाषाओं के लिए आधार)
  • पोस्ट सिस्टम (या स्ट्रिंग / ट्री / ग्राफ पुनर्लेखन तकनीक)
  • ट्यूरिंग मशीनें (नई स्मृति कोशिकाओं का राज्य संशोधन और चयन)

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

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


3
बहुत बढ़िया जवाब! अनुवर्ती के रूप में (एसओ में एक अनुवर्ती प्रश्न पूछने का एक तरीका है?), क्या एक ऐसी भाषा है जिसे मैं मास्टर कर सकता हूं और प्रोग्रामिंग सॉफ्टवेयर में सभी अवधारणाओं को समझने का दावा कर सकता हूं? क्या यह लिस्प (या स्कीम जैसी बोली) होगी?

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

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

1
प्राकृतिक भाषाओं की तरह ही, "समझने में कठिन" व्यक्तिपरक और आपके द्वारा सीखी गई पहली भाषा पर निर्भर है।
NullUserException

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

6

हार्डवेयर विवरण भाषाएं प्रोग्रामिंग भाषाएं हैं, लेकिन वे वैचारिक रूप से बहुत भिन्न हैं। आकार के लिए VHDL या वेरिलॉग आज़माएँ। वे FPGAs प्रोग्रामिंग के लिए आम हैं। (ठीक है, इसलिए वे प्रोसेसर नहीं हैं, लेकिन वे सामान्य उद्देश्य कंप्यूटिंग डिवाइस हैं। और इस तरह के कंप्यूटर विज्ञान विषयों के लिए वैध हार्डवेयर माना जाना चाहिए।) आपको स्पष्ट रूप से चीजों को क्रमिक रूप से बनाना होगा। यह पूरी तरह से अलग मॉडल है। आप चीजों को नियम के अपवाद के रूप में समानांतर में प्रस्तुत करने के बारे में सोचते हैं। Verilog में छोरों के लिए समानांतर हार्डवेयर में विस्तार। इसलिए "अपेक्षित" व्यवहार वह नहीं हो सकता है जिसकी आप अपेक्षा करते हैं।


ये एक अच्छा बिंदु है। मैं वेरिलोग / वीएचडीएल को देखूंगा।

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

4

निर्भर करता है कि आप "मूल रूप से" से क्या मतलब है। किसी भी लचीलेपन की सभी भाषाएं ट्यूरिंग-पूर्ण हैं। इस अर्थ में: हाँ, वे सभी मूल रूप से एक ही हैं।

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

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


3

मैं कहूंगा कि एक भाषा का अर्थ होता है। यदि किसी संदर्भ में अर्थ का कोई अर्थ है, तो सभी भाषाएं जो अर्थ को व्यक्त कर सकती हैं, उन्हें अर्थ और संदर्भ द्वारा बराबर सीमित कहा जा सकता है।

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


1
जॉन वॉन न्यूमैन। और यह "न्यूमैन" की तरह स्पष्ट नहीं है, "नोमैन" की तरह।

सुधार के लिए धन्यवाद - मैं उच्चारण करता हूं, जैसा आपने कहा है।
प्रीत संघ

जब कोई सुधार करने का सुझाव देता है, तो आप उसे दर्शाने के लिए अपनी पोस्ट को संपादित कर सकते हैं।
फिल मिलर

2

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

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


2
+++++++[>+++++++++++<-]>+.<+++++++++++[>+++<-]>.>>+++++++[>++++++<-]>++++.

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


1

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

C एक आदर्श सिस्टम प्रोग्रामिंग भाषा बनने का प्रयास करता है। इसके लिए यह निम्न-स्तरीय नियंत्रण और गति के लिए पठनीयता और सुरक्षा का त्याग करता है।

पायथन का उद्देश्य एक आदर्श पटकथा भाषा है। यह अंत करने के लिए यह उत्पादकता और सुवाह्यता के लिए गति और सत्यापन क्षमता का त्याग करता है।

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

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

अंत में, एक प्रोग्रामर के रूप में आपकी पसंद नौकरी के लिए सही उपकरण है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.