प्रोग्रामिंग भाषा

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

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

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

परिभाषाएँ
प्रोग्रामिंग भाषा का गठन करने वाले को परिभाषित करते समय कई विचार हैं।

कंप्यूटर भाषा बनाम प्रोग्रामिंग भाषा
कंप्यूटर भाषा शब्द का प्रयोग कभी-कभी प्रोग्रामिंग भाषा के साथ परस्पर विनिमय के लिए किया जाता है। हालाँकि, दोनों शब्दों का उपयोग लेखकों के बीच भिन्न होता है, जिसमें प्रत्येक का सटीक दायरा भी शामिल है। एक प्रयोग प्रोग्रामिंग भाषाओं को कंप्यूटर भाषाओं के सबसेट के रूप में वर्णित करता है। इसी तरह, कंप्यूटिंग में उपयोग की जाने वाली भाषाएँ जिनका लक्ष्य कंप्यूटर प्रोग्राम को व्यक्त करने से भिन्न होता है, सामान्य रूप से निर्दिष्ट कंप्यूटर भाषाएँ होती हैं। उदाहरण के लिए, मार्कअप लैंग्वेज को कभी-कभी कंप्यूटर लैंग्वेज के रूप में संदर्भित किया जाता है ताकि यह जोर दिया जा सके कि वे प्रोग्रामिंग के लिए उपयोग करने के लिए नहीं हैं। कंप्यूटर भाषाओं को वर्गीकृत करने का एक तरीका उन संगणनाओं के द्वारा है जिन्हें वे अभिव्यक्त करने में सक्षम हैं, जैसा कि संगणना के सिद्धांत द्वारा वर्णित है। अधिकांश व्यावहारिक प्रोग्रामिंग भाषाएँ ट्यूरिंग पूर्णता हैं, और सभी ट्यूरिंग पूर्ण भाषाएँ कलन विधि के समान सेट को लागू कर सकती हैं। SQL-92|ANSI/ISO SQL-92 और चैरिटी उन भाषाओं के उदाहरण हैं जो ट्यूरिंग पूर्ण नहीं हैं, फिर भी उन्हें अक्सर प्रोग्रामिंग भाषाएं कहा जाता है। हालाँकि, कुछ लेखक प्रोग्रामिंग भाषा शब्द को ट्यूरिंग पूर्ण भाषाओं तक सीमित रखते हैं। एक अन्य उपयोग प्रोग्रामिंग भाषाओं को अमूर्त मशीनों और कंप्यूटर भाषाओं की प्रोग्रामिंग के लिए सैद्धांतिक निर्माण के रूप में मानता है, जो भौतिक कंप्यूटरों पर चलता है, जिसमें परिमित हार्डवेयर संसाधन होते हैं। जॉन सी. रेनॉल्ड्स इस बात पर जोर देते हैं कि औपचारिक विनिर्देशन भाषाएं उतनी ही प्रोग्रामिंग भाषाएं हैं जितनी कि निष्पादन के लिए अभिप्रेत भाषाएं हैं। उनका यह भी तर्क है कि कंप्यूटर के व्यवहार को प्रभावित करने वाले पाठ्य और यहां तक ​​कि ग्राफिकल इनपुट प्रारूप प्रोग्रामिंग भाषाएं हैं, इस तथ्य के बावजूद कि वे आमतौर पर ट्यूरिंग-पूर्ण नहीं हैं, और टिप्पणी करते हैं कि प्रोग्रामिंग भाषा अवधारणाओं की अज्ञानता इनपुट प्रारूपों में कई खामियों का कारण है।

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

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

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

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

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

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

पहली उच्च-स्तरीय प्रोग्रामिंग भाषाएँ, या तीसरी पीढ़ी की प्रोग्रामिंग भाषाएँ (3GL), 1950 के दशक में लिखी गई थीं। 1943 और 1945 के बीच कोनराड ज़्यूस द्वारा जर्मन Z3 (कंप्यूटर) के लिए विकसित एक कंप्यूटर के लिए डिज़ाइन की जाने वाली एक प्रारंभिक उच्च-स्तरीय प्रोग्रामिंग भाषा प्लैंककुल थी। हालाँकि, इसे 1998 और 2000 तक लागू नहीं किया गया था। 1949 में प्रस्तावित जॉन मौचली का शॉर्ट कोड (कंप्यूटर भाषा), इलेक्ट्रॉनिक कंप्यूटर के लिए विकसित की गई पहली उच्च-स्तरीय भाषाओं में से एक थी। मशीन कोड के विपरीत, शॉर्ट कोड स्टेटमेंट समझने योग्य रूप में गणितीय अभिव्यक्तियों का प्रतिनिधित्व करते हैं। हालाँकि, प्रोग्राम को मशीन कोड में हर बार चलने पर अनुवादित करना पड़ता था, जिससे प्रक्रिया समान मशीन कोड चलाने की तुलना में बहुत धीमी हो जाती थी।

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

1954 में, जॉन बैकस द्वारा आईबीएम में फोरट्रान का आविष्कार किया गया था। यह पहली व्यापक रूप से इस्तेमाल की जाने वाली उच्च-स्तरीय भाषा थी | उच्च-स्तरीय सामान्य-उद्देश्य वाली प्रोग्रामिंग भाषा, जिसका कार्यात्मक कार्यान्वयन था, केवल कागज पर एक डिजाइन के विपरीत। उच्च-प्रदर्शन कंप्यूटिंग के लिए यह अभी भी एक लोकप्रिय भाषा है और उन कार्यक्रमों के लिए उपयोग किया जाता है जो दुनिया के टॉप 500 को बेंचमार्क और रैंक करते हैं। एक और प्रारंभिक प्रोग्रामिंग भाषा अमेरिका में ग्रेस हूपर द्वारा तैयार की गई थी, जिसे फ्लो-Matic कहा जाता है। इसे 1955 से 1959 की अवधि के दौरान रेमिंगटन रैंड में UNIVAC I के लिए विकसित किया गया था। हॉपर ने पाया कि व्यावसायिक डेटा प्रोसेसिंग ग्राहक गणितीय संकेतन से असहज थे, और 1955 की शुरुआत में, उन्होंने और उनकी टीम ने एक अंग्रेजी भाषा प्रोग्रामिंग भाषा के लिए एक विनिर्देश लिखा और एक प्रोटोटाइप लागू किया। फ्लो-मैटिक कंपाइलर 1958 की शुरुआत में सार्वजनिक रूप से उपलब्ध हो गया था और 1959 में काफी हद तक पूरा हो गया था। COBOL के डिजाइन में फ्लो-मैटिक का एक बड़ा प्रभाव था, क्योंकि उस समय केवल यह और इसके प्रत्यक्ष वंशज AIMACO वास्तविक उपयोग में थे।

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

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

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

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

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

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

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

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

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

प्रोग्रामिंग लैंग्वेज सिंटैक्स को आमतौर पर नियमित अभिव्यक्ति (शाब्दिक विश्लेषण स्ट्रक्चर के लिए) और बैकस-नौर फॉर्म (संदर्भ-मुक्त व्याकरण संरचना के लिए) के संयोजन का उपयोग करके परिभाषित किया जाता है। लिस्प (प्रोग्रामिंग भाषा) पर आधारित एक सरल व्याकरण नीचे दिया गया है: <वाक्यविन्यास लैंग = बीएनएफ> अभिव्यक्ति :: = परमाणु | सूची परमाणु ::= संख्या | चिन्ह, प्रतीक संख्या ::= [+-]?['0'-'9']+ प्रतीक ::= ['ए'-'जेडए'-'जेड']।* सूची :: = '(' अभिव्यक्ति * ')' 

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

इस व्याकरण में सुगठित टोकन क्रम के उदाहरण निम्नलिखित हैं:,   तथा.

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

एक उदाहरण के रूप में प्राकृतिक भाषा का प्रयोग करना, व्याकरणिक रूप से सही वाक्य को अर्थ देना संभव नहीं हो सकता है या वाक्य गलत हो सकता है:
 * रंगहीन हरे विचार करुण सोई। व्याकरणिक रूप से अच्छी तरह से गठित है लेकिन आम तौर पर स्वीकृत अर्थ नहीं है।
 * जॉन एक विवाहित अविवाहित है। व्याकरणिक रूप से सुगठित है | सुव्यवस्थित है लेकिन एक अर्थ व्यक्त करता है जो सत्य नहीं हो सकता।

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

<वाक्यविन्यास प्रकाश लैंग = सी> जटिल * पी = न्यूल; जटिल abs_p = sqrt (*p >> 4 + p->im); 

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

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

शब्दार्थ
सिमेंटिक्स#कंप्यूटर विज्ञान शब्द का तात्पर्य भाषाओं के अर्थ से है, जैसा कि उनके रूप (#सिंटेक्स) के विपरीत है।

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

कुछ प्रोग्रामिंग भाषाएं मालिकाना और खुले के बीच की सीमा पर मौजूद हैं; उदाहरण के लिए, Oracle कार्पोरेशन जावा प्रोग्रामिंग भाषा के कुछ पहलुओं पर मालिकाना हक का दावा करता है, और माइक्रोसॉफ्ट की सी शार्प (प्रोग्रामिंग लैंग्वेज)|सी# प्रोग्रामिंग लैंग्वेज, जिसमें सिस्टम के अधिकांश हिस्सों का खुला कार्यान्वयन है, एक बंद वातावरण के रूप में सामान्य भाषा रनटाइम (सीएलआर) भी है। कई स्वामित्व वाली भाषाओं का व्यापक रूप से उपयोग किया जाता है, उनकी मालिकाना प्रकृति के बावजूद; उदाहरणों में MATLAB, VBScript और वोल्फ्राम भाषा शामिल हैं। कुछ भाषाएँ बंद से खुले में परिवर्तन कर सकती हैं; उदाहरण के लिए, Erlang (प्रोग्रामिंग भाषा) मूल रूप से Ericsson की आंतरिक प्रोग्रामिंग भाषा थी।

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

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

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

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

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

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

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

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

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

यह भी देखें

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

अग्रिम पठन

 * Raphael Finkel: Advanced Programming Language Design, Addison Wesley 1995.
 * Daniel P. Friedman, Mitchell Wand, Christopher T. Haynes: Essentials of Programming Languages, The MIT Press 2001.
 * Maurizio Gabbrielli and Simone Martini: "Programming Languages: Principles and Paradigms", Springer, 2010.
 * David Gelernter, Suresh Jagannathan: Programming Linguistics, The MIT Press 1990.
 * Ellis Horowitz (ed.): Programming Languages, a Grand Tour (3rd ed.), 1987.
 * Ellis Horowitz: Fundamentals of Programming Languages, 1989.
 * Shriram Krishnamurthi: Programming Languages: Application and Interpretation, online publication.
 * Bruce J. MacLennan: Principles of Programming Languages: Design, Evaluation, and Implementation, Oxford University Press 1999.
 * John C. Mitchell: Concepts in Programming Languages, Cambridge University Press 2002.
 * Benjamin C. Pierce: Types and Programming Languages, The MIT Press 2002.
 * Terrence W. Pratt and Marvin Victor Zelkowitz: Programming Languages: Design and Implementation (4th ed.), Prentice Hall 2000.
 * Peter H. Salus. Handbook of Programming Languages (4 vols.). Macmillan 1998.
 * Ravi Sethi: Programming Languages: Concepts and Constructs, 2nd ed., Addison-Wesley 1996.
 * Michael L. Scott: Programming Language Pragmatics, Morgan Kaufmann Publishers 2005.
 * Robert W. Sebesta: Concepts of Programming Languages, 9th ed., Addison Wesley 2009.
 * Franklyn Turbak and David Gifford with Mark Sheldon: Design Concepts in Programming Languages, The MIT Press 2009.
 * Peter Van Roy and Seif Haridi. Concepts, Techniques, and Models of Computer Programming, The MIT Press 2004.
 * David A. Watt. Programming Language Concepts and Paradigms. Prentice Hall 1990.
 * David A. Watt and Muffy Thomas. Programming Language Syntax and Semantics. Prentice Hall 1991.
 * David A. Watt. Programming Language Processors. Prentice Hall 1993.
 * David A. Watt. Programming Language Design Concepts. John Wiley & Sons 2004.
 * David A. Watt. Programming Language Design Concepts. John Wiley & Sons 2004.

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

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