प्रोग्रामिंग भाषा: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
 
(2 intermediate revisions by 2 users not shown)
Line 384: Line 384:
{{Authority control}}
{{Authority control}}


{{DEFAULTSORT:Programming Language}}[[Category: प्रोग्रामिंग भाषा वर्गीकरण]]
{{DEFAULTSORT:Programming Language}}
 
[[Category:Articles with hatnote templates targeting a nonexistent page|Programming Language]]
[[Category:CS1 English-language sources (en)]]
[[Category:CS1 maint]]
[[Category:Collapse templates|Programming Language]]
[[Category:Created On 28/11/2022|Programming Language]]
[[Category:Interwiki link templates| ]]
[[Category:Lua-based templates|Programming Language]]
[[Category:Machine Translated Page|Programming Language]]
[[Category:Multi-column templates|Programming Language]]
[[Category:Navigational boxes| ]]
[[Category:Navigational boxes without horizontal lists|Programming Language]]
[[Category:Pages using div col with small parameter|Programming Language]]
[[Category:Pages with empty portal template|Programming Language]]
[[Category:Pages with script errors|Programming Language]]
[[Category:Portal templates with redlinked portals|Programming Language]]
[[Category:Short description with empty Wikidata description|Programming Language]]
[[Category:Sidebars with styles needing conversion|Programming Language]]
[[Category:Template documentation pages|Documentation/doc]]
[[Category:Templates Vigyan Ready|Programming Language]]
[[Category:Templates generating microformats|Programming Language]]
[[Category:Templates that add a tracking category|Programming Language]]
[[Category:Templates that are not mobile friendly|Programming Language]]
[[Category:Templates that generate short descriptions|Programming Language]]
[[Category:Templates using TemplateData|Programming Language]]
[[Category:Templates using under-protected Lua modules|Programming Language]]
[[Category:Webarchive template wayback links]]
[[Category:Wikipedia fully protected templates|Sister project links]]
[[Category:Wikipedia metatemplates|Programming Language]]
[[Category:उदाहरण सी कोड वाले लेख|Programming Language]]
[[Category:प्रोग्रामिंग भाषा वर्गीकरण|Programming Language]]
[[Category:प्रोग्रामिंग भाषाएं| ]]
[[Category:प्रोग्रामिंग भाषाएं| ]]
[[Category: संकेतन]]
[[Category:संकेतन|Programming Language]]
[[Category: उदाहरण सी कोड वाले लेख]]
 
 
[[Category: Machine Translated Page]]
[[Category:Created On 28/11/2022]]

Latest revision as of 18:15, 8 August 2023

हैलो, वर्ल्ड! .

प्रोग्रामिंग लैंग्वेज कंप्यूटर प्रोग्राम लिखने के लिए अंकन की प्रणाली है।[1] अधिकांश प्रोग्रामिंग लैंग्वेज टेक्स्ट-आधारित औपचारिक लैंग्वेज हैं, परन्तु वे दृश्य प्रोग्रामिंग लैंग्वेज भी हो सकती हैं। ये प्रकार की कंप्यूटर लैंग्वेज हैं।

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

प्रोग्रामिंग लैंग्वेज सिद्धांत कंप्यूटर विज्ञान का उपक्षेत्र है जो प्रोग्रामिंग लैंग्वेजों के डिजाइन, कार्यान्वयन, विश्लेषण, लक्षण वर्णन और वर्गीकरण से संबंधित है।

परिभाषा

किसी प्रोग्रामिंग लैंग्वेज को परिभाषित करते समय कई बातों पर विचार किया जाता है।

कंप्यूटर लैंग्वेज बनाम प्रोग्रामिंग लैंग्वेज

कंप्यूटर लैंग्वेज शब्द का प्रयोग कभी-कभी प्रोग्रामिंग लैंग्वेज के साथ परस्पर विनिमय के लिए किया जाता है।[2] यद्यपि, दोनों शब्दों का उपयोग लेखकों के बीच भिन्न होता है, जिसमें प्रत्येक का यथार्थ चक्र भी सम्मिलित है। प्रयोग में प्रोग्रामिंग लैंग्वेजों को कंप्यूटर लैंग्वेजों के उपसमूह के रूप में वर्णित किया गया है।[3] इसी प्रकार, कंप्यूटिंग में उपयोग की जाने वाली लैंग्वेज जिनका टारगेट कंप्यूटर प्रोग्राम को व्यक्त करने से भिन्न होता है, उन्हें सामान्य रूप से निर्दिष्ट कंप्यूटर लैंग्वेज कहा जाता है। इस प्रकार से उदाहरण के लिए, मार्कअप लैंग्वेजों को कभी-कभी कंप्यूटर लैंग्वेजों के रूप में संदर्भित किया जाता है ताकि इस बात पर बल दिया जा सके कि उनका उपयोग प्रोग्रामिंग के लिए नहीं किया जाता है।[4]

कंप्यूटर लैंग्वेजों को वर्गीकृत करने की विधि उन संगणनाओं के आधार पर है जिन्हें वे व्यक्त करने में सक्षम हैं, जैसा कि संगणना के सिद्धांत द्वारा वर्णित है। अधिकांश व्यावहारिक प्रोग्रामिंग लैंग्वेज ट्यूरिंग पूर्ण हैं,[5] और सभी ट्यूरिंग पूर्ण लैंग्वेज एल्गोरिदम के समान समूह को लागू कर सकती हैं। एएनएसआई/आईएसओ एसक्यूएल-92 और चैरिटी उन लैंग्वेजों के उदाहरण हैं जो ट्यूरिंग पूर्ण नहीं हैं, फिर भी उन्हें प्रायः प्रोग्रामिंग लैंग्वेज कहा जाता है।[6][7] यद्यपि, कुछ लेखक "प्रोग्रामिंग लैंग्वेज" शब्द को ट्यूरिंग पूर्ण लैंग्वेजों तक सीमित रखते हैं।[1][8]

एक अन्य उपयोग प्रोग्रामिंग लैंग्वेजों को अमूर्त मशीन और कंप्यूटर लैंग्वेजों की प्रोग्रामिंग के लिए सैद्धांतिक निर्माण के रूप में मानता है, जो भौतिक कंप्यूटरों पर चलता है, जिसमें परिमित हार्डवेयर संसाधन होते हैं।[9] जॉन सी. रेनॉल्ड्स इस बात पर बल देते हैं कि औपचारिक विनिर्देशन लैंग्वेज उतनी ही प्रोग्रामिंग लैंग्वेज हैं जितनी कि निष्पादन के लिए अभिप्रेत लैंग्वेज हैं। उनका यह भी तर्क है कि कंप्यूटर के व्यवहार को प्रभावित करने वाले टेक्स्ट और यहां तक ​​कि ग्राफिकल इनपुट प्रारूप प्रोग्रामिंग लैंग्वेज हैं, इस तथ्य के अतिरिक्त कि वे सामान्यतः ट्यूरिंग-पूर्ण नहीं हैं, और टिप्पणी करते हैं कि प्रोग्रामिंग लैंग्वेज अवधारणाओं की अज्ञानता इनपुट प्रारूपों में कई कमियों का कारण है।[10]

डोमेन और टारगेट

अधिकांश व्यावहारिक संदर्भों में, प्रोग्रामिंग लैंग्वेज में कंप्यूटर सम्मिलित होता है; फलस्वरूप, प्रोग्रामिंग लैंग्वेजों को सामान्यतः इस प्रकार परिभाषित और अध्ययन किया जाता है।[11] प्रोग्रामिंग लैंग्वेज नेचुरल लैंग्वेज से इस अर्थ में अलग है कि नेचुरल लैंग्वेज का उपयोग मात्र लोगों के बीच इंटरेक्शन के लिए किया जाता है, जबकि प्रोग्रामिंग लैंग्वेज भी मनुष्य को मशीनों को निर्देश देने की अनुमति देती हैं।

लैंग्वेज का क्षेत्र भी विचार करने योग्य है। एक्सएमएल, एचटीएमएल, या ट्राफ जैसी मार्कअप लैंग्वेज, जो संरचित डेटा को परिभाषित करती हैं, सामान्यतः प्रोग्रामिंग लैंग्वेज नहीं मानी जाती हैं।[12][13][14] यद्यपि, कम्प्यूटेशनल सिमेंटिक्स परिभाषित होने पर प्रोग्रामिंग लैंग्वेज सिंटैक्स को मार्कअप लैंग्वेज के साथ साझा कर सकती हैं। एक्सएसएलटी, इस प्रकार से उदाहरण के लिए, पूर्ण रूप से एक्सएमएल सिंटैक्स का उपयोग कर ट्यूरिंग पूर्ण लैंग्वेज है।[15][16][17] इसके अतिरिक्त, लाटेकस, जो अधिकांशतः डॉक्यूमेंट को संरचित करने के लिए उपयोग किया जाता है, में ट्यूरिंग पूर्ण उपसमुच्चय भी सम्मिलित है।[18][19]

सार

प्रोग्रामिंग लैंग्वेजों में सामान्यतः डेटा संरचनाओं को परिभाषित करने और परिवर्तन करने या नियंत्रण प्रवाह को नियंत्रित करने के लिए अमूर्तता (कंप्यूटर विज्ञान) होती है। व्यावहारिक आवश्यकता है कि प्रोग्रामिंग लैंग्वेज पर्याप्त सार का समर्थन करती है, अमूर्त सिद्धांत (प्रोग्रामिंग) द्वारा व्यक्त की जाती है।[20] इस सिद्धांत को कभी-कभी प्रोग्रामर को इस प्रकार के सार का उचित उपयोग करने की संस्तुति के रूप में तैयार किया जाता है।[21]

इतिहास

प्रारंभिक विकास

बहुत प्रारंभिक कंप्यूटर, जैसे कि कोलोसस, संग्रहीत प्रोग्राम की सहायता के बिना, उनके परिपथिकी को संशोधित करके या भौतिक नियंत्रणों के बैंकों को समूहित करके प्रोग्राम किए गए थे।

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

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

प्रथम उच्च-स्तरीय प्रोग्रामिंग लैंग्वेज, या तीसरी पीढ़ी की प्रोग्रामिंग लैंग्वेज (3जीएल), 1950 के दशक में लिखी गई थीं। 1943 और 1945 के बीच कोनराड ज़्यूस द्वारा जर्मन जेड3 (कंप्यूटर) के लिए विकसित कंप्यूटर के लिए डिज़ाइन की जाने वाली प्रारंभिक उच्च-स्तरीय प्रोग्रामिंग लैंग्वेज प्लैंककुल थी। यद्यपि, इसे 1998 और 2000 तक लागू नहीं किया गया था।[22]

1949 में प्रस्तावित जॉन मौचली का शॉर्ट कोड (कंप्यूटर लैंग्वेज), इलेक्ट्रॉनिक कंप्यूटर के लिए विकसित की गई प्रथम उच्च-स्तरीय लैंग्वेजों में से एक थी।[23] मशीन कोड के विपरीत, शॉर्ट कोड कथन समझने योग्य रूप में गणितीय अभिव्यक्तियों का प्रतिनिधित्व करते हैं। यद्यपि, प्रोग्राम को मशीन कोड में प्रत्येक बार चलने पर अनुवादित करना पड़ता था, जिससे प्रक्रिया समान मशीन कोड चलाने की तुलना में बहुत मंद हो जाती थी।

मैनचेस्टर विश्वविद्यालय में, एलिक ग्लेनी ने 1950 के दशक के प्रारंभ में ऑटोकोड विकसित किया। उच्च-स्तरीय प्रोग्रामिंग लैंग्वेज के रूप में, यह लैंग्वेज को स्वचालित रूप से मशीन कोड में बदलने के लिए कम्पाइलर का उपयोग करता था। प्रथम कोड और कंपाइलर 1952 में मैनचेस्टर विश्वविद्यालय में मैनचेस्टर मार्क 1 कंप्यूटर के लिए विकसित किया गया था और इसे प्रथम कंपाइलर उच्च स्तरीय प्रोग्रामिंग लैंग्वेज माना जाता है।[24][25]

मार्क 1 के लिए दूसरा ऑटो कोड टोनी ब्रूकर द्वारा विकसित किया गया था। 1954 में ए. ब्रूकर और इसे मार्क 1 ऑटोकोड कहा जाता था। ब्रूकर ने मैनचेस्टर विश्वविद्यालय के साथ मिलकर 1950 के दशक में फेरांती मरकरी के लिए ऑटो कोड भी विकसित किया। एडसैक के लिए संस्करण डेविड हार्टले (कंप्यूटर वैज्ञानिक) द्वारा तैयार किया गया था। 1961 में कैम्ब्रिज गणितीय प्रयोगशाला विश्वविद्यालय के एफ. हार्टले. ईडीएसएसी 2 ऑटोकोड के रूप में जाना जाता है, यह स्थानीय परिस्थितियों के लिए अनुकूलित मर्करी ऑटोकोड से प्रत्यक्ष विकास था और इसके ऑब्जेक्ट कोड अनुकूलन और सोर्स-लैंग्वेज निदान के लिए विख्यात था जो उस समय के लिए उन्नत थे। मैनचेस्टर एटलस कंप्यूटर (मैनचेस्टर) मशीन विश्वविद्यालय के लिए विकास का समकालीन परन्तु अलग थ्रेड, एटलस ऑटोकोड विकसित किया गया था।

1954 में, जॉन बैकस द्वारा आईबीएम में फोरट्रान का आविष्कार किया गया था। यह प्रथम व्यापक रूप से उपयोग की जाने वाली उच्च-स्तरीय लैंग्वेज थी, जिसका कार्यात्मक कार्यान्वयन मात्र पेपर पर डिजाइन के विपरीत था।[26][27] उच्च-निष्पादन कंप्यूटिंग के लिए यह अभी भी लोकप्रिय लैंग्वेज है[28] और उन प्रोग्रामों के लिए उपयोग किया जाता है जो संसार के श्रेष्ठ 500 को बेंचमार्क और पदित करते हैं।[29]

एक और प्रारंभिक प्रोग्रामिंग लैंग्वेज अमेरिका में ग्रेस हूपर द्वारा तैयार की गई थी, जिसे फ्लो-मेटिक कहा जाता है। इसे 1955 से 1959 की अवधि के समय रेमिंगटन रैंड में यूनीवैक आई के लिए विकसित किया गया था। हॉपर ने पाया कि व्यावसायिक डेटा प्रोसेसिंग ग्रारूप गणितीय संकेतन से असहज थे, और 1955 के प्रारंभ में, उन्होंने और उनकी समूह ने अंग्रेजी लैंग्वेज प्रोग्रामिंग लैंग्वेज के लिए विनिर्देश लिखा और प्रोटोटाइप लागू किया।[30] फ्लो-मैटिक कंपाइलर 1958 के प्रारंभ में सार्वजनिक रूप से उपलब्ध हो गया था और 1959 में व्यापक रूप से पूर्ण हो गया था।[31] कोबोल के डिजाइन में फ्लो-मैटिक का बड़ा प्रभाव था, क्योंकि उस समय मात्र यह और इसके प्रत्यक्ष वंशज एमाको वास्तविक उपयोग में थे।[32]

शोधन

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

1960 के दशक से 1970 के दशक के अंत तक की अवधि ने अब उपयोग में आने वाले प्रमुख लैंग्वेज प्रतिमानों का विकास किया था:

  • एपीएल (प्रोग्रामिंग लैंग्वेज) ने सरणी प्रोग्रामिंग के प्रारंभ की और कार्यात्मक प्रोग्रामिंग को प्रभावित किया।[33]
  • एल्गोल ने संरचित प्रक्रियात्मक प्रोग्रामिंग और प्रोग्रामिंग लैंग्वेज विनिर्देश के अनुशासन दोनों को परिष्कृत किया; एल्गोरिथम लैंग्वेज एल्गोल 60 पर संशोधित रिपोर्ट इस बात का मॉडल बन गई कि बाद में लैंग्वेज विनिर्देशों को कैसे लिखा गया।
  • लिस्प (प्रोग्रामिंग लैंग्वेज), 1958 में लागू की गई, प्रथम गतिशील रूप से टाइप की गई कार्यात्मक प्रोग्रामिंग लैंग्वेज थी।
  • 1960 के दशक में, सिमुला प्रथम लैंग्वेज थी जिसे ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग का समर्थन करने के लिए डिज़ाइन किया गया था; 1970 के दशक के मध्य में, स्मॉलटाक ने प्रथम विशुद्ध रूप से ऑब्जेक्ट-ओरिएंटेड लैंग्वेज का अनुसरण किया।
  • C (प्रोग्रामिंग लैंग्वेज) को 1969 और 1973 के बीच यूनिक्स ऑपरेटिंग सिस्टम के लिए सिस्टम प्रोग्रामिंग लैंग्वेज के रूप में विकसित किया गया था और यह लोकप्रिय बना हुआ है।[34]
  • 1972 में डिजाइन किया गया प्रोलॉग प्रथम तर्क प्रोग्रामिंग लैंग्वेज थी।
  • 1978 में, एमएल ने लिस्प के शीर्ष पर एक बहुरूपी प्रकार प्रणाली का निर्माण किया, जो सांख्यिकीय रूप से टाइप की जाने वाली कार्यात्मक प्रोग्रामिंग लैंग्वेजों में अग्रणी थी।

इनमें से प्रत्येक लैंग्वेज ने वंशजों को जन्म दिया, और अधिकांश आधुनिक प्रोग्रामिंग लैंग्वेज उनमें से कम से कम को अपने वंश में गणनीय हैं।

1960 और 1970 के दशक में भी संरचित प्रोग्रामिंग की विशेषताओं पर अत्यधिक चर्चा हुई, और एमएल (प्रोग्रामिंग लैंग्वेज) को इसका समर्थन करने के लिए डिज़ाइन किया जाना चाहिए।[35] एड्जर डब्ल्यू. डिज्कस्ट्रा ने 1968 में एसीएम के संचार में प्रकाशित प्रसिद्ध पत्र में तर्क दिया कि गोटू कथनों को सभी उच्च स्तरीय प्रोग्रामिंग लैंग्वेजों से हटा दिया जाना चाहिए।[36]

समेकन और विकास

प्रोग्रामिंग लैंग्वेज टेक्स्टबुक का छोटा चयन

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

1980 के दशक के समय बड़े पैमाने की प्रणालियों की प्रोग्रामिंग के लिए लैंग्वेज डिजाइन में महत्वपूर्ण प्रवृत्ति कोड के मॉड्यूल या बड़े पैमाने की संगठनात्मक इकाइयों के उपयोग पर बढ़ा हुआ ध्यान था। मोड्यूला-2, एडा, और एम्एल सभी ने 1980 के दशक में उल्लेखनीय मॉड्यूल सिस्टम विकसित किए, जो प्रायः सामान्य प्रोग्रामिंग निर्माणों से जुड़े थे।[38]

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

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

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

अवयव

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

सिंटेक्स

निवेशन टोकेनाइजेशन के साथ पायथन (प्रोग्रामिंग लैंग्वेज) का पार्स ट्री
सिंटेक्स हाईलाइट का उपयोग प्रायः प्रोग्रामर्स को सोर्स कोड के अवयवों को पहचानने में सहायता करने के लिए किया जाता है। उपरोक्त लैंग्वेज पायथ (प्रोग्रामिंग लैंग्वेज) है।

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

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

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

expression ::= atom | list
atomm::= number | symbol
numbere::= [+-]?['0'-'9']+
symbolb::= ['A'-'Z''a'-'z'].*
listt::= '(' expression* ')'

यह व्याकरण निम्नलिखित निर्दिष्ट करता है:

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

इस व्याकरण में सुनिर्मित टोकन क्रम के उदाहरण निम्नलिखित हैं: 12345, () तथा (a b c232 (1)).

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

एक उदाहरण के रूप में प्राकृतिक लैंग्वेज का प्रयोग करना, व्याकरणिक रूप से उचित वाक्य को अर्थ देना संभव नहीं हो सकता है या वाक्य असत्य हो सकता है:

  • रंगहीन हरे विचार करुण सोई। व्याकरणिक रूप से ठीक रूप से निर्मित है परन्तु सामान्यतः स्वीकृत अर्थ नहीं है।
  • जॉन विवाहित अविवाहित है। व्याकरणिक रूप से सुव्यवस्थित है परन्तु अर्थ व्यक्त करता है जो सत्य नहीं हो सकता।

निम्नलिखित सी भाषा खंड वाक्यात्मक रूप से सही है, लेकिन ऐसे ऑपरेशन करता है जो सिमेंटिक रूप से परिभाषित नहीं हैं (ऑपरेशन *p >> 4 का जटिल प्रकार वाले मान के लिए कोई अर्थ नहीं है और p->im परिभाषित नहीं है क्योंकि p अशक्त सूचक है):

complex *p = NULL;
complex abs_p = sqrt(*p >> 4 + p->im);

यदि पहली पंक्ति पर प्रकार की घोषणा छोड़ दी गई थी, तो प्रोग्राम संकलन के समय अपरिभाषित चर p पर एक त्रुटि ट्रिगर करेगा। यद्यपि, प्रोग्राम अभी भी वाक्य रचनात्मक रूप से उचित होगा क्योंकि प्रकार की घोषणाएं मात्र सिमेंटिक सूचना प्रदान करती हैं।

प्रोग्रामिंग लैंग्वेज को निर्दिष्ट करने के लिए आवश्यक व्याकरण को चॉम्स्की पदानुक्रम में अपनी स्थिति के अनुसार वर्गीकृत किया जा सकता है। अधिकांश प्रोग्रामिंग लैंग्वेजों के सिंटैक्स को टाइप-2 व्याकरण का उपयोग करके निर्दिष्ट किया जा सकता है, अर्थात, वे संदर्भ-मुक्त व्याकरण हैं।[39] पर्ल और लिस्प सहित कुछ लैंग्वेजों में ऐसे निर्माण होते हैं जो पार्सिंग चरण के समय निष्पादन की अनुमति देते हैं। ऐसी लैंग्वेज जिनमें ऐसे निर्माण होते हैं जो प्रोग्रामर को पार्सर के व्यवहार को बदलने की अनुमति देते हैं, सिंटैक्स विश्लेषण को अनिर्णीत समस्या बनाते हैं, और सामान्यतः पार्सिंग और निष्पादन के बीच के अंतर को अस्पष्ट करते हैं।[40] लिस्प के मैक्रो सिस्टम और पर्ल के BEGIN ब्लॉक के विपरीत, जिसमें सामान्य गणनाएं हो सकती हैं, सी मैक्रोज़ मात्र स्ट्रिंग प्रतिस्थापन हैं और कोड निष्पादन की आवश्यकता नहीं होती है।[41]

सिमेंटिक

सिमेंटिक्स कंप्यूटर विज्ञान शब्द का तात्पर्य ऐसी लैंग्वेजों के अर्थ से है, जैसा कि उनके रूप (सिंटेक्स) के विपरीत है।

स्टेटिक सिमेंटिक्स

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

गतिशील सिमेंटिक

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

टाइप सिस्टम

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

टाइप की गई बनाम अनटाइप की गई लैंग्वेज

एक लैंग्वेज टाइप की जाती है यदि प्रत्येक ऑपरेशन का विनिर्देश उस प्रकार के डेटा को परिभाषित करता है जिस पर ऑपरेशन लागू होता है।[43] इस प्रकार से उदाहरण के लिए, "this text between the quotes" द्वारा दर्शाया गया डेटा एक स्ट्रिंग है, और कई प्रोग्रामिंग भाषाओं में किसी संख्या को स्ट्रिंग से विभाजित करने का कोई अर्थ नहीं है और इसे निष्पादित नहीं किया जाएगा। अमान्य ऑपरेशन का पता तब लगाया जा सकता है जब प्रोग्राम संकलित किया जाता है (स्थैतिक प्रकार की जाँच) और संकलन त्रुटि संदेश के साथ कम्पाइलर द्वारा अस्वीकार कर दिया जाएगा, या यह पता लगाया जा सकता है कि प्रोग्राम चल रहा है (गतिशील प्रकार की जाँच), जिसके परिणामस्वरूप रन- टाइम अपवाद हैंडलिंग। कई लैंग्वेज इस अपवाद को संभालने के लिए अपवाद हैंडलर नामक संक्रिया की अनुमति देती हैं और इस प्रकार से उदाहरण के लिए, परिणाम के रूप में सदैव -1 देती हैं।

टाइप की गई लैंग्वेजों की विशेष स्थिति एकल-टाइप की गई लैंग्वेज हैं। ये प्रायः स्क्रिप्टिंग या मार्कअप लैंग्वेज होती हैं, जैसे रेक्स्क्स या मानक सामान्यीकृत मार्कअप लैंग्वेज, और इनमें मात्र डेटा प्रकार होता है——सामान्यतः वर्ण तार जो प्रतीकात्मक और संख्यात्मक डेटा दोनों के लिए उपयोग किए जाते हैं।

इसके विपरीत, अनटाइप्ड लैंग्वेज, जैसे कि अधिकांश असेंबली लैंग्वेज, किसी भी डेटा पर किसी भी ऑपरेशन को करने की अनुमति देती है, सामान्यतः विभिन्न लंबाई के बिट का क्रम।[43] उच्च-स्तरीय अनटाइप्ड लैंग्वेजों में बीसीपीएल, टीसीएल, और फोर्थ (प्रोग्रामिंग लैंग्वेज) के कुछ प्रकार सम्मिलित हैं।

व्यवहार में, जबकि कुछ लैंग्वेजों को टाइप सिद्धांत से टाइप किया हुआ माना जाता है (सभी ऑपरेशनों को सत्यापित या अस्वीकार करते हुए), अधिकांश आधुनिक लैंग्वेज टाइपिंग की डिग्री प्रदान करती हैं।[43] कई प्रोडक्शन लैंग्वेज प्रोग्राम के निष्पादन पर ठीक नियंत्रण के लिए टाइप सिस्टम, ट्रेडिंग टाइप सेफ्टी को बायपास या सबवर्ट करने के साधन प्रदान करती हैं (स्पष्ट प्रकार रूपांतरण देखें )।

स्टेटिक विज़-ए-विज़ डायनामिक टाइपिंग

टाइप सिस्टम में, प्रोग्राम के निष्पादित होने से पहले, सामान्यतः कंपाइल-टाइम पर, सभी एक्सप्रेशंस के प्रकार निर्धारित किए जाते हैं। इस प्रकार से उदाहरण के लिए, 1 और (2+2) पूर्णांक व्यंजक हैं; उन्हें किसी ऐसे संक्रिया में पास नहीं किया जा सकता है जो स्ट्रिंग की अपेक्षा करता है या वेरिएबल में संग्रहीत होता है जिसे दिनांक रखने के लिए परिभाषित किया जाता है।[43]

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

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

वीक और स्ट्रोंग टाइपिंग

वीक टाइपिंग प्रकार के मान को दूसरे के रूप में व्यवहार करने की अनुमति देता है, इस प्रकार से उदाहरण के लिए स्ट्रिंग (कंप्यूटर विज्ञान) को संख्या के रूप में मानना है।[43] यह कभी-कभी उपयोगी हो सकता है, परन्तु यह कुछ प्रकार के प्रोग्राम दोषों को संकलन समय और यहां तक ​​कि रन टाइम (प्रोग्राम लाइफसाइकिल चरण) पर भी अनदेखा करने की अनुमति दे सकता है।

सशक्त रूप से टाइप की गई प्रोग्रामिंग लैंग्वेज इन प्रोग्राम दोषों को रोकती है। असत्य प्रकार के मान पर कोई ऑपरेशन करने का प्रयास त्रुटि उत्पन्न करता है।[43] स्ट्रोंग टाइप की गई लैंग्वेजों को प्रायः टाइप-सेफ या एक प्रकार की सुरक्षा कहा जाता है।

वीक रूप से टाइप की गई वैकल्पिक परिभाषा लैंग्वेजों को संदर्भित करती है, जैसे कि पर्ल और जावास्क्रिप्ट, जो बड़ी संख्या में निहित प्रकार के रूपांतरणों की अनुमति देती हैं। जावास्क्रिप्ट में, इस प्रकार से उदाहरण के लिए, अभिव्यक्ति 2 * x परोक्ष रूप से x को एक संख्या में परिवर्तित करता है, और यह रूपांतरण तब भी सफल होता है, जब x null, undefined, Array या अक्षरों की एक स्ट्रिंग हो। ऐसे अंतर्निहित रूपांतरण प्रायः उपयोगी होते हैं, परन्तु वे प्रोग्रामिंग त्रुटियों को छिपा सकते हैं।

स्ट्रोंग और स्थिर अब सामान्यतः लाम्बिक अवधारणाएं मानी जाती हैं, परन्तु साहित्य में उपयोग अलग है। कुछ शब्द दृढ़ता से टाइप किए गए शब्द का उपयोग दृढ़ता से, स्थिर रूप से टाइप किए गए, या इससे भी अधिक भ्रमित करने के लिए किया जाता है, जिसका अर्थ है कि मात्र स्थिर रूप से टाइप किया गया है। इस प्रकार C (प्रोग्रामिंग लैंग्वेज) को दृढ़ता से टाइप किया गया और वीक रूप से टाइप किया गया दोनों कहा गया है।[45][46]

कुछ वृत्तिक प्रोग्रामरों को यह विचित्र लग सकता है कि सी वीक, वैधानिक रूप से टाइप किया जा सकता है। यद्यपि, ध्यान दें कि जेनेरिक पॉइंटर, वोयड * पॉइंटर का उपयोग, स्पष्ट कास्ट करने की आवश्यकता के बिना अन्य पॉइंटर्स को कास्टिंग पॉइंटर्स की अनुमति देता है। यह किसी स्पष्ट कास्ट जैसे (int) या (char) का उपयोग किए बिना C में किसी भी प्रकार के डेटाटाइप में बाइट की एक सरणी को कास्ट करने के समान है।

मानक लाइब्रेरी और रन-टाइम सिस्टम

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

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

डिजाइन और कार्यान्वयन

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

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

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

प्रोग्रामिंग लैंग्वेजों के विकास में सामान्य प्रवृत्ति उच्च स्तर के अमूर्तन (कंप्यूटर विज्ञान) का उपयोग करके समस्याओं को हल करने की अधिक क्षमता जोड़ना है। प्रारंभिक प्रोग्रामिंग लैंग्वेज कंप्यूटर के अंतर्निहित हार्डवेयर से बहुत निकट से जुड़ी हुई थीं। जैसे-जैसे नवीन प्रोग्रामिंग लैंग्वेज विकसित हुई हैं, सुविधाएँ जोड़ी गई हैं जो प्रोग्रामर को उन विचारों को व्यक्त करने देती हैं जो सरल अनुवाद से अंतर्निहित हार्डवेयर निर्देशों में अधिक दूरस्थ हैं। क्योंकि प्रोग्रामर कंप्यूटर की जटिलता से कम बंधे होते हैं, उनके प्रोग्राम प्रोग्रामर के कम प्रयास से अधिक कंप्यूटिंग कर सकते हैं। यह उन्हें प्रति समय इकाई में अधिक कार्यात्मकता लिखने देता है।[51]

प्रोग्रामिंग के लिए विशेष लैंग्वेज की आवश्यकता को समाप्त करने की विधि के रूप में प्राकृतिक लैंग्वेज प्रोग्रामिंग का प्रस्ताव दिया गया है। यद्यपि, यह टारगेट दूर है और इसके लाभ चर्चा के लिए विवृत हैं। एड्जर डब्ल्यू. डिज्कस्ट्रा ने यह स्थिति ली कि अर्थहीन निर्माणों की प्रारंभ को रोकने के लिए औपचारिक लैंग्वेज का उपयोग आवश्यक है, और प्राकृतिक लैंग्वेज प्रोग्रामिंग को मूर्खता के रूप में निरस्त कर दिया।[52] एलन पर्लिस इसी प्रकार इस विचार को निरस्त कर रहे थे।[53] संरचित अंग्रेजी और एसक्यूएल में हाइब्रिड विधि अपनाए गए हैं।

एक लैंग्वेज के डिजाइनरों और उपयोगकर्ताओं को प्रोग्रामिंग के अभ्यास को नियंत्रित करने और सक्षम करने वाली कई कलाकृतियों का निर्माण करना चाहिए। इन कलाकृतियों में सबसे महत्वपूर्ण लैंग्वेज विनिर्देश और कार्यान्वयन हैं।

विशिष्टता

एक प्रोग्रामिंग लैंग्वेज का विनिर्देशन संरचना है जिसे लैंग्वेज प्रोग्रामर और प्रोग्रामिंग लैंग्वेज कार्यान्वयन इस बात पर सहमत होने के लिए उपयोग कर सकते हैं कि क्या सोर्स कोड का भाग उस लैंग्वेज में वैध कंप्यूटर प्रोग्राम है, और यदि ऐसा है तो इसका व्यवहार क्या होगा।

एक प्रोग्रामिंग लैंग्वेज विनिर्देश निम्नलिखित सहित कई रूप ले सकता है:

  • लैंग्वेज के सिंटैक्स, स्थिर सिमेंटिक और निष्पादन सिमेंटिक की स्पष्ट परिभाषा। जबकि सिंटैक्स सामान्यतः औपचारिक व्याकरण का उपयोग करके निर्दिष्ट किया जाता है, सिमेंटिक परिभाषा प्राकृतिक लैंग्वेज में लिखी जा सकती हैं (जैसे, C लैंग्वेज) में), या प्रोग्रामिंग लैंग्वेजों का औपचारिक सिमेंटिक (जैसे, मानक एमएल में)[54] और योजना (प्रोग्रामिंग लैंग्वेज[55] विशेष विवरण में)।
  • लैंग्वेज के लिए कंपाइलर के व्यवहार का विवरण (इस प्रकार से उदाहरण के लिए, सी ++ और फोरट्रान विनिर्देश)। इस विवरण से लैंग्वेज के सिंटैक्स और सिमेंटिक का अनुमान लगाना पड़ता है, जो प्राकृतिक या औपचारिक लैंग्वेज में लिखा जा सकता है।
  • एक संदर्भ या मॉडल कार्यान्वयन, कभी-कभी निर्दिष्ट भाषा में लिखा जाता है, (जैसे, प्रोलॉग या रेक्स्क्स[56])। संदर्भ कार्यान्वयन के व्यवहार में लैंग्वेज का सिंटैक्स और सिमेंटिक स्पष्ट है।

कार्यान्वयन

एक प्रोग्रामिंग लैंग्वेज का कार्यान्वयन उस लैंग्वेज में प्रोग्राम लिखने और उन्हें हार्डवेयर और सॉफ़्टवेयर के या अधिक कॉन्फ़िगरेशन पर निष्पादित करने की विधि प्रदान करता है। प्रोग्रामिंग लैंग्वेज कार्यान्वयन के लिए व्यापक रूप से दो दृष्टिकोण हैं: कम्पाइलर और इंटरप्रेटर (कंप्यूटिंग)। किसी भी तकनीक का उपयोग करके किसी लैंग्वेज को लागू करना सामान्यतः संभव है।

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

प्रोग्राम जो प्रत्यक्षतः हार्डवेयर पर निष्पादित होते हैं, सामान्यतः उन प्रोग्रामों की तुलना में बहुत तीव्रता से चलते हैं जिन्हें सॉफ्टवेयर में व्याख्या किया जाता है।[57]

व्याख्या किए गए प्रोग्रामों के निष्पादन में सुधार के लिए तकनीक समय-समय पर संकलन है। यहां आभासी मशीन, निष्पादन से ठीक पहले, हार्डवेयर पर प्रत्यक्षतः निष्पादन के लिए मशीन कोड के लिए उपयोग किए जाने वाले बाईटकोड के ब्लॉक का अनुवाद करती है।

स्वामित्व लैंग्वेज

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

कुछ प्रोग्रामिंग लैंग्वेज स्वामित्व और विवृत के बीच की सीमा पर स्थित हैं; इस प्रकार से उदाहरण के लिए, ओरेकल कार्पोरेशन जावा प्रोग्रामिंग लैंग्वेज के कुछ गुणों पर स्वामित्व स्थिति का अनुरोध करता है,[58] और माइक्रोसॉफ्ट की सी शार्प (प्रोग्रामिंग लैंग्वेज)|सी प्रोग्रामिंग लैंग्वेज, जिसमें सिस्टम के अधिकांश भागों का विवृत कार्यान्वयन है, संवृत वातावरण के रूप में सामान्य लैंग्वेज रनटाइम (सीएलआर) भी है।[59]

कई स्वामित्व वाली लैंग्वेजों का व्यापक रूप से उपयोग किया जाता है, उनकी स्वामित्व प्रकृति के अतिरिक्त; उदाहरणों में मैटलैब, वीबीस्क्रिप्ट और वोल्फ्राम लैंग्वेज सम्मिलित हैं। कुछ लैंग्वेज संवृत से विवृत में परिवर्तन कर सकती हैं; इस प्रकार से उदाहरण के लिए, एरलाँग (प्रोग्रामिंग लैंग्वेज) मूल रूप से एरिक्सन की आंतरिक प्रोग्रामिंग लैंग्वेज थी।[60]

प्रयोग

मुख्य रूप से कंप्यूटिंग क्षेत्र में हजारों विभिन्न प्रोग्रामिंग लैंग्वेज बनाई गई हैं।[61] व्यक्तिगत सॉफ़्टवेयर प्रोजेक्ट सामान्यतः पाँच प्रोग्रामिंग लैंग्वेजों या अधिक का उपयोग करते हैं।[62]

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

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

एक कंप्यूटर के लिए प्रोग्राम मानव संपर्क के बिना बैच प्रसंस्करण में निष्पादन (कंप्यूटिंग) हो सकता है, या उपयोगकर्ता इंटरप्रेटर (कंप्यूटिंग) के सत्र (कंप्यूटिंग) में कमांड (कंप्यूटिंग) टाइप कर सकता है। इस स्थिति में क्रम एक मात्र ऐसे प्रोग्राम होते हैं, जिनके निष्पादन को साथ जोड़ा जाता है। जब कोई लैंग्वेज किसी इंटरप्रेटर (जैसे कि यूनिक्स सेल या अन्य कमांड लाइन इंटरफेस) के माध्यम से अपने क्रमों को संकलित किए बिना चला सकती है, तो इसे स्क्रिप्टिंग लैंग्वेज कहा जाता है।[64]

लैंग्वेज के प्रयोग का मापन

यह निर्धारित करना कि सबसे व्यापक रूप से उपयोग की जाने वाली प्रोग्रामिंग लैंग्वेज कौन सी है, क्योंकि उपयोग की परिभाषा संदर्भ के अनुसार भिन्न होती है। लैंग्वेज अधिक संख्या में प्रोग्रामर घंटों पर अधिकृत कर सकती है, अलग में कोड की अधिक पंक्तियां होती हैं, और तीसरी सबसे अधिक सीपीयू समय का उपभोग कर सकती है। कुछ लैंग्वेज विशेष प्रकार के अनुप्रयोगों के लिए बहुत लोकप्रिय हैं। इस प्रकार से उदाहरण के लिए, कोबोल कॉर्पोरेट डेटा केंद्र में अभी भी स्ट्रोंग है, प्रायः बड़े मेनफ़्रेम कंप्यूटर पर;[65][66] फोरट्रान वैज्ञानिक और इंजीनियरिंग अनुप्रयोगों में; एयरोस्पेस, परिवहन, सैन्य, वास्तविक समय और एम्बेडेड अनुप्रयोगों में एडा (प्रोग्रामिंग लैंग्वेज); और सी (प्रोग्रामिंग लैंग्वेज) एम्बेडेड अनुप्रयोगों और ऑपरेटिंग सिस्टम आदि में हैं। कई अलग-अलग प्रकार के अनुप्रयोगों को लिखने के लिए नियमित रूप से अन्य लैंग्वेजों का उपयोग किया जाता है।

लैंग्वेज की लोकप्रियता को मापने के विभिन्न विधि, जो मापा जाता है उस पर अलग पूर्वाग्रह के लिए प्रत्येक विषय प्रस्तावित किया गया है:

  • लैंग्वेज का उल्लेख करने वाले नौकरी विज्ञापनों की संख्या की गणनीय करना[67]
  • बेची गई पुस्तकों की संख्या जो लैंग्वेज सिखाती या उसका वर्णन करती हैं[68]
  • लैंग्वेज में लिखे गए कोड की वर्तमान पंक्तियों की संख्या का अनुमान – जो प्रायः सार्वजनिक खोजों में नहीं मिलने वाली लैंग्वेजों को कम आंकते हैं[69]
  • वेब सर्च इंजन का उपयोग करते हुए पाए गए लैंग्वेज संदर्भों की संख्या (अर्थात, लैंग्वेज के नाम के लिए)।

विभिन्न इंटरनेट साइटों से सूचना का संयोजन और औसत, stackify.com ने दस सबसे लोकप्रिय प्रोग्रामिंग लैंग्वेजों (समग्र लोकप्रियता के अवरोही क्रम में) की सूचना दी: जैसे कि जावा (प्रोग्रामिंग लैंग्वेज), सी (प्रोग्रामिंग लैंग्वेज), सी ++, पायथन (प्रोग्रामिंग लैंग्वेज), सी शार्प (प्रोग्रामिंग लैंग्वेज), जावास्क्रिप्ट, विज़ुअल बेसिक .NET, R (प्रोग्रामिंग लैंग्वेज), PHP, और मैटलैब आदि।[70]

उपभाषा, चुनाव और कार्यान्वयन

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

वर्गीकरण

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

कार्य इस तथ्य से और जटिल है कि लैंग्वेजों को कई अक्षों के साथ वर्गीकृत किया जा सकता है। इस प्रकार से उदाहरण के लिए, जावा ऑब्जेक्ट-ओरिएंटेड लैंग्वेज है (क्योंकि यह ऑब्जेक्ट-ओरिएंटेड संगठन को प्रोत्साहित करती है) और समवर्ती लैंग्वेज है (क्योंकि इसमें समानांतर में एकाधिक थ्रेड (कंप्यूटर विज्ञान) चलाने के लिए अंतर्निहित निर्माण सम्मिलित हैं)। पायथन (प्रोग्रामिंग लैंग्वेज) ऑब्जेक्ट-ओरिएंटेड स्क्रिप्टिंग लैंग्वेज है।[71]

व्यापक स्ट्रोक में, प्रोग्रामिंग लैंग्वेजों को प्रोग्रामिंग प्रतिमान और उपयोग के इच्छित डोमेन द्वारा वर्गीकृत किया जाता है, जिसमें सामान्य-उद्देश्य वाली प्रोग्रामिंग लैंग्वेज डोमेन-विशिष्ट प्रोग्रामिंग लैंग्वेजों से अलग होती हैं। परंपरागत रूप से, प्रोग्रामिंग लैंग्वेजों को अनिवार्य वाक्यों के संदर्भ में अभिकलन का वर्णन करने के रूप में माना जाता है, अर्थात क्रम जारी करना। इन्हें सामान्यतः अनिवार्य प्रोग्रामिंग लैंग्वेज कहा जाता है। प्रोग्रामिंग लैंग्वेजों में अनुसंधान का बड़ा टारगेट निर्देश के समूह के रूप में प्रोग्राम और वांछित उत्तर के विषय में प्रोग्राम के रूप में अंतर को अस्पष्ट करना है, जो कि घोषणात्मक प्रोग्रामिंग की मुख्य विशेषता है।[72] अधिक परिष्कृत प्रतिमानों में प्रक्रियात्मक प्रोग्रामिंग, ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग, कार्यात्मक प्रोग्रामिंग और तर्क प्रोग्रामिंग सम्मिलित हैं; कुछ लैंग्वेज प्रतिमान या बहु-प्रतिमान के संकर हैं। असेंबली लैंग्वेज अंतर्निहित मशीन आर्किटेक्चर के प्रत्यक्ष मॉडल के रूप में इतना प्रतिमान नहीं है। उद्देश्य से, प्रोग्रामिंग लैंग्वेजों को सामान्य उद्देश्य, सिस्टम प्रोग्रामिंग लैंग्वेज, स्क्रिप्टिंग लैंग्वेज, डोमेन-विशिष्ट लैंग्वेज, या समवर्ती/वितरित लैंग्वेज (या इनमें से संयोजन) माना जा सकता है।[73] कुछ सामान्य उद्देश्य वाली लैंग्वेजों को बड़े पैमाने पर शैक्षिक टारगेटों के साथ डिजाइन किया गया था।[74]

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

यह भी देखें


संदर्भ

  1. 1.0 1.1 1.2 Aaby, Anthony (2004). प्रोग्रामिंग भाषाओं का परिचय. Archived from the original on 8 November 2012. Retrieved 29 September 2012.
  2. Robert A. Edmunds, The Prentice-Hall standard glossary of computer terminology, Prentice-Hall, 1985, p. 91
  3. Pascal Lando, Anne Lapujade, Gilles Kassel, and Frédéric Fürst, Towards a General Ontology of Computer Programs Archived 7 July 2015 at the Wayback Machine, ICSOFT 2007 Archived 27 April 2010 at the Wayback Machine, pp. 163–170
  4. S.K. Bajpai, Introduction To Computers And C Programming, New Age International, 2007, ISBN 81-224-1379-X, p. 346
  5. "ट्यूरिंग पूर्णता". www.cs.odu.edu. Retrieved 2022-10-05.
  6. Digital Equipment Corporation. "सूचना प्रौद्योगिकी - डेटाबेस भाषा SQL (DIS 9075 का प्रस्तावित संशोधित पाठ)". ISO/IEC 9075:1992, Database Language SQL. Archived from the original on 21 June 2006. Retrieved 29 June 2006.
  7. The Charity Development Group (December 1996). "चैरिटी होम पेज". Archived from the original on 18 July 2006., "Charity is a categorical programming language...", "All Charity computations terminate."
  8. In mathematical terms, this means the programming language is Turing-complete MacLennan, Bruce J. (1987). Principles of Programming Languages. Oxford University Press. p. 1. ISBN 978-0-19-511306-8.
  9. R. Narasimhan, Programming Languages and Computers: A Unified Metatheory, pp. 189—247 in Franz Alt, Morris Rubinoff (eds.) Advances in computers, Volume 8, Academic Press, 1994, ISBN 0-12-012108-5, p.215: "[...] the model [...] for computer languages differs from that [...] for programming languages in only two respects. In a computer language, there are only finitely many names—or registers—which can assume only finitely many values—or states—and these states are not further distinguished in terms of any other attributes. [author's footnote:] This may sound like a truism but its implications are far-reaching. For example, it would imply that any model for programming languages, by fixing certain of its parameters or features, should be reducible in a natural way to a model for computer languages."
  10. John C. Reynolds, "Some thoughts on teaching programming and programming languages", SIGPLAN Notices, Volume 43, Issue 11, November 2008, p.109
  11. Ben Ari, Mordechai (1996). प्रोग्रामिंग भाषाओं को समझना. John Wiley and Sons. कार्यक्रमों और भाषाओं को विशुद्ध रूप से औपचारिक गणितीय वस्तुओं के रूप में परिभाषित किया जा सकता है। हालाँकि, अधिक लोग अन्य गणितीय वस्तुओं जैसे समूहों की तुलना में कार्यक्रमों में रुचि रखते हैं, ठीक है क्योंकि कंप्यूटर के निष्पादन को नियंत्रित करने के लिए कार्यक्रम-प्रतीकों के अनुक्रम-का उपयोग करना संभव है। जबकि हम प्रोग्रामिंग के सिद्धांत के अध्ययन की अत्यधिक अनुशंसा करते हैं, यह पाठ आम तौर पर कार्यक्रमों के अध्ययन तक ही सीमित रहेगा क्योंकि उन्हें कंप्यूटर पर निष्पादित किया जाता है।
  12. XML in 10 points Archived 6 September 2009 at the Wayback Machine W3C, 1999, "XML is not a programming language."
  13. Powell, Thomas (2003). एचटीएमएल और एक्सएचटीएमएल: पूरा संदर्भ. McGraw-Hill. p. 25. ISBN 978-0-07-222942-4. HTML एक प्रोग्रामिंग भाषा नहीं है।
  14. Dykes, Lucinda; Tittel, Ed (2005). डमियों के लिए एक्सएमएल (4th ed.). Wiley. p. 20. ISBN 978-0-7645-8845-7. ...यह एक मार्कअप भाषा है, प्रोग्रामिंग भाषा नहीं।
  15. "एक्सएसएलटी किस प्रकार की भाषा है?". IBM.com. 2005-04-20. Archived from the original on 11 May 2011.
  16. "XSLT एक प्रोग्रामिंग लैंग्वेज है". Msdn.microsoft.com. Archived from the original on 3 February 2011. Retrieved 3 December 2010.
  17. Scott, Michael (2006). प्रोग्रामिंग लैंग्वेज व्यावहारिकता. Morgan Kaufmann. p. 802. ISBN 978-0-12-633951-2. XSLT, हालांकि XML के परिवर्तन के लिए अत्यधिक विशिष्ट है, एक ट्यूरिंग-पूर्ण प्रोग्रामिंग भाषा है।
  18. Oetiker, Tobias; Partl, Hubert; Hyna, Irene; Schlegl, Elisabeth (20 June 2016). "लेटेक्स 2ε का इतना संक्षिप्त परिचय नहीं" (Version 5.06). tobi.oetiker.ch. pp. 1–157. Archived (PDF) from the original on 14 March 2017.
  19. Syropoulos, Apostolos; Antonis Tsolomitis; Nick Sofroniou (2003). LaTeX का उपयोग कर डिजिटल टाइपोग्राफी. Springer-Verlag. p. 213. ISBN 978-0-387-95217-8. TeX न केवल एक उत्कृष्ट टाइपसेटिंग इंजन है बल्कि एक वास्तविक प्रोग्रामिंग भाषा भी है।
  20. David A. Schmidt, The structure of typed programming languages, MIT Press, 1994, ISBN 0-262-19349-3, p. 32
  21. Pierce, Benjamin (2002). प्रकार और प्रोग्रामिंग भाषाएँ. MIT Press. p. 339. ISBN 978-0-262-16209-8.
  22. Rojas, Raúl, et al. (2000). "Plankalkül: The First High-Level Programming Language and its Implementation". Institut für Informatik, Freie Universität Berlin, Technical Report B-3/2000. (full text) Archived 18 October 2014 at the Wayback Machine
  23. Sebesta, W.S Concepts of Programming languages. 2006; M6 14:18 pp.44. ISBN 0-321-33025-0
  24. Knuth, Donald E.; Pardo, Luis Trabb. "प्रोग्रामिंग भाषाओं का प्रारंभिक विकास". Encyclopedia of Computer Science and Technology. 7: 419–493.
  25. Peter J. Bentley (2012). डिजीटल: कंप्यूटर का विज्ञान और यह हमारी दुनिया को कैसे आकार देता है. Oxford University Press. p. 87. ISBN 9780199693795. Archived from the original on 29 August 2016.
  26. "फोरट्रान निर्माता जॉन बैकस का निधन - टेक और गैजेट्स". NBC News. 2007-03-20. Retrieved 2010-04-25.
  27. "CSC-302 99S : कक्षा 02: प्रोग्रामिंग भाषाओं का संक्षिप्त इतिहास". Math.grin.edu. Archived from the original on 15 July 2010. Retrieved 2010-04-25.
  28. Eugene Loh (18 June 2010). "आदर्श एचपीसी प्रोग्रामिंग भाषा". Queue. 8 (6). Archived from the original on 4 March 2016.
  29. "एचपीएल - वितरित-मेमोरी कंप्यूटरों के लिए उच्च-प्रदर्शन लाइनपैक बेंचमार्क का पोर्टेबल कार्यान्वयन". Archived from the original on 15 February 2015. Retrieved 2015-02-21.
  30. Hopper (1978) p. 16.
  31. Sammet (1969) p. 316
  32. Sammet (1978) p. 204.
  33. Richard L. Wexelblat: History of Programming Languages, Academic Press, 1981, chapter XIV.
  34. François Labelle. "प्रोग्रामिंग भाषा उपयोग ग्राफ". SourceForge. Archived from the original on 17 June 2006. Retrieved 21 June 2006.. This comparison analyzes trends in the number of projects hosted by a popular community programming repository. During most years of the comparison, C leads by a considerable margin; in 2006, Java overtakes C, but the combination of C/C++ still leads considerably.
  35. Hayes, Brian (2006). "अर्धविराम युद्ध". American Scientist. 94 (4): 299–303. doi:10.1511/2006.60.299.
  36. Dijkstra, Edsger W. (March 1968). "नुकसानदायक माने जाने वाले स्टेटमेंट पर जाएं" (PDF). Communications of the ACM. 11 (3): 147–148. doi:10.1145/362929.362947. S2CID 17469809. Archived (PDF) from the original on 13 May 2014.
  37. Tetsuro Fujise, Takashi Chikayama, Kazuaki Rokusawa, Akihiko Nakase (December 1994). "KLIC: A Portable Implementation of KL1" Proc. of FGCS '94, ICOT Tokyo, December 1994. "Archived copy". Archived from the original on 25 September 2006. Retrieved 2006-10-09.{{cite web}}: CS1 maint: archived copy as title (link) KLIC is a portable implementation of a concurrent logic programming language KL1.
  38. Jim Bender (15 March 2004). "कार्यात्मक प्रोग्रामिंग भाषाओं के लिए मॉड्यूल पर लघु ग्रंथ सूची". ReadScheme.org. Archived from the original on 24 September 2006.
  39. Michael Sipser (1996). संगणना के सिद्धांत का परिचय. PWS Publishing. ISBN 978-0-534-94728-6. Section 2.2: Pushdown Automata, pp.101–114.
  40. Jeffrey Kegler, "Perl and Undecidability Archived 17 August 2009 at the Wayback Machine", The Perl Review. Papers 2 and 3 prove, using respectively Rice's theorem and direct reduction to the halting problem, that the parsing of Perl programs is in general undecidable.
  41. Marty Hall, 1995, Lecture Notes: Macros Archived 6 August 2013 at the Wayback Machine, PostScript version Archived 17 August 2000 at the Wayback Machine
  42. Michael Lee Scott, Programming language pragmatics, Edition 2, Morgan Kaufmann, 2006, ISBN 0-12-633951-1, p. 18–19
  43. 43.0 43.1 43.2 43.3 43.4 43.5 43.6 Andrew Cooke. "कंप्यूटर भाषाओं का परिचय". Archived from the original on 15 August 2012. Retrieved 13 July 2012.
  44. Specifically, instantiations of generic types are inferred for certain expression forms. Type inference in Generic Java—the research language that provided the basis for Java 1.5's bounded parametric polymorphism extensions—is discussed in two informal manuscripts from the Types mailing list: Generic Java type inference is unsound Archived 29 January 2007 at the Wayback Machine (Alan Jeffrey, 17 December 2001) and Sound Generic Java type inference Archived 29 January 2007 at the Wayback Machine (Martin Odersky, 15 January 2002). C#'s type system is similar to Java's and uses a similar partial type inference scheme.
  45. "एल्गोरिदम भाषा योजना पर संशोधित रिपोर्ट". 20 February 1998. Archived from the original on 14 July 2006.
  46. Luca Cardelli and Peter Wegner. "अंडरस्टैंडिंग टाइप्स, डेटा एब्स्ट्रेक्शन और पॉलीमॉर्फिज्म पर". Manuscript (1985). Archived from the original on 19 June 2006.
  47. Steven R. Fischer, A history of language, Reaktion Books, 2003, ISBN 1-86189-080-X, p. 205
  48. Éric Lévénez (2011). "कंप्यूटर भाषा इतिहास". Archived from the original on 7 January 2006.
  49. Jing Huang. "कृत्रिम भाषा बनाम प्राकृतिक भाषा". Archived from the original on 3 September 2009.
  50. IBM in first publishing PL/I, for example, rather ambitiously titled its manual The universal programming language PL/I (IBM Library; 1966). The title reflected IBM's goals for unlimited subsetting capability: "PL/I is designed in such a way that one can isolate subsets from it satisfying the requirements of particular applications." ("PL/I". Encyclopedia of Mathematics. Archived from the original on 26 April 2012. Retrieved 29 June 2006.). Ada and UNCOL had similar early goals.
  51. Frederick P. Brooks, Jr.: The Mythical Man-Month, Addison-Wesley, 1982, pp. 93–94
  52. Dijkstra, Edsger W. On the foolishness of "natural language programming." Archived 20 January 2008 at the Wayback Machine EWD667.
  53. Perlis, Alan (September 1982). "प्रोग्रामिंग पर एपिग्राम". SIGPLAN Notices Vol. 17, No. 9. pp. 7–13. Archived from the original on 17 January 1999.
  54. Milner, R.; M. Tofte; R. Harper; D. MacQueen (1997). मानक एमएल की परिभाषा (संशोधित). MIT Press. ISBN 978-0-262-63181-5.
  55. Kelsey, Richard; William Clinger; Jonathan Rees (February 1998). "धारा 7.2 औपचारिक शब्दार्थ". Revised5 Report on the Algorithmic Language Scheme. Archived from the original on 6 July 2006.
  56. ANSI – Programming Language Rexx, X3-274.1996
  57. Steve, McConnell (2004). कोड पूर्ण (Second ed.). Redmond, Washington. pp. 590, 600. ISBN 0735619670. OCLC 54974573.{{cite book}}: CS1 maint: location missing publisher (link)
  58. See: Oracle America, Inc. v. Google, Inc.
  59. "प्रोग्रामिंग भाषाओं के लिए गाइड | ComputerScience.org". ComputerScience.org (in English). Retrieved 2018-05-13.
  60. "मूल बातें". ibm.com (in English). 2011-05-10. Retrieved 2018-05-13.
  61. "HOPL: प्रोग्रामिंग भाषाओं का एक इंटरैक्टिव रोस्टर". Australia: Murdoch University. Archived from the original on 20 February 2011. Retrieved 1 June 2009. यह साइट 8512 भाषाओं को सूचीबद्ध करती है।
  62. Mayer, Philip; Bauer, Alexander (2015). "An empirical analysis of the utilization of multiple programming languages in open source projects". सॉफ्टवेयर इंजीनियरिंग में मूल्यांकन और मूल्यांकन पर 19वें अंतर्राष्ट्रीय सम्मेलन की कार्यवाही. सॉफ्टवेयर इंजीनियरिंग में मूल्यांकन और मूल्यांकन पर 19वें अंतर्राष्ट्रीय सम्मेलन की कार्यवाही– EASE '15. New York, NY, USA: ACM. pp. 4:1–4:10. doi:10.1145/2745802.2745805. ISBN 978-1-4503-3350-4. परिणाम: हमने पाया (ए) स्पष्ट रूप से प्रभावी मुख्य सामान्य प्रयोजन भाषा और 5 अक्सर उपयोग किए जाने वाले डीएसएल प्रकारों के साथ प्रति परियोजना 5 भाषाओं की एक औसत संख्या, (बी) आकार का एक महत्वपूर्ण प्रभाव, कमिट की संख्या और मुख्य भाषा भाषाओं की संख्या के साथ-साथ उम्र और योगदानकर्ताओं की संख्या का कोई महत्वपूर्ण प्रभाव नहीं है, और (सी) एक्सएमएल, शैल/मेक, और एचटीएमएल/सीएसएस के आसपास समूहित तीन भाषा पारिस्थितिक तंत्र। निष्कर्ष: मल्टी-लैंग्वेज प्रोग्रामिंग ओपन-सोर्स प्रोजेक्ट्स में आम लगती है और यह एक ऐसा कारक है जिसे टूलिंग में और ऐसे सॉफ्टवेयर सिस्टम के विकास और रखरखाव का आकलन करते समय निपटाया जाना चाहिए।
  63. Abelson, Sussman, and Sussman. "कंप्यूटर प्रोग्राम की संरचना और व्याख्या". Archived from the original on 26 February 2009. Retrieved 3 March 2009.{{cite web}}: CS1 maint: multiple names: authors list (link)
  64. Brown Vicki (1999). "Scripting Languages". mactech.com. Archived from the original on 2 December 2017.
  65. Georgina Swan (2009-09-21). "COBOL turns 50". computerworld.com.au. Archived from the original on 19 October 2013. Retrieved 2013-10-19.
  66. Ed Airey (2012-05-03). "7 Myths of COBOL Debunked". developer.com. Archived from the original on 19 October 2013. Retrieved 2013-10-19.
  67. Nicholas Enticknap. "एसएसएल/कंप्यूटर साप्ताहिक आईटी वेतन सर्वेक्षण: वित्तीय उछाल से आईटी रोजगार में वृद्धि होती है". Computer Weekly. Archived from the original on 26 October 2011. Retrieved 2013-06-14.
  68. "पुस्तक बिक्री द्वारा प्रोग्रामिंग भाषाओं की गणना करना". Radar.oreilly.com. 2 August 2006. Archived from the original on 17 May 2008.
  69. Bieman, J.M.; Murdock, V., Finding code on the World Wide Web: a preliminary investigation, Proceedings First IEEE International Workshop on Source Code Analysis and Manipulation, 2001
  70. "2018 की सबसे लोकप्रिय और प्रभावशाली प्रोग्रामिंग भाषाएँ". stackify.com. 2017-12-18. Retrieved 2018-08-29.
  71. "धाराप्रवाह पायथन दूसरा संस्करण". Thoughtworks (in English). Retrieved 2022-10-11.
  72. Carl A. Gunter, Semantics of Programming Languages: Structures and Techniques, MIT Press, 1992, ISBN 0-262-57095-5, p. 1
  73. "ट्यून्स: प्रोग्रामिंग लैंग्वेज". Archived from the original on 20 October 2007.
  74. Wirth, Niklaus (1993). "Recollections about the development of Pascal". प्रोग्रामिंग भाषाओं के इतिहास पर दूसरा ACM SIGPLAN सम्मेलन - HOPL-II. pp. 333–342. CiteSeerX 10.1.1.475.6989. doi:10.1145/154766.155378. ISBN 978-0-89791-570-0. S2CID 9783524. {{cite book}}: |journal= ignored (help)


अग्रिम पठन


इस पेज में लापता आंतरिक लिंक की सूची

  • सोर्स कोड
  • सिंटेक्स (प्रोग्रामिंग लैंग्वेज)
  • सिमेंटिक (कंप्यूटर विज्ञान)
  • संदर्भ कार्यान्वयन
  • अंतरराष्ट्रीय मानकीकरण संगठन
  • गणना का सिद्धांत
  • मार्कअप लैंग्वेज
  • बहाव को काबू करें
  • अमूर्त (कंप्यूटर विज्ञान)
  • निर्देश समूह वास्तुकला
  • उच्च स्तरीय प्रोग्रामिंग लैंग्वेज
  • सभा की लैंग्वेज
  • लघु कोड (कंप्यूटर लैंग्वेज)
  • उच्च स्तरीय लैंग्वेज
  • उच्च निष्पादन कंप्यूटिंग
  • शीर्ष 500
  • छोटी बात
  • ऑब्जेक्ट ओरिएंटेड कार्यकर्म
  • टाइप सिस्टम
  • एसीएम का संचार
  • प्रतिनिधिमंडल (प्रोग्रामिंग)
  • चौथी पीढ़ी की प्रोग्रामिंग लैंग्वेज
  • एस्पेक्ट आधारित प्रोग्रामिंग
  • पायथन (प्रोग्रामिंग लैंग्वेज)
  • संदर्भ मुक्त व्याकरण
  • अच्छे प्रकार से निर्मित
  • रंगहीन हरे विचार सो जाते हैं
  • नल पॉइंटर
  • बयान (कंप्यूटर विज्ञान)
  • एक्सेप्शन हेंडलिंग
  • शाब्दिक स्ट्रिंग
  • घोषणा (कंप्यूटर विज्ञान)
  • रन टाइम (प्रोग्राम जीवनचक्र चरण)
  • दृढ़ता से टाइप की गई प्रोग्रामिंग लैंग्वेज
  • अनाम समारोह
  • लैंग्वेज का अंकन
  • ओरेकल कॉर्पोरेशन
  • सत्र (कंप्यूटर विज्ञान)
  • आर (प्रोग्रामिंग लैंग्वेज)
  • डेटा विनिमय लैंग्वेज
  • बेसिक उपभाषा की सूची
  • थ्रेड (कंप्यूटर विज्ञान)
  • सामान्य प्रयोजन प्रोग्रामिंग लैंग्वेज
  • लैंग्वेज-ओरिएंटेड प्रोग्रामिंग
  • अधिकांश लोकप्रिय वेबसाइटों में उपयोग की जाने वाली प्रोग्रामिंग लैंग्वेज
  • प्रोग्रामिंग लैंग्वेजों की तुलना (मूल निर्देश)

बाह्य संबंध