एक प्रोग्रामिंग भाषा एक औपचारिक भाषा है जिसमें स्ट्रिंग्स का एक सेट होता है जो विभिन्न प्रकार के मशीन कोड आउटपुट उत्पन्न करता है । प्रोग्रामिंग भाषाएं एक प्रकार की
कंप्यूटर भाषा हैं , और एल्गोरिदम को लागू करने के लिए कंप्यूटर प्रोग्रामिंग में उपयोग की जाती हैं । अधिकांश प्रोग्रामिंग भाषाओं में कंप्यूटर के लिए निर्देश होते हैं । प्रोग्राम करने योग्य मशीनें हैं जो सामान्य प्रोग्रामिंग भाषाओं के बजाय विशिष्ट निर्देशों के एक सेट का उपयोग करती हैं । 1800 के दशक की शुरुआत से, मशीनों के व्यवहार को निर्देशित करने के लिए कार्यक्रमों का उपयोग किया गया है जैसे कि जैक्वार्ड लूम्स , म्यूजिक बॉक्स और प्लेयर पियानो । [१] इन मशीनों के लिए प्रोग्राम (जैसे कि एक प्लेयर पियानो के स्क्रॉल) ने अलग-अलग इनपुट या शर्तों के जवाब में अलग-अलग व्यवहार नहीं किया। हजारों अलग-अलग प्रोग्रामिंग भाषाएं बनाई गई हैं, और हर साल अधिक बनाई जा रही हैं। कई प्रोग्रामिंग भाषाएं अनिवार्य रूप में लिखी जाती हैं (यानी, प्रदर्शन करने के लिए संचालन के अनुक्रम के रूप में) जबकि अन्य भाषाएं घोषणात्मक रूप का उपयोग करती हैं (अर्थात वांछित परिणाम निर्दिष्ट किया जाता है, न कि इसे कैसे प्राप्त किया जाए)। एक प्रोग्रामिंग भाषा का विवरण आमतौर पर वाक्य रचना (रूप) और शब्दार्थ (अर्थ) के दो घटकों में विभाजित होता है । कुछ भाषाओं को एक विनिर्देश दस्तावेज़ द्वारा परिभाषित किया जाता है (उदाहरण के लिए, सी प्रोग्रामिंग भाषा एक आईएसओ मानक द्वारा निर्दिष्ट की जाती है ) जबकि अन्य भाषाओं (जैसे पर्ल ) में एक प्रमुख कार्यान्वयन होता है जिसे संदर्भ के रूप में माना जाता है । कुछ भाषाओं में दोनों होते हैं, मूल भाषा मानक द्वारा परिभाषित होती है और प्रभावी कार्यान्वयन से लिए गए एक्सटेंशन सामान्य होते हैं। प्रोग्रामिंग भाषा सिद्धांत कंप्यूटर विज्ञान का एक उपक्षेत्र है जो प्रोग्रामिंग भाषाओं के डिजाइन, कार्यान्वयन, विश्लेषण, लक्षण वर्णन और वर्गीकरण से संबंधित है। परिभाषाएंएक प्रोग्रामिंग भाषा लिखने के लिए एक अंकन है कार्यक्रमों है, जो एक गणना या के विनिर्देशों हैं एल्गोरिथ्म । [२] कुछ लेखक "प्रोग्रामिंग भाषा" शब्द को उन भाषाओं तक सीमित रखते हैं जो सभी संभावित एल्गोरिदम को व्यक्त कर सकती हैं। [२] [३] एक प्रोग्रामिंग भाषा के गठन के लिए अक्सर महत्वपूर्ण माने जाने वाले लक्षणों में शामिल हैं: कार्य और लक्ष्य एक कंप्यूटर प्रोग्रामिंग भाषा एक है भाषा लिखने के लिए इस्तेमाल किया कंप्यूटर प्रोग्राम है, जो एक शामिल कंप्यूटर गणना किसी तरह का प्रदर्शन [4] या एल्गोरिथ्म और संभवतः जैसे बाह्य उपकरणों को नियंत्रित प्रिंटर , डिस्क ड्राइव , रोबोट , [5] और इतने पर। उदाहरण के लिए, कंप्यूटर प्रिंटर या डिस्प्ले को नियंत्रित करने के लिए किसी अन्य प्रोग्राम द्वारा पोस्टस्क्रिप्ट प्रोग्राम अक्सर बनाए जाते हैं। अधिक सामान्यतः, एक प्रोग्रामिंग भाषा कुछ, संभवतः अमूर्त, मशीन पर गणना का वर्णन कर सकती है। यह आम तौर पर स्वीकार किया जाता है कि एक प्रोग्रामिंग भाषा के लिए एक पूर्ण विनिर्देश में उस भाषा के लिए एक मशीन या प्रोसेसर का विवरण, संभवतः आदर्शीकृत, शामिल होता है। [६] अधिकांश व्यावहारिक संदर्भों में, प्रोग्रामिंग भाषा में एक कंप्यूटर शामिल होता है; नतीजतन, प्रोग्रामिंग भाषाओं को आमतौर पर इस तरह परिभाषित और अध्ययन किया जाता है। [७] प्रोग्रामिंग भाषाएं प्राकृतिक भाषाओं से इस मायने में भिन्न हैं कि प्राकृतिक भाषाओं का उपयोग केवल लोगों के बीच बातचीत के लिए किया जाता है, जबकि प्रोग्रामिंग भाषाएं भी मनुष्यों को मशीनों को निर्देश संप्रेषित करने की अनुमति देती हैं। कपोल-कल्पना प्रोग्रामिंग भाषाओं में आमतौर पर डेटा संरचनाओं को परिभाषित करने और उनमें हेरफेर करने या निष्पादन के प्रवाह को नियंत्रित करने के लिए सार होते हैं । व्यावहारिक आवश्यकता है कि एक प्रोग्रामिंग भाषा पर्याप्त अमूर्तता का समर्थन करती है, अमूर्त सिद्धांत द्वारा व्यक्त की जाती है । [८] इस सिद्धांत को कभी-कभी इस तरह के सार का उचित उपयोग करने के लिए प्रोग्रामर की सिफारिश के रूप में तैयार किया जाता है। [९] अभिव्यंजक शक्ति संगणना का सिद्धांत भाषाओं को उन संगणनाओं द्वारा वर्गीकृत करता है जिन्हें वे व्यक्त करने में सक्षम हैं। सभी ट्यूरिंग-पूर्ण भाषाएं एल्गोरिदम के समान सेट को लागू कर सकती हैं । ANSI/ISO SQL-92 और चैरिटी उन भाषाओं के उदाहरण हैं जो ट्यूरिंग पूर्ण नहीं हैं, फिर भी अक्सर प्रोग्रामिंग भाषा कहलाती हैं। [१०] [११]XML , HTML , या troff जैसी मार्कअप भाषाएं , जो संरचित डेटा को परिभाषित करती हैं, को आमतौर पर प्रोग्रामिंग भाषा नहीं माना जाता है। [१२] [१३] [१४] हालांकि, प्रोग्रामिंग भाषाएं सिंटैक्स को मार्कअप भाषाओं के साथ साझा कर सकती हैं यदि एक कम्प्यूटेशनल शब्दार्थ परिभाषित किया गया है। एक्सएसएलटी , उदाहरण के लिए, पूरी तरह से एक्सएमएल सिंटैक्स का उपयोग कर एक ट्यूरिंग पूर्ण भाषा है। [१५] [१६] [१७] इसके अलावा, LaTeX , जिसका उपयोग ज्यादातर दस्तावेजों की संरचना के लिए किया जाता है, में एक ट्यूरिंग पूर्ण उपसमुच्चय भी होता है। [१८] [१९] कंप्यूटर भाषा शब्द को कभी-कभी प्रोग्रामिंग भाषा के साथ एक दूसरे के स्थान पर प्रयोग किया जाता है। [२०] हालांकि, दोनों शब्दों का उपयोग लेखकों के बीच भिन्न होता है, जिसमें प्रत्येक का सटीक दायरा भी शामिल है। एक प्रयोग प्रोग्रामिंग भाषाओं को कंप्यूटर भाषाओं के सबसेट के रूप में वर्णित करता है। [२१] इसी तरह, कंप्यूटिंग में उपयोग की जाने वाली भाषाएँ जिनका लक्ष्य कंप्यूटर प्रोग्रामों को व्यक्त करने से भिन्न होता है, सामान्य रूप से निर्दिष्ट कंप्यूटर भाषाएँ हैं। उदाहरण के लिए, मार्कअप भाषाओं को कभी-कभी कंप्यूटर भाषा के रूप में संदर्भित किया जाता है ताकि इस बात पर जोर दिया जा सके कि उनका उपयोग प्रोग्रामिंग के लिए नहीं किया गया है। [22] एक अन्य उपयोग प्रोग्रामिंग भाषाओं को प्रोग्रामिंग अमूर्त मशीनों के लिए सैद्धांतिक निर्माण के रूप में मानता है , और कंप्यूटर भाषाओं को उसके सबसेट के रूप में मानता है जो भौतिक कंप्यूटर पर चलता है, जिसमें सीमित हार्डवेयर संसाधन होते हैं। [२३] जॉन सी. रेनॉल्ड्स इस बात पर जोर देते हैं कि औपचारिक विनिर्देश भाषाएं उतनी ही प्रोग्रामिंग भाषाएं हैं जितनी कि निष्पादन के लिए लक्षित भाषाएं हैं। उनका यह भी तर्क है कि कंप्यूटर के व्यवहार को प्रभावित करने वाले टेक्स्ट और यहां तक कि ग्राफिकल इनपुट प्रारूप प्रोग्रामिंग भाषाएं हैं, इस तथ्य के बावजूद कि वे आमतौर पर ट्यूरिंग-पूर्ण नहीं हैं, और टिप्पणी करते हैं कि प्रोग्रामिंग भाषा अवधारणाओं की अज्ञानता इनपुट प्रारूपों में कई दोषों का कारण है। [24] इतिहासप्रारंभिक विकासबहुत प्रारंभिक कंप्यूटर, जैसे कि कोलोसस , को उनके सर्किटरी को संशोधित करके या भौतिक नियंत्रण के बैंकों को सेट करके, एक संग्रहीत प्रोग्राम की सहायता के बिना प्रोग्राम किया गया था। थोड़ी देर बाद, प्रोग्राम मशीनी भाषा में लिखे जा सकते हैं , जहां प्रोग्रामर प्रत्येक निर्देश को संख्यात्मक रूप में लिखता है जिसे हार्डवेयर सीधे निष्पादित कर सकता है। उदाहरण के लिए, दो मेमोरी स्थानों में मान जोड़ने के निर्देश में 3 नंबर शामिल हो सकते हैं: एक "ऑपकोड" जो "ऐड" ऑपरेशन और दो मेमोरी लोकेशन का चयन करता है। प्रोग्राम, दशमलव या बाइनरी रूप में, कंप्यूटर के फ्रंट पैनल पर पंच कार्ड , पेपर टेप, मैग्नेटिक टेप या टॉगल ऑन स्विच से पढ़े जाते थे । मशीनी भाषाओं को बाद में पहली पीढ़ी की प्रोग्रामिंग भाषा (1GL) कहा गया। अगला कदम तथाकथित दूसरी पीढ़ी की प्रोग्रामिंग भाषाओं (2GL) या असेंबली भाषाओं का विकास था , जो अभी भी विशिष्ट कंप्यूटर के निर्देश सेट आर्किटेक्चर से निकटता से जुड़े हुए थे । ये कार्यक्रम को और अधिक मानव-पठनीय बनाने के लिए कार्य करते थे और प्रोग्रामर को थकाऊ और त्रुटि-प्रवण पता गणनाओं से राहत देते थे। पहली उच्च-स्तरीय प्रोग्रामिंग भाषाएँ , या तीसरी पीढ़ी की प्रोग्रामिंग भाषाएँ (3GL), 1950 के दशक में लिखी गई थीं। कंप्यूटर के लिए डिजाइन की जाने वाली एक प्रारंभिक उच्च स्तरीय प्रोग्रामिंग भाषा प्लांकलकुल थी , जिसे 1943 और 1945 के बीच कोनराड ज़ूस द्वारा जर्मन Z3 के लिए विकसित किया गया था । हालांकि, इसे 1998 और 2000 तक लागू नहीं किया गया था। [25] 1949 में प्रस्तावित जॉन मौचली का शॉर्ट कोड , इलेक्ट्रॉनिक कंप्यूटर के लिए विकसित की गई पहली उच्च-स्तरीय भाषाओं में से एक थी । [२६] मशीन कोड के विपरीत , शॉर्ट कोड स्टेटमेंट गणितीय अभिव्यक्तियों को समझने योग्य रूप में दर्शाते हैं। हालाँकि, प्रोग्राम को हर बार चलने पर मशीन कोड में अनुवाद करना पड़ता था, जिससे प्रक्रिया समान मशीन कोड को चलाने की तुलना में बहुत धीमी हो जाती थी। पर मैनचेस्टर विश्वविद्यालय , एलिक ग्लेनी विकसित Autocode 1950 के दशक में। एक प्रोग्रामिंग भाषा के रूप में , इसने भाषा को मशीन कोड में स्वचालित रूप से परिवर्तित करने के लिए एक कंपाइलर का उपयोग किया । पहला कोड और कंपाइलर 1952 में मैनचेस्टर विश्वविद्यालय में मार्क 1 कंप्यूटर के लिए विकसित किया गया था और इसे पहली संकलित उच्च-स्तरीय प्रोग्रामिंग भाषा माना जाता है । [27] [28] दूसरा ऑटोकोड 1954 में आरए ब्रूकर द्वारा मार्क 1 के लिए विकसित किया गया था और इसे "मार्क 1 ऑटोकोड" कहा जाता था। ब्रूकर ने 1950 के दशक में मैनचेस्टर विश्वविद्यालय के साथ मिलकर फेरांती मर्करी के लिए एक ऑटोकोड भी विकसित किया । के लिए संस्करण एडसैक 2 द्वारा तैयार किया गया था DF हार्टले की कैम्ब्रिज गणितीय प्रयोगशाला विश्वविद्यालय 1961 एडसैक 2 Autocode रूप में जाना जाता है, यह बुध Autocode से एक सीधी विकास स्थानीय परिस्थितियों के लिए अनुकूलित और उसके ऑब्जेक्ट कोड अनुकूलन और स्रोत-भाषा के लिए उल्लेख किया गया था निदान जो उस समय के लिए उन्नत थे। मैनचेस्टर एटलस 1 मशीन के विश्वविद्यालय के लिए एक समकालीन लेकिन विकास का अलग धागा, एटलस ऑटोकोड विकसित किया गया था । 1954 में, जॉन बैकस द्वारा आईबीएम में फोरट्रान का आविष्कार किया गया था । कागज पर सिर्फ एक डिजाइन के विपरीत, कार्यात्मक कार्यान्वयन के लिए यह पहली व्यापक रूप से इस्तेमाल की जाने वाली उच्च-स्तरीय सामान्य प्रयोजन प्रोग्रामिंग भाषा थी। [२९] [३०] यह अभी भी उच्च-प्रदर्शन कंप्यूटिंग के लिए एक लोकप्रिय भाषा है [३१] और इसका उपयोग उन कार्यक्रमों के लिए किया जाता है जो दुनिया के सबसे तेज सुपर कंप्यूटरों को बेंचमार्क और रैंक करते हैं । [32] अमेरिका में ग्रेस हॉपर द्वारा एक और प्रारंभिक प्रोग्रामिंग भाषा तैयार की गई , जिसे फ्लो-मैटिक कहा जाता है । यह के लिए विकसित किया गया था UNIVAC मैं पर रेमिंगटन रैंड तक 1959 हूपर ने पाया कि व्यापार डेटा संसाधित ग्राहकों गणितीय संकेतन के साथ असहज थे 1955 से इस अवधि के दौरान, और जल्दी 1955 को, वह और उसकी टीम एक के लिए एक विनिर्देश लिखा अंग्रेजी प्रोग्रामिंग भाषा और कार्यान्वित एक प्रोटोटाइप। [३३] फ्लो-मैटिक कंपाइलर १९५८ की शुरुआत में सार्वजनिक रूप से उपलब्ध हो गया और १९५९ में काफी हद तक पूरा हो गया। [३४] कोबोल के डिजाइन में फ्लो-मैटिक का एक बड़ा प्रभाव था , क्योंकि केवल यह और इसके प्रत्यक्ष वंशज एआईएमएसीओ वास्तविक उपयोग में थे। समय। [35] शोधनउच्च-स्तरीय भाषाओं के बढ़ते उपयोग ने निम्न-स्तरीय प्रोग्रामिंग भाषाओं या सिस्टम प्रोग्रामिंग भाषाओं की आवश्यकता की शुरुआत की । ये भाषाएँ, भिन्न-भिन्न अंशों में, असेम्बली भाषाओं और उच्च-स्तरीय भाषाओं के बीच सुविधाएँ प्रदान करती हैं। उनका उपयोग उन कार्यों को करने के लिए किया जा सकता है जिनके लिए हार्डवेयर सुविधाओं तक सीधी पहुंच की आवश्यकता होती है लेकिन फिर भी उच्च-स्तरीय नियंत्रण संरचनाएं और त्रुटि-जांच प्रदान करते हैं। १९६० के दशक से १९७० के दशक के अंत तक की अवधि में अब उपयोग में आने वाले प्रमुख भाषा प्रतिमानों का विकास हुआ:
इनमें से प्रत्येक भाषा ने वंशजों को जन्म दिया, और अधिकांश आधुनिक प्रोग्रामिंग भाषाओं में से कम से कम एक को उनके वंश में गिना जाता है। 1960 और 1970 के दशक में भी संरचित प्रोग्रामिंग के गुणों पर काफी बहस हुई , और क्या प्रोग्रामिंग भाषाओं को इसका समर्थन करने के लिए डिज़ाइन किया जाना चाहिए। [३८] एड्सगर डिजस्ट्रा ने एसीएम के संचार में प्रकाशित एक प्रसिद्ध १९६८ पत्र में तर्क दिया कि गोटो के बयानों को सभी "उच्च स्तरीय" प्रोग्रामिंग भाषाओं से हटा दिया जाना चाहिए। [39] समेकन और विकासलोकप्रिय और अस्पष्ट दोनों भाषाओं में प्रोग्रामिंग सिखाने वाली पाठ्यपुस्तकों का चयन। ये हजारों प्रोग्रामिंग भाषाओं और बोलियों में से कुछ ही हैं जिन्हें इतिहास में डिजाइन किया गया है। 1980 के दशक सापेक्ष समेकन के वर्ष थे। सी ++ संयुक्त वस्तु-उन्मुख और सिस्टम प्रोग्रामिंग। संयुक्त राज्य सरकार ने एडा को मानकीकृत किया , एक सिस्टम प्रोग्रामिंग भाषा जो पास्कल से ली गई है और रक्षा ठेकेदारों द्वारा उपयोग के लिए अभिप्रेत है। जापान और अन्य जगहों पर, तथाकथित "पांचवीं पीढ़ी" भाषाओं की जांच में बड़ी रकम खर्च की गई, जिसमें तर्क प्रोग्रामिंग संरचनाएं शामिल थीं । [४०] कार्यात्मक भाषा समुदाय एमएल और लिस्प को मानकीकृत करने के लिए चले गए । नए प्रतिमानों का आविष्कार करने के बजाय, इन सभी आंदोलनों ने पिछले दशकों में आविष्कार किए गए विचारों पर विस्तार से बताया। 1980 के दशक के दौरान बड़े पैमाने की प्रणालियों की प्रोग्रामिंग के लिए भाषा डिजाइन में एक महत्वपूर्ण प्रवृत्ति मॉड्यूल या कोड के बड़े पैमाने पर संगठनात्मक इकाइयों के उपयोग पर अधिक ध्यान केंद्रित करना था । 1980 के दशक में मोडुला -2 , एडा और एमएल सभी ने उल्लेखनीय मॉड्यूल सिस्टम विकसित किए, जिन्हें अक्सर सामान्य प्रोग्रामिंग निर्माणों से जोड़ा जाता था। [41] 1990 के दशक के मध्य में इंटरनेट के तीव्र विकास ने नई भाषाओं के लिए अवसर पैदा किए। पर्ल , मूल रूप से एक यूनिक्स स्क्रिप्टिंग उपकरण है जो पहली बार 1987 में जारी किया गया था, गतिशील वेबसाइटों में आम हो गया । सर्वर-साइड प्रोग्रामिंग के लिए जावा का उपयोग किया जाने लगा, और बायटेकोड वर्चुअल मशीन व्यावसायिक सेटिंग्स में " एक बार लिखें, कहीं भी चलाएं " के वादे के साथ फिर से लोकप्रिय हो गईं ( यूसीएसडी पास्कल 1980 के दशक की शुरुआत में एक समय के लिए लोकप्रिय था)। ये घटनाक्रम मौलिक रूप से उपन्यास नहीं थे; बल्कि, वे कई मौजूदा भाषाओं और प्रतिमानों के परिशोधन थे (हालांकि उनका वाक्यविन्यास अक्सर प्रोग्रामिंग भाषाओं के सी परिवार पर आधारित होता था)। उद्योग और अनुसंधान दोनों में प्रोग्रामिंग भाषा का विकास जारी है। वर्तमान दिशाओं सुरक्षा और शामिल विश्वसनीयता सत्यापन , प्रतिरूपकता नए प्रकार ( mixins , प्रतिनिधियों , पहलुओं जैसे कि माइक्रोसॉफ्ट के रूप में), और डेटाबेस एकीकरण LINQ । चौथी पीढ़ी की प्रोग्रामिंग भाषाएं (4GL) कंप्यूटर प्रोग्रामिंग भाषाएं हैं जिनका उद्देश्य 3GL की तुलना में आंतरिक कंप्यूटर हार्डवेयर विवरण का उच्च स्तर का अमूर्तन प्रदान करना है। पांचवीं पीढ़ी की प्रोग्रामिंग भाषाएं (5GL)एक प्रोग्रामर द्वारा लिखित एल्गोरिथम का उपयोग करने के बजाय, प्रोग्राम को दी गई बाधाओं का उपयोग करके समस्याओं को हल करने पर आधारित प्रोग्रामिंग भाषाएं हैं। तत्वोंसभी प्रोग्रामिंग भाषाओं में डेटा के विवरण और उन पर लागू होने वाली प्रक्रियाओं या परिवर्तनों के लिए कुछ आदिम बिल्डिंग ब्लॉक होते हैं (जैसे दो संख्याओं को जोड़ना या संग्रह से किसी आइटम का चयन)। इन आदिमों को वाक्यात्मक और शब्दार्थ नियमों द्वारा परिभाषित किया जाता है जो क्रमशः उनकी संरचना और अर्थ का वर्णन करते हैं। वाक्य - विन्यासइनसेट टोकननाइजेशन के साथ पायथन कोड का पार्स ट्री स्रोत कोड के तत्वों को पहचानने में प्रोग्रामर की सहायता के लिए अक्सर सिंटैक्स हाइलाइटिंग का उपयोग किया जाता है। उपरोक्त भाषा पायथन है । एक प्रोग्रामिंग भाषा के सतही रूप को इसके सिंटैक्स के रूप में जाना जाता है । अधिकांश प्रोग्रामिंग भाषाएं विशुद्ध रूप से पाठ्य हैं; वे लिखित प्राकृतिक भाषाओं की तरह शब्दों, संख्याओं और विराम चिह्नों सहित पाठ के अनुक्रमों का उपयोग करते हैं। दूसरी ओर, कुछ प्रोग्रामिंग भाषाएं हैं जो एक प्रोग्राम को निर्दिष्ट करने के लिए प्रतीकों के बीच दृश्य संबंधों का उपयोग करते हुए प्रकृति में अधिक ग्राफिकल हैं । किसी भाषा का वाक्य-विन्यास प्रतीकों के संभावित संयोजनों का वर्णन करता है जो वाक्य-रचना की दृष्टि से सही प्रोग्राम बनाते हैं। प्रतीकों के संयोजन को दिए गए अर्थ को शब्दार्थ (या तो औपचारिक या संदर्भ कार्यान्वयन में हार्ड-कोडेड ) द्वारा नियंत्रित किया जाता है । चूंकि अधिकांश भाषाएं टेक्स्टुअल हैं, इसलिए यह आलेख टेक्स्ट सिंटैक्स पर चर्चा करता है। प्रोग्रामिंग लैंग्वेज सिंटैक्स को आमतौर पर रेगुलर एक्सप्रेशन ( लेक्सिकल स्ट्रक्चर के लिए) और बैकस-नौर फॉर्म ( व्याकरणिक स्ट्रक्चर के लिए) के संयोजन का उपयोग करके परिभाषित किया जाता है । लिस्प पर आधारित एक सरल व्याकरण नीचे दिया गया है : अभिव्यक्ति ::= परमाणु | सूचीपरमाणु ::= संख्या | प्रतीकसंख्या ::= [+-]?['0'-'9']+प्रतीक ::= ['ए'-'जेड''ए'-'जेड']।*सूची ::= '(' अभिव्यक्ति * ')' यह व्याकरण निम्नलिखित निर्दिष्ट करता है:
इस व्याकरण में अच्छी तरह से गठित टोकन अनुक्रमों के उदाहरण निम्नलिखित हैं: सभी वाक्य रचनात्मक रूप से सही कार्यक्रम शब्दार्थ रूप से सही नहीं हैं। भाषा के नियमों के अनुसार, कई वाक्यात्मक रूप से सही प्रोग्राम फिर भी गलत तरीके से बनाए गए हैं; और (भाषा विनिर्देश और कार्यान्वयन की सुदृढ़ता के आधार पर) अनुवाद या निष्पादन में त्रुटि का परिणाम हो सकता है। कुछ मामलों में, ऐसे कार्यक्रम अपरिभाषित व्यवहार प्रदर्शित कर सकते हैं । यहां तक कि जब कोई प्रोग्राम किसी भाषा के भीतर अच्छी तरह से परिभाषित होता है, तब भी इसका एक अर्थ हो सकता है जो इसे लिखने वाले व्यक्ति द्वारा अभिप्रेत नहीं है। एक उदाहरण के रूप में प्राकृतिक भाषा का प्रयोग करना , व्याकरणिक रूप से सही वाक्य को अर्थ निर्दिष्ट करना संभव नहीं हो सकता है या वाक्य गलत हो सकता है:
निम्नलिखित सी भाषा टुकड़ा वाक्य रचना सही है, लेकिन प्रदर्शन के संचालन कि अर्थ की दृष्टि से परिभाषित नहीं कर रहे हैं (आपरेशन जटिल * पी = न्यूल ; जटिल abs_p = sqrt ( * p >> 4 + p -> im ); यदि पहली पंक्ति पर प्रकार की घोषणा को छोड़ दिया गया था, तो प्रोग्राम संकलन के दौरान अपरिभाषित चर "पी" पर एक त्रुटि को ट्रिगर करेगा। हालांकि, प्रोग्राम अभी भी वाक्य रचनात्मक रूप से सही होगा क्योंकि प्रकार की घोषणाएं केवल अर्थ संबंधी जानकारी प्रदान करती हैं। प्रोग्रामिंग भाषा को निर्दिष्ट करने के लिए आवश्यक व्याकरण को चॉम्स्की पदानुक्रम में अपनी स्थिति के आधार पर वर्गीकृत किया जा सकता है । अधिकांश प्रोग्रामिंग भाषाओं के सिंटैक्स को टाइप -2 व्याकरण का उपयोग करके निर्दिष्ट किया जा सकता है, अर्थात, वे संदर्भ-मुक्त व्याकरण हैं । [४२] पर्ल और लिस्प सहित कुछ भाषाओं में ऐसे
निर्माण होते हैं जो पार्सिंग चरण के दौरान निष्पादन की अनुमति देते हैं। जिन भाषाओं में रचनाएँ होती हैं जो प्रोग्रामर को पार्सर के व्यवहार को बदलने की अनुमति देती हैं, वाक्य रचना विश्लेषण को एक अपरिहार्य समस्या बनाती हैं , और आम तौर पर पार्सिंग और निष्पादन के बीच के अंतर को धुंधला करती हैं। [४३] लिस्प के मैक्रो सिस्टम और पर्ल के अर्थ विज्ञानशब्दार्थ शब्द का अर्थ भाषाओं के अर्थ से है, उनके रूप ( वाक्यविन्यास ) के विपरीत । स्थिर शब्दार्थस्थैतिक शब्दार्थ मान्य ग्रंथों की संरचना पर प्रतिबंधों को परिभाषित करता है जो मानक वाक्यात्मक औपचारिकताओं में व्यक्त करना कठिन या असंभव है। [२] संकलित भाषाओं के लिए, स्थैतिक शब्दार्थ में अनिवार्य रूप से वे शब्दार्थ नियम शामिल होते हैं जिन्हें संकलन समय पर जाँचा जा सकता है। उदाहरणों में यह जांचना शामिल है कि प्रत्येक पहचानकर्ता को उपयोग करने से पहले घोषित किया जाता है (उन भाषाओं में जिन्हें इस तरह की घोषणाओं की आवश्यकता होती है) या केस स्टेटमेंट की बाहों पर लेबल अलग होते हैं। [४५] इस प्रकार के कई महत्वपूर्ण प्रतिबंध, जैसे कि पहचानकर्ताओं का उपयुक्त संदर्भ में उपयोग किया जाता है (उदाहरण के लिए किसी फ़ंक्शन नाम में पूर्णांक नहीं जोड़ना), या यह कि सबरूटीन कॉल में उपयुक्त संख्या और प्रकार के तर्क हैं, को परिभाषित करके लागू किया जा सकता है उन्हें एक तर्क में नियम के रूप में कहा जाता है जिसे एक प्रकार प्रणाली कहा जाता है । डेटा प्रवाह विश्लेषण जैसे स्थिर विश्लेषण के अन्य रूप भी स्थिर शब्दार्थ का हिस्सा हो सकते हैं। की तरह नई प्रोग्रामिंग भाषाओं जावा और सी # है निश्चित काम विश्लेषण , डेटा के एक फार्म प्रवाह विश्लेषण, उनके स्थिर अर्थ विज्ञान के भाग के रूप। गतिशील शब्दार्थएक बार डेटा निर्दिष्ट हो जाने के बाद, मशीन को डेटा पर संचालन करने के लिए निर्देश दिया जाना चाहिए। उदाहरण के लिए, शब्दार्थ उस रणनीति को परिभाषित कर सकता है जिसके द्वारा भावों का मूल्यांकन मूल्यों के लिए किया जाता है, या जिस तरीके से नियंत्रण संरचनाएं सशर्त रूप से बयानों को निष्पादित करती हैं । किसी भाषा का गतिशील शब्दार्थ ( निष्पादन शब्दार्थ के रूप में भी जाना जाता है ) परिभाषित करता है कि किसी भाषा के विभिन्न निर्माणों को कैसे और कब प्रोग्राम व्यवहार का उत्पादन करना चाहिए। निष्पादन शब्दार्थ को परिभाषित करने के कई तरीके हैं। आमतौर पर व्यवहार में उपयोग की जाने वाली भाषाओं के निष्पादन शब्दार्थ को निर्दिष्ट करने के लिए प्राकृतिक भाषा का उपयोग अक्सर किया जाता है। एक महत्वपूर्ण मात्रा में अकादमिक शोध प्रोग्रामिंग भाषाओं के औपचारिक शब्दार्थ में चला गया , जो निष्पादन शब्दार्थ को औपचारिक तरीके से निर्दिष्ट करने की अनुमति देता है। शोध के इस क्षेत्र के परिणामों ने प्रोग्रामिंग भाषा के डिजाइन और अकादमिक के बाहर कार्यान्वयन के लिए सीमित आवेदन देखा है। सिस्टम टाइप करेंएक प्रकार की प्रणाली परिभाषित करती है कि कैसे एक प्रोग्रामिंग भाषा मूल्यों और अभिव्यक्तियों को प्रकारों में वर्गीकृत करती है , यह कैसे उन प्रकारों में हेरफेर कर सकती है और वे कैसे बातचीत करते हैं। एक प्रकार की प्रणाली का लक्ष्य कुछ गलत संचालनों का पता लगाकर उस भाषा में लिखे गए कार्यक्रमों में एक निश्चित स्तर की शुद्धता को सत्यापित करना और आम तौर पर लागू करना है। किसी भी निर्णायक प्रकार की प्रणाली में एक ट्रेड-ऑफ शामिल होता है: हालांकि यह कई गलत कार्यक्रमों को अस्वीकार करता है, यह कुछ सही, हालांकि असामान्य कार्यक्रमों को भी प्रतिबंधित कर सकता है। इस नकारात्मक पक्ष को बायपास करने के लिए, कई भाषाओं में टाइप कमियां हैं , आमतौर पर अनियंत्रित कास्ट जो प्रोग्रामर द्वारा विभिन्न प्रकारों के बीच सामान्य रूप से अस्वीकृत संचालन को स्पष्ट रूप से अनुमति देने के लिए उपयोग किया जा सकता है। अधिकांश टाइप की गई भाषाओं में, टाइप सिस्टम का उपयोग केवल चेक प्रोग्राम टाइप करने के लिए किया जाता है , लेकिन कई भाषाएं, आमतौर पर कार्यात्मक, अनुमान प्रकार , प्रोग्रामर को टाइप एनोटेशन लिखने की आवश्यकता से राहत देती हैं। टाइप सिस्टम के औपचारिक डिजाइन और अध्ययन को टाइप थ्योरी के रूप में जाना जाता है । टाइप की गई बनाम अलिखित भाषाएंएक भाषा टाइप की जाती है यदि प्रत्येक ऑपरेशन का विनिर्देश डेटा के प्रकार को परिभाषित करता है जिस पर ऑपरेशन लागू होता है। [४६] उदाहरण के लिए, द्वारा दर्शाया गया डेटा टाइप की गई भाषाओं का एक विशेष मामला एकल-टाइप की गई भाषाएं हैं। ये अक्सर स्क्रिप्टिंग या मार्कअप भाषाएं होती हैं, जैसे कि REXX या SGML , और इनमें केवल एक डेटा प्रकार [ संदिग्ध - चर्चा ] होता है - सबसे सामान्य रूप से वर्ण स्ट्रिंग्स जो प्रतीकात्मक और संख्यात्मक डेटा दोनों के लिए उपयोग की जाती हैं। इसके विपरीत, बिना टाइप की गई भाषा , जैसे कि अधिकांश असेंबली भाषाएं , किसी भी डेटा पर किसी भी ऑपरेशन को करने की अनुमति देती हैं, आम तौर पर विभिन्न लंबाई के बिट्स के अनुक्रम। [४६] उच्च-स्तरीय गैर-टाइप की गई भाषाओं में बीसीपीएल , टीसीएल , और फोर्थ की कुछ किस्में शामिल हैं । व्यवहार में, जबकि कुछ भाषाओं को टाइप थ्योरी से टाइप किया गया माना जाता है (सभी कार्यों को सत्यापित या अस्वीकार करना), अधिकांश आधुनिक भाषाएं टाइपिंग की एक डिग्री प्रदान करती हैं। [४६] कई प्रोडक्शन लैंग्वेज प्रोग्राम के निष्पादन पर बेहतर नियंत्रण के लिए टाइप सिस्टम, ट्रेडिंग टाइप-सेफ्टी को बायपास या सबवर्ट करने के साधन प्रदान करती हैं ( कास्टिंग देखें )। स्थिर बनाम गतिशील टाइपिंगमें स्थिर टाइपिंग , सभी भाव उनके प्रकार, जब कार्यक्रम क्रियान्वित किया जाता है से पहले निर्धारित आम तौर पर संकलन समय पर की है। उदाहरण के लिए, 1 और (2+2) पूर्णांक व्यंजक हैं; उन्हें ऐसे फ़ंक्शन में पास नहीं किया जा सकता है जो एक स्ट्रिंग की अपेक्षा करता है, या एक वेरिएबल में संग्रहीत होता है जिसे तिथियों को पकड़ने के लिए परिभाषित किया जाता है। [46] सांख्यिकीय रूप से टाइप की गई भाषाएं या तो स्पष्ट रूप से टाइप की जा सकती हैं या टाइप-अनुमानित । पहले मामले में, प्रोग्रामर को कुछ पाठ्य पदों पर स्पष्ट रूप से प्रकार लिखना चाहिए (उदाहरण के लिए, चर घोषणाओं पर )। दूसरे मामले में, संकलक संदर्भ के आधार पर अभिव्यक्तियों और घोषणाओं के प्रकारों का अनुमान लगाता है। अधिकांश मुख्यधारा की सांख्यिकीय रूप से टाइप की जाने वाली भाषाएँ, जैसे C++ , C# और Java , स्पष्ट रूप से टाइप की जाती हैं। पूर्ण प्रकार का अनुमान परंपरागत रूप से कम मुख्यधारा की भाषाओं से जुड़ा हुआ है, जैसे हास्केल और एमएल । हालांकि, कई स्पष्ट रूप से टाइप की गई भाषाएं आंशिक प्रकार के अनुमान का समर्थन करती हैं; उदाहरण के लिए, सी ++ , जावा और सी # कुछ सीमित मामलों में सभी प्रकार के अनुमान लगाते हैं। [४७] इसके अतिरिक्त, कुछ प्रोग्रामिंग भाषाएं कुछ प्रकारों को स्वचालित रूप से अन्य प्रकारों में परिवर्तित करने की अनुमति देती हैं; उदाहरण के लिए, एक int का उपयोग किया जा सकता है जहां प्रोग्राम एक फ्लोट की अपेक्षा करता है। गतिशील टाइपिंग , जिसे गुप्त टाइपिंग भी कहा जाता है, रन टाइम पर संचालन की प्रकार-सुरक्षा निर्धारित करता है; दूसरे शब्दों में, प्रकार पाठ्य अभिव्यक्तियों के बजाय रन-टाइम मानों सेजुड़े होते हैं। [४६] टाइप-अनुमानित भाषाओं की तरह, गतिशील रूप से टाइप की गई भाषाओं के लिए प्रोग्रामर को एक्सप्रेशन पर स्पष्ट टाइप एनोटेशन लिखने की आवश्यकता नहीं होती है। अन्य बातों के अलावा, यह एक एकल चर को कार्यक्रम के निष्पादन में विभिन्न बिंदुओं पर विभिन्न प्रकार के मूल्यों को संदर्भित करने की अनुमति दे सकता है। हालांकि,जब तक कोड का एक टुकड़ा वास्तव में निष्पादित नहीं किया जाता है, तब तकटाइप त्रुटियों का स्वचालित रूप से पता नहीं लगाया जा सकता है, संभावित रूप से डीबगिंग को और अधिक कठिनबना देताहै। लिस्प , स्मॉलटाक , पर्ल , पायथन , जावास्क्रिप्ट और रूबी गतिशील रूप से टाइप की जाने वाली भाषाओं के सभी उदाहरण हैं। कमजोर और मजबूत टाइपिंगकमजोर टाइपिंग एक प्रकार के मान को दूसरे के रूप में मानने की अनुमति देती है, उदाहरण के लिए एक स्ट्रिंग को एक संख्या के रूप में मानना। [४६] यह कभी-कभी उपयोगी हो सकता है, लेकिन यह कुछ प्रकार के प्रोग्राम दोषों को संकलन समय पर और यहां तक कि रन टाइम पर भीअनदेखा कर सकता है । मजबूत टाइपिंग इन प्रोग्राम दोषों को रोकता है। गलत प्रकार के मान पर एक ऑपरेशन करने का प्रयास एक त्रुटि उत्पन्न करता है। [४६] सशक्त रूप से टाइप की जाने वाली भाषाओं को अक्सर सुरक्षित या सुरक्षित कहा जाता है। "कमजोर टाइप" के लिए एक वैकल्पिक परिभाषा पर्ल और जावास्क्रिप्ट जैसी भाषाओं को संदर्भित करती है , जो बड़ी संख्या में निहित प्रकार के रूपांतरणों की अनुमति देती है। जावास्क्रिप्ट में, उदाहरण के लिए, अभिव्यक्ति कुछ पेशेवर प्रोग्रामर के लिए यह अजीब लग सकता है कि सी "कमजोर, स्थिर रूप से टाइप किया गया" हो सकता है। हालांकि, ध्यान दें कि जेनेरिक पॉइंटर, शून्य * पॉइंटर का उपयोग, स्पष्ट कास्ट करने की आवश्यकता के बिना पॉइंटर्स को अन्य पॉइंटर्स पर कास्टिंग करने की अनुमति देता है। यह किसी भी तरह से स्पष्ट कलाकारों का उपयोग किए बिना सी में किसी भी प्रकार के डेटाटाइप
में बाइट्स की सरणी कास्टिंग करने के समान ही है, जैसे मानक पुस्तकालय और रन-टाइम सिस्टमअधिकांश प्रोग्रामिंग भाषाओं में एक संबद्ध कोर लाइब्रेरी होती है (कभी-कभी 'मानक पुस्तकालय' के रूप में जाना जाता है, खासकर अगर इसे प्रकाशित भाषा मानक के हिस्से के रूप में शामिल किया जाता है), जिसे पारंपरिक रूप से भाषा के सभी कार्यान्वयनों द्वारा उपलब्ध कराया जाता है। मुख्य पुस्तकालयों में आमतौर पर आमतौर पर उपयोग किए जाने वाले एल्गोरिदम, डेटा संरचनाओं और इनपुट और आउटपुट के लिए तंत्र की परिभाषाएं शामिल होती हैं। एक भाषा और उसके मूल पुस्तकालय के बीच की रेखा एक भाषा से दूसरी भाषा में भिन्न होती है। कुछ मामलों में, भाषा डिजाइनर पुस्तकालय को भाषा से अलग इकाई के रूप में मान सकते हैं। हालाँकि, किसी भाषा के मूल पुस्तकालय को अक्सर उसके उपयोगकर्ताओं द्वारा भाषा के हिस्से के रूप में माना जाता है, और कुछ भाषा विनिर्देशों के लिए यह भी आवश्यक है कि यह पुस्तकालय सभी कार्यान्वयनों में उपलब्ध कराया जाए। वास्तव में, कुछ
भाषाओं को इस तरह से डिज़ाइन किया गया है कि कुछ वाक्यात्मक निर्माणों के अर्थों को मूल पुस्तकालय का उल्लेख किए बिना भी वर्णित नहीं किया जा सकता है। उदाहरण के लिए, जावा में , एक स्ट्रिंग अक्षर को डिज़ाइन और सुधारप्रोग्रामिंग भाषाएं संचार के लिए वाहन के रूप में अपने उद्देश्य से संबंधित प्राकृतिक भाषाओं के साथ गुणों को साझा करती हैं, एक वाक्य-विन्यास रूप इसके शब्दार्थ से अलग होता है, और संबंधित भाषाओं के भाषा परिवारों को एक से दूसरे में विभाजित करता है । [५०] [५१] लेकिन कृत्रिम निर्माण के रूप में, वे उपयोग के माध्यम से विकसित होने वाली भाषाओं से मौलिक तरीकों से भी भिन्न हैं। एक महत्वपूर्ण अंतर यह है कि एक प्रोग्रामिंग भाषा को पूरी तरह से वर्णित और अध्ययन किया जा सकता है क्योंकि इसकी एक सटीक और सीमित परिभाषा है। [५२] इसके विपरीत, प्राकृतिक भाषाओं के अलग-अलग समुदायों में उनके उपयोगकर्ताओं द्वारा दिए गए अर्थ बदलते हैं। जबकि निर्मित भाषाएं भी एक विशिष्ट उद्देश्य के साथ जमीन से तैयार की गई कृत्रिम भाषाएं हैं, उनमें एक प्रोग्रामिंग भाषा की सटीक और पूर्ण अर्थ परिभाषा का अभाव है। कई प्रोग्रामिंग भाषाओं को नए सिरे से डिजाइन किया गया है, नई जरूरतों को पूरा करने के लिए बदल दिया गया है, और अन्य भाषाओं के साथ जोड़ा गया है। कई अंततः अनुपयोगी हो गए हैं। यद्यपि एक "सार्वभौमिक" प्रोग्रामिंग भाषा को डिजाइन करने का प्रयास किया गया है जो सभी उद्देश्यों की पूर्ति करता है, वे सभी इस भूमिका को भरने के रूप में आम तौर पर स्वीकार करने में विफल रहे हैं। [५३] विविध प्रोग्रामिंग भाषाओं की आवश्यकता उन संदर्भों की विविधता से उत्पन्न होती है जिनमें भाषाओं का उपयोग किया जाता है:
प्रोग्रामिंग भाषाओं के विकास में एक सामान्य प्रवृत्ति उच्च स्तर के अमूर्तता का उपयोग करके समस्याओं को हल करने की अधिक क्षमता जोड़ना है । प्रारंभिक प्रोग्रामिंग भाषाएं कंप्यूटर के अंतर्निहित हार्डवेयर से बहुत निकट से जुड़ी हुई थीं। जैसे-जैसे नई प्रोग्रामिंग भाषाएं विकसित हुई हैं, ऐसी विशेषताएं जोड़ी गई हैं जो प्रोग्रामर को उन विचारों को व्यक्त करने देती हैं जो सरल अनुवाद से अंतर्निहित हार्डवेयर निर्देशों में अधिक दूरस्थ हैं। क्योंकि प्रोग्रामर कंप्यूटर की जटिलता से कम बंधे होते हैं, उनके प्रोग्राम प्रोग्रामर के कम प्रयास के साथ अधिक कंप्यूटिंग कर सकते हैं। यह उन्हें प्रति समय इकाई अधिक कार्यक्षमता लिखने देता है। [54] प्राकृतिक भाषा प्रोग्रामिंग को प्रोग्रामिंग के लिए एक विशेष भाषा की आवश्यकता को समाप्त करने के तरीके के रूप में प्रस्तावित किया गया है। हालाँकि, यह लक्ष्य दूर रहता है और इसके लाभों पर बहस हो सकती है। Edsger W. Dijkstra ने यह स्थिति ली कि अर्थहीन निर्माणों की शुरूआत को रोकने के लिए औपचारिक भाषा का उपयोग आवश्यक है, और प्राकृतिक भाषा प्रोग्रामिंग को "मूर्खतापूर्ण" के रूप में खारिज कर दिया । [५५] एलन पर्लिस इसी तरह इस विचार को खारिज कर रहे थे। [५६] स्ट्रक्चर्ड इंग्लिश और एसक्यूएल में हाइब्रिड दृष्टिकोण अपनाया गया है । एक भाषा के डिजाइनरों और उपयोगकर्ताओं को प्रोग्रामिंग के अभ्यास को नियंत्रित और सक्षम करने वाली कई कलाकृतियों का निर्माण करना चाहिए। इन कलाकृतियों में सबसे महत्वपूर्ण भाषा विनिर्देश और कार्यान्वयन हैं । विनिर्देशएक प्रोग्रामिंग भाषा की विशिष्टता एक आर्टिफैक्ट है जिसका उपयोग भाषा उपयोगकर्ता और कार्यान्वयनकर्ता इस बात पर सहमत होने के लिए कर सकते हैं कि स्रोत कोड का एक टुकड़ा उस भाषा में एक वैध कार्यक्रम है, और यदि ऐसा है तो उसका व्यवहार क्या होगा। एक प्रोग्रामिंग भाषा विनिर्देश निम्नलिखित सहित कई रूप ले सकता है:
कार्यान्वयनएक प्रोग्रामिंग भाषा का कार्यान्वयन उस भाषा में प्रोग्राम लिखने और उन्हें हार्डवेयर और सॉफ़्टवेयर के एक या अधिक कॉन्फ़िगरेशन पर निष्पादित करने का एक तरीका प्रदान करता है। प्रोग्रामिंग भाषा के कार्यान्वयन के लिए मोटे तौर पर दो दृष्टिकोण हैं: संकलन और व्याख्या । किसी भी तकनीक का उपयोग करके किसी भाषा को लागू करना आम तौर पर संभव है। कंपाइलर का आउटपुट हार्डवेयर या दुभाषिया नामक प्रोग्राम द्वारा निष्पादित किया जा सकता है। कुछ कार्यान्वयनों में जो दुभाषिया दृष्टिकोण का उपयोग करते हैं, संकलन और व्याख्या के बीच कोई अलग सीमा नहीं है। उदाहरण के लिए, बेसिक के कुछ कार्यान्वयन संकलित करते हैं और फिर एक समय में स्रोत को एक पंक्ति में निष्पादित करते हैं। प्रोग्राम जो सीधे हार्डवेयर पर निष्पादित होते हैं, आमतौर पर सॉफ़्टवेयर में व्याख्या किए गए प्रोग्राम की तुलना में बहुत तेज़ चलते हैं। [६०] [ बेहतर स्रोत की जरूरत ] व्याख्या किए गए कार्यक्रमों के प्रदर्शन में सुधार के लिए एक तकनीक समय-समय पर संकलन है । यहां वर्चुअल मशीन , निष्पादन से ठीक पहले, बायटेकोड के ब्लॉक का अनुवाद करती है जो हार्डवेयर पर सीधे निष्पादन के लिए मशीन कोड में उपयोग किए जाने वाले हैं। मालिकाना भाषाएंहालांकि सबसे अधिक इस्तेमाल की जाने वाली प्रोग्रामिंग भाषाओं में पूरी तरह से खुले विनिर्देश और कार्यान्वयन हैं, कई प्रोग्रामिंग भाषाएं केवल एक ही विक्रेता से उपलब्ध कार्यान्वयन के साथ मालिकाना प्रोग्रामिंग भाषाओं के रूप में मौजूद हैं, जो दावा कर सकती हैं कि ऐसी स्वामित्व वाली भाषा उनकी बौद्धिक संपदा है। मालिकाना प्रोग्रामिंग भाषाएं आमतौर पर किसी एकल उत्पाद के लिए डोमेन विशिष्ट भाषाएं या आंतरिक स्क्रिप्टिंग भाषाएं होती हैं ; कुछ मालिकाना भाषाओं का उपयोग केवल एक विक्रेता के भीतर आंतरिक रूप से किया जाता है, जबकि अन्य बाहरी उपयोगकर्ताओं के लिए उपलब्ध होते हैं। कुछ प्रोग्रामिंग भाषाएं मालिकाना और खुले के बीच की सीमा पर मौजूद हैं; उदाहरण के लिए, Oracle कार्पोरेशन जावा प्रोग्रामिंग भाषा के कुछ पहलुओं पर स्वामित्व अधिकारों का दावा करता है , [६१] और माइक्रोसॉफ्ट की C# प्रोग्रामिंग भाषा, जिसमें सिस्टम के अधिकांश हिस्सों का खुला कार्यान्वयन है, में एक बंद के रूप में सामान्य भाषा रनटाइम (CLR) भी है। वातावरण। [62] कई स्वामित्व वाली भाषाओं का व्यापक रूप से उपयोग किया जाता है, उनकी स्वामित्व प्रकृति के बावजूद; उदाहरणों में शामिल हैं MATLAB , VBScript , और Wolfram Language । कुछ भाषाएं बंद से खुले में संक्रमण कर सकती हैं; उदाहरण के लिए, एरलांग मूल रूप से एरिक्सन की आंतरिक प्रोग्रामिंग भाषा थी। [63] प्रयोग करेंमुख्य रूप से कंप्यूटिंग क्षेत्र में हजारों विभिन्न प्रोग्रामिंग भाषाएं बनाई गई हैं। [६४] व्यक्तिगत सॉफ्टवेयर परियोजनाएं आमतौर पर पांच या अधिक प्रोग्रामिंग भाषाओं का उपयोग करती हैं। [65] प्रोग्रामिंग भाषाएं मानव अभिव्यक्ति के अधिकांश अन्य रूपों से भिन्न होती हैं, जिसमें उन्हें अधिक सटीकता और पूर्णता की आवश्यकता होती है। अन्य लोगों के साथ संवाद करने के लिए एक प्राकृतिक भाषा का उपयोग करते समय, मानव लेखक और वक्ता अस्पष्ट हो सकते हैं और छोटी त्रुटियां कर सकते हैं, और फिर भी उनके इरादे को समझने की उम्मीद कर सकते हैं। हालांकि, लाक्षणिक रूप से बोलते हुए, कंप्यूटर "ठीक वही करते हैं जो उन्हें करने के लिए कहा जाता है", और "समझ" नहीं सकते कि प्रोग्रामर किस कोड को लिखने का इरादा रखता है। भाषा की परिभाषा, एक प्रोग्राम और प्रोग्राम के इनपुट के संयोजन में उस प्रोग्राम के नियंत्रण के क्षेत्र में प्रोग्राम के निष्पादित होने पर होने वाले बाहरी व्यवहार को पूरी तरह से निर्दिष्ट करना चाहिए। दूसरी ओर, एक एल्गोरिथ्म के बारे में विचारों को छद्म कोड का उपयोग करके निष्पादन के लिए आवश्यक सटीकता के बिना मनुष्यों को संप्रेषित किया जा सकता है , जो एक प्रोग्रामिंग भाषा में लिखे गए कोड के साथ प्राकृतिक भाषा को अंतःस्थापित करता है। एक प्रोग्रामिंग भाषा डेटा के टुकड़ों को परिभाषित करने के लिए एक संरचित तंत्र प्रदान करती है, और संचालन या परिवर्तन जो उस डेटा पर स्वचालित रूप से किए जा सकते हैं। एक प्रोग्रामर एक संगणना में शामिल अवधारणाओं का प्रतिनिधित्व करने के लिए भाषा में मौजूद अमूर्त का उपयोग करता है । इन अवधारणाओं को उपलब्ध सरलतम तत्वों के संग्रह के रूप में दर्शाया गया है (जिन्हें आदिम कहा जाता है )। [६६] प्रोग्रामिंग वह प्रक्रिया है जिसके द्वारा प्रोग्रामर इन आदिम को नए कार्यक्रमों की रचना के लिए जोड़ते हैं, या मौजूदा लोगों को नए उपयोगों या बदलते परिवेश के अनुकूल बनाते हैं। कंप्यूटर के लिए प्रोग्राम मानव संपर्क के बिना बैच प्रक्रिया में निष्पादित किए जा सकते हैं , या उपयोगकर्ता किसी दुभाषिया के इंटरैक्टिव सत्र में कमांड टाइप कर सकता है । इस मामले में "कमांड" केवल प्रोग्राम होते हैं, जिनका निष्पादन एक साथ जंजीर में होता है। जब कोई भाषा किसी दुभाषिया (जैसे यूनिक्स शेल या अन्य कमांड-लाइन इंटरफ़ेस ) के माध्यम से अपने आदेश चला सकती है , बिना संकलन के, इसे स्क्रिप्टिंग भाषा कहा जाता है । [67] भाषा के उपयोग को मापनायह निर्धारित करना कि सबसे व्यापक रूप से उपयोग की जाने वाली प्रोग्रामिंग भाषा कौन सी है, क्योंकि उपयोग की परिभाषा संदर्भ के अनुसार भिन्न होती है। एक भाषा अधिक से अधिक प्रोग्रामर घंटों पर कब्जा कर सकती है, एक अलग में कोड की अधिक लाइनें होती हैं, और एक तिहाई सबसे अधिक CPU समय का उपभोग कर सकता है। कुछ भाषाएँ विशेष प्रकार के अनुप्रयोगों के लिए बहुत लोकप्रिय हैं। उदाहरण के लिए, कॉर्पोरेट डेटा सेंटर में COBOL अभी भी मजबूत है, अक्सर बड़े मेनफ्रेम पर ; [६८] [६९] वैज्ञानिक और इंजीनियरिंग अनुप्रयोगों में फोरट्रान ; एयरोस्पेस, परिवहन, सैन्य, वास्तविक समय और एम्बेडेड अनुप्रयोगों में एडीए ; और सी एम्बेडेड अनुप्रयोगों और ऑपरेटिंग सिस्टम में। कई अलग-अलग प्रकार के एप्लिकेशन लिखने के लिए अन्य भाषाओं का नियमित रूप से उपयोग किया जाता है। भाषा की लोकप्रियता को मापने के विभिन्न तरीकों का प्रस्ताव किया गया है, प्रत्येक विषय जो मापा जाता है उस पर एक अलग पूर्वाग्रह के लिए प्रस्तावित किया गया है:
विभिन्न इंटरनेट साइटों से जानकारी का संयोजन और औसत, stackify.com ने दस सबसे लोकप्रिय प्रोग्रामिंग भाषाओं की सूचना दी (समग्र लोकप्रियता के अवरोही क्रम में): जावा , सी , सी ++ , पायथन , सी # , जावास्क्रिप्ट , वीबी .NET , आर , पीएचपी , और मैटलैब । [73] बोलियां, स्वाद और कार्यान्वयनप्रोग्रामिंग भाषा या डेटा एक्सचेंज भाषा की एक बोली भाषा की एक (अपेक्षाकृत छोटी) भिन्नता या विस्तार है जो इसकी आंतरिक प्रकृति को नहीं बदलती है। स्कीम और फोर्थ जैसी भाषाओं के साथ , मानकों को कार्यान्वयनकर्ताओं द्वारा अपर्याप्त, अपर्याप्त या नाजायज माना जा सकता है, इसलिए अक्सर वे मानक से विचलित हो जाते हैं, एक नई बोली बनाते हैं । अन्य मामलों में, एक डोमेन-विशिष्ट भाषा में उपयोग के लिए एक बोली बनाई जाती है , अक्सर एक सबसेट। में लिस्प दुनिया, सबसे अधिक भाषाओं बुनियादी का उपयोग करने वाले एस-अभिव्यक्ति , वाक्य रचना और लिस्प की तरह अर्थ विज्ञान माना जाता है लिस्प बोलियों हालांकि वे बेतहाशा, के रूप में करते हैं, कहते हैं, अलग-अलग हो रैकेट और Clojure । चूंकि एक भाषा में कई बोलियां होना आम बात है, इसलिए एक अनुभवहीन प्रोग्रामर के लिए सही दस्तावेज ढूंढना काफी मुश्किल हो सकता है। बुनियादी प्रोग्रामिंग भाषा है कई बोलियों । फोर्थ बोलियों के विस्फोट ने कहा, "यदि आपने एक फोर्थ देखा है ... आपने एक फोर्थ देखा है ।" taxonomiesप्रोग्रामिंग भाषाओं के लिए कोई व्यापक वर्गीकरण योजना नहीं है। किसी दी गई प्रोग्रामिंग भाषा में आमतौर पर एक भी पूर्वज भाषा नहीं होती है। भाषाएं आमतौर पर उस समय प्रचलन में नए विचारों के साथ कई पूर्ववर्ती भाषाओं के तत्वों के संयोजन से उत्पन्न होती हैं। एक भाषा में उत्पन्न होने वाले विचार संबंधित भाषाओं के एक परिवार में फैल जाएंगे, और फिर एक पूरी तरह से अलग परिवार में प्रकट होने के लिए अचानक पारिवारिक अंतराल में छलांग लगा देंगे। कार्य इस तथ्य से और जटिल है कि भाषाओं को कई अक्षों के साथ वर्गीकृत किया जा सकता है। उदाहरण के लिए, जावा एक वस्तु-उन्मुख भाषा है (क्योंकि यह वस्तु-उन्मुख संगठन को प्रोत्साहित करती है) और एक समवर्ती भाषा (क्योंकि इसमें समानांतर में कई थ्रेड चलाने के लिए अंतर्निहित निर्माण शामिल हैं)। पायथन एक वस्तु-उन्मुख स्क्रिप्टिंग भाषा है । व्यापक स्ट्रोक में, प्रोग्रामिंग भाषाओं में विभाजित मानदंड प्रोग्रामिंग द्वारा और एक वर्गीकरण उपयोग की इरादा डोमेन, साथ सामान्य प्रयोजन प्रोग्रामिंग भाषाओं से प्रतिष्ठित डोमेन-विशिष्ट प्रोग्रामिंग भाषाओं । परंपरागत रूप से, प्रोग्रामिंग भाषाओं को अनिवार्य वाक्यों के संदर्भ में गणना का वर्णन करने के रूप में माना जाता है, अर्थात आदेश जारी करना। इन्हें आम तौर पर अनिवार्य प्रोग्रामिंग भाषा कहा जाता है । प्रोग्रामिंग भाषाओं में अनुसंधान के एक बड़े सौदे का उद्देश्य एक प्रोग्राम के बीच के अंतर को निर्देशों के एक सेट के रूप में और एक प्रोग्राम को वांछित उत्तर के बारे में एक अभिकथन के रूप में धुंधला करना है, जो कि घोषणात्मक प्रोग्रामिंग की मुख्य विशेषता है । [७४] अधिक परिष्कृत प्रतिमानों में प्रक्रियात्मक प्रोग्रामिंग , वस्तु-उन्मुख प्रोग्रामिंग , कार्यात्मक प्रोग्रामिंग और तर्क प्रोग्रामिंग शामिल हैं ; कुछ भाषाएं प्रतिमान या बहु-प्रतिमान के संकर हैं। एक असेंबली भाषा एक अंतर्निहित मशीन वास्तुकला के प्रत्यक्ष मॉडल के रूप में इतना प्रतिमान नहीं है। उद्देश्य से, प्रोग्रामिंग भाषाओं को सामान्य उद्देश्य, सिस्टम प्रोग्रामिंग भाषाएं , स्क्रिप्टिंग भाषाएं, डोमेन-विशिष्ट भाषाएं, या समवर्ती/वितरित भाषाएं (या इनमें से एक संयोजन) माना जा सकता है । [७५] कुछ सामान्य प्रयोजन वाली भाषाओं को बड़े पैमाने पर शैक्षिक लक्ष्यों के साथ डिजाइन किया गया था। [76] प्रोग्रामिंग प्रतिमान से असंबंधित कारकों द्वारा एक प्रोग्रामिंग भाषा को भी वर्गीकृत किया जा सकता है। उदाहरण के लिए, अधिकांश प्रोग्रामिंग भाषाएं अंग्रेजी भाषा के कीवर्ड का उपयोग करती हैं , जबकि अल्पसंख्यक नहीं करते हैं । अन्य भाषाओं को जानबूझकर गूढ़ होने या न होने के रूप में वर्गीकृत किया जा सकता है । यह सभी देखें
संदर्भ
अग्रिम पठन
बाहरी कड़ियाँप्रोग्रामिंग भाषा क्या है इसके प्रकार बताइए?मुख्य रूप से, कंप्यूटर प्रोग्रामिंग भाषाएँ तीन प्रकार की होती हैं, वे हैं:. निम्न-स्तर की प्रोग्रामिंग भाषाएं (Low-level programming languages)।. मध्य-स्तर की प्रोग्रामिंग भाषाएं (Middle-level programming languages)।. उच्च-स्तरीय प्रोग्रामिंग भाषाएं (High-level programming languages)।. प्रोग्रामिंग पद्धति कितने प्रकार की होती है?चौथी पीढ़ी की प्रोग्रामिंग भाषा (Fourth generation programming language) - तीसरी पीढ़ी की प्रोग्रामिंग भाषा के मुकाबले चौथी पीढ़ी की प्रोग्रामिंग भाषा को अधिक सरल बनाया गया, इस भाषा में कोडिंग करना उसे समझना बहुत सरल हो गया इसी समय C, C++ भाषा का विकास हुआ, जिससे प्रोग्रामिंग करना अधिक सरल हुआ।
प्रोग्रामिंग क्या है in Hindi?Programming Kya Hoti hain ? Programming निर्देशों का एक set बनाने की प्रक्रिया है जो कंप्यूटर को किसी कार्य को करने का तरीका बताती है। प्रोग्रामिंग अलग अलग कंप्यूटर प्रोग्रामिंग भाषाओं जैसे कि BASIC, JavaScript, Python और C++ का उपयोग करके की जा सकती है।
प्रोग्रामिंग लैंग्वेज क्या हैं उदाहरण?कंप्यूटर प्रोग्रामिंग लैंग्वेज क्या है (Programming Language in Hindi): कंप्यूटर प्रोग्रामिंग लैंग्वेज निर्देशों का एक सेट है, जो प्रोग्राम को कुछ ऐसे कार्य करने में मदद करता है जो वैध इनपुट के लिए वांछित आउटपुट लौटाते हैं। प्रोग्रामिंग भाषाओं के उदाहरण: पायथन, जावास्क्रिप्ट, PHP, सी, जावा आदि है।
|