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

From Vigyanwiki
No edit summary
No edit summary
 
(7 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{Short description|Language for communicating instructions to a machine}}
{{Short description|Language for communicating instructions to a machine}}


[[File:C Hello World Program.png|thumb|right|[[सी (प्रोग्रामिंग भाषा)]] में लिखे एक साधारण कंप्यूटर प्रोग्राम के लिए 357x357px। धूसर रेखाएँ [[टिप्पणी (कंप्यूटर प्रोग्रामिंग)]] हैं जो मनुष्यों को [[प्राकृतिक भाषा]] में प्रोग्राम समझाने में मदद करती हैं। [[संकलित]] और [[निष्पादन (कंप्यूटिंग)]] होने पर, यह आउटपुट हैलो, वर्ल्ड देगा! प्रोग्राम|हैलो, दुनिया! .]]'''प्रोग्रामिंग भाषा''' [[कंप्यूटर प्रोग्राम]] लिखने के लिए अंकन की एक प्रणाली है।<ref name="Aaby 2004">{{cite book |last=Aaby |first=Anthony |url=http://www.emu.edu.tr/aelci/Courses/D-318/D-318-Files/plbook/intro.htm |title=प्रोग्रामिंग भाषाओं का परिचय|year=2004 |access-date=29 September 2012 |archive-url=https://web.archive.org/web/20121108043216/http://www.emu.edu.tr/aelci/Courses/D-318/D-318-Files/plbook/intro.htm |archive-date=8 November 2012 |url-status=dead}}</ref> अधिकांश प्रोग्रामिंग भाषाएँ टेक्स्ट-आधारित [[औपचारिक भाषा]]एं हैं, लेकिन वे [[दृश्य प्रोग्रामिंग भाषा]] भी हो सकती हैं। ये एक तरह की [[कंप्यूटर भाषा]] हैं।
[[File:C Hello World Program.png|thumb|right|हैलो, वर्ल्ड! .]]'''प्रोग्रामिंग लैंग्वेज''' [[कंप्यूटर प्रोग्राम]] लिखने के लिए अंकन की प्रणाली है।<ref name="Aaby 2004">{{cite book |last=Aaby |first=Anthony |url=http://www.emu.edu.tr/aelci/Courses/D-318/D-318-Files/plbook/intro.htm |title=प्रोग्रामिंग भाषाओं का परिचय|year=2004 |access-date=29 September 2012 |archive-url=https://web.archive.org/web/20121108043216/http://www.emu.edu.tr/aelci/Courses/D-318/D-318-Files/plbook/intro.htm |archive-date=8 November 2012 |url-status=dead}}</ref> अधिकांश प्रोग्रामिंग लैंग्वेज टेक्स्ट-आधारित [[औपचारिक भाषा|औपचारिक लैंग्वेज]] हैं, परन्तु वे [[दृश्य प्रोग्रामिंग भाषा|दृश्य प्रोग्रामिंग]] लैंग्वेज भी हो सकती हैं। ये प्रकार की [[कंप्यूटर भाषा|कंप्यूटर]] लैंग्वेज हैं।


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


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


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


=== कंप्यूटर भाषा बनाम प्रोग्रामिंग भाषा ===
=== कंप्यूटर लैंग्वेज बनाम प्रोग्रामिंग लैंग्वेज ===
कंप्यूटर भाषा शब्द का प्रयोग कभी-कभी प्रोग्रामिंग भाषा के साथ परस्पर विनिमय के लिए किया जाता है।<ref>Robert A. Edmunds, The Prentice-Hall standard glossary of computer terminology, Prentice-Hall, 1985, p. 91</ref> हालाँकि, दोनों शब्दों का उपयोग लेखकों के बीच भिन्न होता है, जिसमें प्रत्येक का सटीक दायरा भी शामिल है। एक प्रयोग में प्रोग्रामिंग भाषाओं को कंप्यूटर भाषाओं के उपसमूह के रूप में वर्णित किया गया है।<ref>Pascal Lando, Anne Lapujade, Gilles Kassel, and Frédéric Fürst, ''[http://home.mis.u-picardie.fr/~site-ic/site/IMG/pdf/ICSOFT2007_final.pdf Towards a General Ontology of Computer Programs]'' {{webarchive|url=https://web.archive.org/web/20150707093557/http://home.mis.u-picardie.fr/~site-ic/site/IMG/pdf/ICSOFT2007_final.pdf|date=7 July 2015}}, [http://dblp.uni-trier.de/db/conf/icsoft/icsoft2007-1.html ICSOFT 2007] {{webarchive|url=https://web.archive.org/web/20100427063709/http://dblp.uni-trier.de/db/conf/icsoft/icsoft2007-1.html|date=27 April 2010}}, pp. 163–170</ref> इसी तरह, कंप्यूटिंग में उपयोग की जाने वाली भाषाएं जिनका लक्ष्य कंप्यूटर प्रोग्राम को व्यक्त करने से भिन्न होता है, उन्हें सामान्य रूप से निर्दिष्ट कंप्यूटर भाषाएं कहा जाता है। उदाहरण के लिए, मार्कअप भाषाओं को कभी-कभी कंप्यूटर भाषाओं के रूप में संदर्भित किया जाता है ताकि इस बात पर ज़ोर दिया जा सके कि उनका उपयोग प्रोग्रामिंग के लिए नहीं किया जाता है।<ref>S.K. Bajpai, ''Introduction To Computers And C Programming'', New Age International, 2007, {{ISBN|81-224-1379-X}}, p. 346</ref>
कंप्यूटर लैंग्वेज शब्द का प्रयोग कभी-कभी प्रोग्रामिंग लैंग्वेज के साथ परस्पर विनिमय के लिए किया जाता है।<ref>Robert A. Edmunds, The Prentice-Hall standard glossary of computer terminology, Prentice-Hall, 1985, p. 91</ref> यद्यपि, दोनों शब्दों का उपयोग लेखकों के बीच भिन्न होता है, जिसमें प्रत्येक का यथार्थ चक्र भी सम्मिलित है। प्रयोग में प्रोग्रामिंग लैंग्वेजों को कंप्यूटर लैंग्वेजों के उपसमूह के रूप में वर्णित किया गया है।<ref>Pascal Lando, Anne Lapujade, Gilles Kassel, and Frédéric Fürst, ''[http://home.mis.u-picardie.fr/~site-ic/site/IMG/pdf/ICSOFT2007_final.pdf Towards a General Ontology of Computer Programs]'' {{webarchive|url=https://web.archive.org/web/20150707093557/http://home.mis.u-picardie.fr/~site-ic/site/IMG/pdf/ICSOFT2007_final.pdf|date=7 July 2015}}, [http://dblp.uni-trier.de/db/conf/icsoft/icsoft2007-1.html ICSOFT 2007] {{webarchive|url=https://web.archive.org/web/20100427063709/http://dblp.uni-trier.de/db/conf/icsoft/icsoft2007-1.html|date=27 April 2010}}, pp. 163–170</ref> इसी प्रकार, कंप्यूटिंग में उपयोग की जाने वाली लैंग्वेज जिनका टारगेट कंप्यूटर प्रोग्राम को व्यक्त करने से भिन्न होता है, उन्हें सामान्य रूप से निर्दिष्ट कंप्यूटर लैंग्वेज कहा जाता है। इस प्रकार से उदाहरण के लिए, मार्कअप लैंग्वेजों को कभी-कभी कंप्यूटर लैंग्वेजों के रूप में संदर्भित किया जाता है ताकि इस बात पर बल दिया जा सके कि उनका उपयोग प्रोग्रामिंग के लिए नहीं किया जाता है।<ref>S.K. Bajpai, ''Introduction To Computers And C Programming'', New Age International, 2007, {{ISBN|81-224-1379-X}}, p. 346</ref>


कंप्यूटर भाषाओं को वर्गीकृत करने का एक तरीका उन संगणनाओं के आधार पर है जिन्हें वे व्यक्त करने में सक्षम हैं, जैसा कि संगणना के सिद्धांत द्वारा वर्णित है। अधिकांश व्यावहारिक प्रोग्रामिंग भाषाएँ [[ट्यूरिंग पूर्णता|ट्यूरिंग पूर्ण]] हैं,<ref name=":0">{{Cite web |title=ट्यूरिंग पूर्णता|url=https://www.cs.odu.edu/~zeil/cs390/latest/Public/turing-complete/index.html |access-date=2022-10-05 |website=www.cs.odu.edu}}</ref> और सभी ट्यूरिंग पूर्ण भाषाएँ [[कलन विधि|एल्गोरिदम]] के समान सेट को लागू कर सकती हैं। एएनएसआई/आईएसओ एसक्यूएल-92 और चैरिटी उन भाषाओं के उदाहरण हैं जो ट्यूरिंग पूर्ण नहीं हैं, फिर भी उन्हें अक्सर प्रोग्रामिंग भाषाएं कहा जाता है।<ref name=":1">{{cite web |author=Digital Equipment Corporation |title=सूचना प्रौद्योगिकी - डेटाबेस भाषा SQL (DIS 9075 का प्रस्तावित संशोधित पाठ)|url=http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt |url-status=live |archive-url=https://web.archive.org/web/20060621035823/http://www.contrib.andrew.cmu.edu/%7Eshadow/sql/sql1992.txt |archive-date=21 June 2006 |access-date=29 June 2006 |work=ISO/IEC 9075:1992, Database Language SQL}}</ref><ref name=":2">{{cite web |author=The Charity Development Group |date=December 1996 |title=चैरिटी होम पेज|url=http://pll.cpsc.ucalgary.ca/charity1/www/home.html |url-status=live |archive-url=https://web.archive.org/web/20060718010551/http://pll.cpsc.ucalgary.ca/charity1/www/home.html |archive-date=18 July 2006}}, "Charity is a categorical programming language...", "All Charity computations terminate."</ref> हालाँकि, कुछ लेखक "प्रोग्रामिंग भाषा" शब्द को ट्यूरिंग पूर्ण भाषाओं तक सीमित रखते हैं।<ref name="Aaby 2004" /><ref name=":3">In mathematical terms, this means the programming language is [[Turing completeness|Turing-complete]] {{cite book |last=MacLennan |first=Bruce J. |title=Principles of Programming Languages |publisher=Oxford University Press |year=1987 |isbn=978-0-19-511306-8 |page=1}}</ref>
कंप्यूटर लैंग्वेजों को वर्गीकृत करने की विधि उन संगणनाओं के आधार पर है जिन्हें वे व्यक्त करने में सक्षम हैं, जैसा कि संगणना के सिद्धांत द्वारा वर्णित है। अधिकांश व्यावहारिक प्रोग्रामिंग लैंग्वेज [[ट्यूरिंग पूर्णता|ट्यूरिंग पूर्ण]] हैं,<ref name=":0">{{Cite web |title=ट्यूरिंग पूर्णता|url=https://www.cs.odu.edu/~zeil/cs390/latest/Public/turing-complete/index.html |access-date=2022-10-05 |website=www.cs.odu.edu}}</ref> और सभी ट्यूरिंग पूर्ण लैंग्वेज [[कलन विधि|एल्गोरिदम]] के समान समूह को लागू कर सकती हैं। एएनएसआई/आईएसओ एसक्यूएल-92 और चैरिटी उन लैंग्वेजों के उदाहरण हैं जो ट्यूरिंग पूर्ण नहीं हैं, फिर भी उन्हें प्रायः प्रोग्रामिंग लैंग्वेज कहा जाता है।<ref name=":1">{{cite web |author=Digital Equipment Corporation |title=सूचना प्रौद्योगिकी - डेटाबेस भाषा SQL (DIS 9075 का प्रस्तावित संशोधित पाठ)|url=http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt |url-status=live |archive-url=https://web.archive.org/web/20060621035823/http://www.contrib.andrew.cmu.edu/%7Eshadow/sql/sql1992.txt |archive-date=21 June 2006 |access-date=29 June 2006 |work=ISO/IEC 9075:1992, Database Language SQL}}</ref><ref name=":2">{{cite web |author=The Charity Development Group |date=December 1996 |title=चैरिटी होम पेज|url=http://pll.cpsc.ucalgary.ca/charity1/www/home.html |url-status=live |archive-url=https://web.archive.org/web/20060718010551/http://pll.cpsc.ucalgary.ca/charity1/www/home.html |archive-date=18 July 2006}}, "Charity is a categorical programming language...", "All Charity computations terminate."</ref> यद्यपि, कुछ लेखक "प्रोग्रामिंग लैंग्वेज" शब्द को ट्यूरिंग पूर्ण लैंग्वेजों तक सीमित रखते हैं।<ref name="Aaby 2004" /><ref name=":3">In mathematical terms, this means the programming language is [[Turing completeness|Turing-complete]] {{cite book |last=MacLennan |first=Bruce J. |title=Principles of Programming Languages |publisher=Oxford University Press |year=1987 |isbn=978-0-19-511306-8 |page=1}}</ref>
 
एक अन्य उपयोग प्रोग्रामिंग भाषाओं को [[अमूर्त मशीन]] और कंप्यूटर भाषाओं की प्रोग्रामिंग के लिए सैद्धांतिक निर्माण के रूप में मानता है, जो भौतिक कंप्यूटरों पर चलता है, जिसमें परिमित हार्डवेयर संसाधन होते हैं।<ref>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."</ref> जॉन सी. रेनॉल्ड्स इस बात पर जोर देते हैं कि [[औपचारिक विनिर्देश]]न भाषाएं उतनी ही प्रोग्रामिंग भाषाएं हैं जितनी कि निष्पादन के लिए अभिप्रेत भाषाएं हैं। उनका यह भी तर्क है कि कंप्यूटर के व्यवहार को प्रभावित करने वाले पाठ्य और यहां तक ​​कि ग्राफिकल इनपुट प्रारूप प्रोग्रामिंग भाषाएं हैं, इस तथ्य के बावजूद कि वे आमतौर पर ट्यूरिंग-पूर्ण नहीं हैं, और टिप्पणी करते हैं कि प्रोग्रामिंग भाषा अवधारणाओं की अज्ञानता इनपुट प्रारूपों में कई खामियों का कारण है।<ref>John C. Reynolds, "Some thoughts on teaching programming and programming languages", ''[[SIGPLAN]] Notices'', Volume 43, Issue 11, November 2008, p.109</ref>
 
 
 
=== डोमेन और लक्ष्य ===
अधिकांश व्यावहारिक संदर्भों में, एक प्रोग्रामिंग भाषा में एक कंप्यूटर शामिल होता है; नतीजतन, प्रोग्रामिंग भाषाओं को आमतौर पर इस तरह परिभाषित और अध्ययन किया जाता है।<ref>{{cite book |last=Ben Ari |first=Mordechai |title=प्रोग्रामिंग भाषाओं को समझना|publisher=John Wiley and Sons |year=1996 |quote=कार्यक्रमों और भाषाओं को विशुद्ध रूप से औपचारिक गणितीय वस्तुओं के रूप में परिभाषित किया जा सकता है। हालाँकि, अधिक लोग अन्य गणितीय वस्तुओं जैसे समूहों की तुलना में कार्यक्रमों में रुचि रखते हैं, ठीक है क्योंकि कंप्यूटर के निष्पादन को नियंत्रित करने के लिए कार्यक्रम-प्रतीकों के अनुक्रम-का उपयोग करना संभव है। जबकि हम प्रोग्रामिंग के सिद्धांत के अध्ययन की अत्यधिक अनुशंसा करते हैं, यह पाठ आम तौर पर कार्यक्रमों के अध्ययन तक ही सीमित रहेगा क्योंकि उन्हें कंप्यूटर पर निष्पादित किया जाता है।}}</ref> प्रोग्रामिंग लैंग्वेज नेचुरल लैंग्वेज से इस मायने में अलग है कि नेचुरल लैंग्वेज का इस्तेमाल केवल लोगों के बीच इंटरेक्शन के लिए किया जाता है, जबकि प्रोग्रामिंग लैंग्वेज भी इंसान को मशीनों को निर्देश देने की अनुमति देती हैं।
 
भाषा का क्षेत्र भी विचार करने योग्य है। [[एक्सएमएल]], [[एचटीएमएल]], या [[ट्राफ]] जैसी मार्कअप भाषाएं, जो [[संरचित डेटा]] को परिभाषित करती हैं, आमतौर पर प्रोग्रामिंग भाषाएं नहीं मानी जाती हैं।<ref>[http://www.w3.org/XML/1999/XML-in-10-points.html XML in 10 points] {{webarchive|url=https://web.archive.org/web/20090906083110/http://www.w3.org/XML/1999/XML-in-10-points.html|date=6 September 2009}} [[W3C]], 1999, "XML is not a programming language."</ref><ref>{{cite book |last=Powell |first=Thomas |title=एचटीएमएल और एक्सएचटीएमएल: पूरा संदर्भ|publisher=McGraw-Hill |year=2003 |isbn=978-0-07-222942-4 |page=25 |quote=HTML एक प्रोग्रामिंग भाषा नहीं है।}}</ref><ref>{{cite book |last1=Dykes |first1=Lucinda |url=https://archive.org/details/html4fordummies00titt_2 |title=डमियों के लिए एक्सएमएल|last2=Tittel |first2=Ed |publisher=Wiley |year=2005 |isbn=978-0-7645-8845-7 |edition=4th |page=[https://archive.org/details/html4fordummies00titt_2/page/20 20] |quote=...यह एक मार्कअप भाषा है, प्रोग्रामिंग भाषा नहीं।|url-access=registration}}</ref> हालाँकि, कम्प्यूटेशनल सिमेंटिक्स परिभाषित होने पर प्रोग्रामिंग लैंग्वेज सिंटैक्स को मार्कअप लैंग्वेज के साथ साझा कर सकती हैं। [[एक्सएसएलटी]], उदाहरण के लिए, पूरी तरह से एक्सएमएल सिंटैक्स का उपयोग कर एक ट्यूरिंग पूर्ण भाषा है।<ref>{{cite web |date=2005-04-20 |title=एक्सएसएलटी किस प्रकार की भाषा है?|url=http://www.ibm.com/developerworks/library/x-xslt/ |url-status=live |archive-url=https://web.archive.org/web/20110511192712/http://www.ibm.com/developerworks/library/x-xslt/ |archive-date=11 May 2011 |publisher=IBM.com}}</ref><ref>{{cite web |title=XSLT एक प्रोग्रामिंग लैंग्वेज है|url=http://msdn.microsoft.com/en-us/library/ms767587(VS.85).aspx |url-status=live |archive-url=https://web.archive.org/web/20110203015119/http://msdn.microsoft.com/en-us/library/ms767587(VS.85).aspx |archive-date=3 February 2011 |access-date=3 December 2010 |publisher=Msdn.microsoft.com}}</ref><ref>{{cite book |last=Scott |first=Michael |url=https://archive.org/details/programminglangu00scot_912 |title=प्रोग्रामिंग लैंग्वेज व्यावहारिकता|publisher=[[Morgan Kaufmann]] |year=2006 |isbn=978-0-12-633951-2 |page=[https://archive.org/details/programminglangu00scot_912/page/n834 802] |quote=XSLT, हालांकि XML के परिवर्तन के लिए अत्यधिक विशिष्ट है, एक ट्यूरिंग-पूर्ण प्रोग्रामिंग भाषा है।|url-access=limited}}</ref> इसके अलावा, [[लाटेकस]], जो ज्यादातर दस्तावेजों को संरचित करने के लिए उपयोग किया जाता है, में एक ट्यूरिंग पूर्ण उपसमुच्चय भी शामिल है।<ref name="Oetiker et Al., 2017">{{cite web |last1=Oetiker |first1=Tobias |last2=Partl |first2=Hubert |last3=Hyna |first3=Irene |last4=Schlegl |first4=Elisabeth |date=20 June 2016 |title=लेटेक्स 2ε का इतना संक्षिप्त परिचय नहीं|url=https://tobi.oetiker.ch/lshort/lshort.pdf |url-status=live |archive-url=https://web.archive.org/web/20170314015536/https://tobi.oetiker.ch/lshort/lshort.pdf |archive-date=14 March 2017 |website=tobi.oetiker.ch |pages=1–157 |format=Version 5.06}}</ref><ref>{{cite book |last=Syropoulos |first=Apostolos |url=https://archive.org/details/digitaltypograph00syro_587 |title=LaTeX का उपयोग कर डिजिटल टाइपोग्राफी|author2=Antonis Tsolomitis |author3=Nick Sofroniou |publisher=Springer-Verlag |year=2003 |isbn=978-0-387-95217-8 |page=[https://archive.org/details/digitaltypograph00syro_587/page/n237 213] |quote=TeX न केवल एक उत्कृष्ट टाइपसेटिंग इंजन है बल्कि एक वास्तविक प्रोग्रामिंग भाषा भी है।|url-access=limited}}</ref>


एक अन्य उपयोग प्रोग्रामिंग लैंग्वेजों को [[अमूर्त मशीन]] और कंप्यूटर लैंग्वेजों की प्रोग्रामिंग के लिए सैद्धांतिक निर्माण के रूप में मानता है, जो भौतिक कंप्यूटरों पर चलता है, जिसमें परिमित हार्डवेयर संसाधन होते हैं।<ref>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."</ref> जॉन सी. रेनॉल्ड्स इस बात पर बल देते हैं कि [[औपचारिक विनिर्देश]]न लैंग्वेज उतनी ही प्रोग्रामिंग लैंग्वेज हैं जितनी कि निष्पादन के लिए अभिप्रेत लैंग्वेज हैं। उनका यह भी तर्क है कि कंप्यूटर के व्यवहार को प्रभावित करने वाले टेक्स्ट और यहां तक ​​कि ग्राफिकल इनपुट प्रारूप प्रोग्रामिंग लैंग्वेज हैं, इस तथ्य के अतिरिक्त कि वे सामान्यतः ट्यूरिंग-पूर्ण नहीं हैं, और टिप्पणी करते हैं कि प्रोग्रामिंग लैंग्वेज अवधारणाओं की अज्ञानता इनपुट प्रारूपों में कई कमियों का कारण है।<ref>John C. Reynolds, "Some thoughts on teaching programming and programming languages", ''[[SIGPLAN]] Notices'', Volume 43, Issue 11, November 2008, p.109</ref>
=== डोमेन और टारगेट ===
अधिकांश व्यावहारिक संदर्भों में, प्रोग्रामिंग लैंग्वेज में कंप्यूटर सम्मिलित होता है; फलस्वरूप, प्रोग्रामिंग लैंग्वेजों को सामान्यतः इस प्रकार परिभाषित और अध्ययन किया जाता है।<ref>{{cite book |last=Ben Ari |first=Mordechai |title=प्रोग्रामिंग भाषाओं को समझना|publisher=John Wiley and Sons |year=1996 |quote=कार्यक्रमों और भाषाओं को विशुद्ध रूप से औपचारिक गणितीय वस्तुओं के रूप में परिभाषित किया जा सकता है। हालाँकि, अधिक लोग अन्य गणितीय वस्तुओं जैसे समूहों की तुलना में कार्यक्रमों में रुचि रखते हैं, ठीक है क्योंकि कंप्यूटर के निष्पादन को नियंत्रित करने के लिए कार्यक्रम-प्रतीकों के अनुक्रम-का उपयोग करना संभव है। जबकि हम प्रोग्रामिंग के सिद्धांत के अध्ययन की अत्यधिक अनुशंसा करते हैं, यह पाठ आम तौर पर कार्यक्रमों के अध्ययन तक ही सीमित रहेगा क्योंकि उन्हें कंप्यूटर पर निष्पादित किया जाता है।}}</ref> प्रोग्रामिंग लैंग्वेज नेचुरल लैंग्वेज से इस अर्थ में अलग है कि नेचुरल लैंग्वेज का उपयोग मात्र लोगों के बीच इंटरेक्शन के लिए किया जाता है, जबकि प्रोग्रामिंग लैंग्वेज भी मनुष्य को मशीनों को निर्देश देने की अनुमति देती हैं।


लैंग्वेज का क्षेत्र भी विचार करने योग्य है। [[एक्सएमएल]], [[एचटीएमएल]], या [[ट्राफ]] जैसी मार्कअप लैंग्वेज, जो [[संरचित डेटा]] को परिभाषित करती हैं, सामान्यतः प्रोग्रामिंग लैंग्वेज नहीं मानी जाती हैं।<ref>[http://www.w3.org/XML/1999/XML-in-10-points.html XML in 10 points] {{webarchive|url=https://web.archive.org/web/20090906083110/http://www.w3.org/XML/1999/XML-in-10-points.html|date=6 September 2009}} [[W3C]], 1999, "XML is not a programming language."</ref><ref>{{cite book |last=Powell |first=Thomas |title=एचटीएमएल और एक्सएचटीएमएल: पूरा संदर्भ|publisher=McGraw-Hill |year=2003 |isbn=978-0-07-222942-4 |page=25 |quote=HTML एक प्रोग्रामिंग भाषा नहीं है।}}</ref><ref>{{cite book |last1=Dykes |first1=Lucinda |url=https://archive.org/details/html4fordummies00titt_2 |title=डमियों के लिए एक्सएमएल|last2=Tittel |first2=Ed |publisher=Wiley |year=2005 |isbn=978-0-7645-8845-7 |edition=4th |page=[https://archive.org/details/html4fordummies00titt_2/page/20 20] |quote=...यह एक मार्कअप भाषा है, प्रोग्रामिंग भाषा नहीं।|url-access=registration}}</ref> यद्यपि, कम्प्यूटेशनल सिमेंटिक्स परिभाषित होने पर प्रोग्रामिंग लैंग्वेज सिंटैक्स को मार्कअप लैंग्वेज के साथ साझा कर सकती हैं। [[एक्सएसएलटी]], इस प्रकार से उदाहरण के लिए, पूर्ण रूप से एक्सएमएल सिंटैक्स का उपयोग कर ट्यूरिंग पूर्ण लैंग्वेज है।<ref>{{cite web |date=2005-04-20 |title=एक्सएसएलटी किस प्रकार की भाषा है?|url=http://www.ibm.com/developerworks/library/x-xslt/ |url-status=live |archive-url=https://web.archive.org/web/20110511192712/http://www.ibm.com/developerworks/library/x-xslt/ |archive-date=11 May 2011 |publisher=IBM.com}}</ref><ref>{{cite web |title=XSLT एक प्रोग्रामिंग लैंग्वेज है|url=http://msdn.microsoft.com/en-us/library/ms767587(VS.85).aspx |url-status=live |archive-url=https://web.archive.org/web/20110203015119/http://msdn.microsoft.com/en-us/library/ms767587(VS.85).aspx |archive-date=3 February 2011 |access-date=3 December 2010 |publisher=Msdn.microsoft.com}}</ref><ref>{{cite book |last=Scott |first=Michael |url=https://archive.org/details/programminglangu00scot_912 |title=प्रोग्रामिंग लैंग्वेज व्यावहारिकता|publisher=[[Morgan Kaufmann]] |year=2006 |isbn=978-0-12-633951-2 |page=[https://archive.org/details/programminglangu00scot_912/page/n834 802] |quote=XSLT, हालांकि XML के परिवर्तन के लिए अत्यधिक विशिष्ट है, एक ट्यूरिंग-पूर्ण प्रोग्रामिंग भाषा है।|url-access=limited}}</ref> इसके अतिरिक्त, [[लाटेकस]], जो अधिकांशतः डॉक्यूमेंट को संरचित करने के लिए उपयोग किया जाता है, में ट्यूरिंग पूर्ण उपसमुच्चय भी सम्मिलित है।<ref name="Oetiker et Al., 2017">{{cite web |last1=Oetiker |first1=Tobias |last2=Partl |first2=Hubert |last3=Hyna |first3=Irene |last4=Schlegl |first4=Elisabeth |date=20 June 2016 |title=लेटेक्स 2ε का इतना संक्षिप्त परिचय नहीं|url=https://tobi.oetiker.ch/lshort/lshort.pdf |url-status=live |archive-url=https://web.archive.org/web/20170314015536/https://tobi.oetiker.ch/lshort/lshort.pdf |archive-date=14 March 2017 |website=tobi.oetiker.ch |pages=1–157 |format=Version 5.06}}</ref><ref>{{cite book |last=Syropoulos |first=Apostolos |url=https://archive.org/details/digitaltypograph00syro_587 |title=LaTeX का उपयोग कर डिजिटल टाइपोग्राफी|author2=Antonis Tsolomitis |author3=Nick Sofroniou |publisher=Springer-Verlag |year=2003 |isbn=978-0-387-95217-8 |page=[https://archive.org/details/digitaltypograph00syro_587/page/n237 213] |quote=TeX न केवल एक उत्कृष्ट टाइपसेटिंग इंजन है बल्कि एक वास्तविक प्रोग्रामिंग भाषा भी है।|url-access=limited}}</ref>
=== सार ===
=== सार ===
प्रोग्रामिंग भाषाओं में आमतौर पर [[डेटा संरचना]]ओं को परिभाषित करने और हेरफेर करने या नियंत्रण प्रवाह को नियंत्रित करने के लिए अमूर्तता (कंप्यूटर विज्ञान) होती है। व्यावहारिक आवश्यकता है कि एक प्रोग्रामिंग भाषा पर्याप्त सार का समर्थन करती है, [[अमूर्त सिद्धांत (प्रोग्रामिंग)]] द्वारा व्यक्त की जाती है।<ref>David A. Schmidt, ''The structure of typed programming languages'', MIT Press, 1994, {{ISBN|0-262-19349-3}}, p. 32</ref> इस सिद्धांत को कभी-कभी प्रोग्रामर को इस तरह के सार का उचित उपयोग करने की सिफारिश के रूप में तैयार किया जाता है।<ref>{{cite book|last=Pierce|first=Benjamin|title=प्रकार और प्रोग्रामिंग भाषाएँ|url=https://archive.org/details/typesprogramming00pier_207|url-access=limited|publisher=MIT Press|year=2002|isbn=978-0-262-16209-8|page=[https://archive.org/details/typesprogramming00pier_207/page/n362 339]}}</ref>
प्रोग्रामिंग लैंग्वेजों में सामान्यतः [[डेटा संरचना]]ओं को परिभाषित करने और परिवर्तन करने या नियंत्रण प्रवाह को नियंत्रित करने के लिए अमूर्तता (कंप्यूटर विज्ञान) होती है। व्यावहारिक आवश्यकता है कि प्रोग्रामिंग लैंग्वेज पर्याप्त सार का समर्थन करती है, [[अमूर्त सिद्धांत (प्रोग्रामिंग)]] द्वारा व्यक्त की जाती है।<ref>David A. Schmidt, ''The structure of typed programming languages'', MIT Press, 1994, {{ISBN|0-262-19349-3}}, p. 32</ref> इस सिद्धांत को कभी-कभी प्रोग्रामर को इस प्रकार के सार का उचित उपयोग करने की संस्तुति के रूप में तैयार किया जाता है।<ref>{{cite book|last=Pierce|first=Benjamin|title=प्रकार और प्रोग्रामिंग भाषाएँ|url=https://archive.org/details/typesprogramming00pier_207|url-access=limited|publisher=MIT Press|year=2002|isbn=978-0-262-16209-8|page=[https://archive.org/details/typesprogramming00pier_207/page/n362 339]}}</ref>
 
 
== इतिहास ==
== इतिहास ==
{{main|History of programming languages}}
{{main|प्रोग्रामिंग लैंग्वेजों का इतिहास}}
 


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


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


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


पहली उच्च-स्तरीय प्रोग्रामिंग भाषाएँ, या [[तीसरी पीढ़ी की प्रोग्रामिंग भाषा]]एँ (3GL), 1950 के दशक में लिखी गई थीं। 1943 और 1945 के बीच [[कोनराड ज़्यूस]] द्वारा जर्मन [[Z3 (कंप्यूटर)]] के लिए विकसित एक कंप्यूटर के लिए डिज़ाइन की जाने वाली एक प्रारंभिक उच्च-स्तरीय प्रोग्रामिंग भाषा प्लैंककुल थी। हालाँकि, इसे 1998 और 2000 तक लागू नहीं किया गया था।<ref>
प्रथम उच्च-स्तरीय प्रोग्रामिंग लैंग्वेज, या [[तीसरी पीढ़ी की प्रोग्रामिंग भाषा|तीसरी पीढ़ी की प्रोग्रामिंग]] लैंग्वेज (3जीएल), 1950 के दशक में लिखी गई थीं। 1943 और 1945 के बीच [[कोनराड ज़्यूस]] द्वारा जर्मन [[Z3 (कंप्यूटर)|जेड3 (कंप्यूटर)]] के लिए विकसित कंप्यूटर के लिए डिज़ाइन की जाने वाली प्रारंभिक उच्च-स्तरीय प्रोग्रामिंग लैंग्वेज प्लैंककुल थी। यद्यपि, इसे 1998 और 2000 तक लागू नहीं किया गया था।<ref>
[[Raúl Rojas|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. [http://www.zib.de/zuse/Inhalt/Programme/Plankalkuel/Plankalkuel-Report/Plankalkuel-Report.htm (full text)] {{webarchive|url=https://web.archive.org/web/20141018204625/http://www.zib.de/zuse/Inhalt/Programme/Plankalkuel/Plankalkuel-Report/Plankalkuel-Report.htm |date=18 October 2014 }}</ref>
[[Raúl Rojas|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. [http://www.zib.de/zuse/Inhalt/Programme/Plankalkuel/Plankalkuel-Report/Plankalkuel-Report.htm (full text)] {{webarchive|url=https://web.archive.org/web/20141018204625/http://www.zib.de/zuse/Inhalt/Programme/Plankalkuel/Plankalkuel-Report/Plankalkuel-Report.htm |date=18 October 2014 }}</ref>
1949 में प्रस्तावित [[जॉन मौचली]] का शॉर्ट कोड (कंप्यूटर भाषा), [[इलेक्ट्रॉनिक कंप्यूटर]] के लिए विकसित की गई पहली उच्च-स्तरीय भाषाओं में से एक थी।<ref name=Sebesta>Sebesta, W.S Concepts of Programming languages. 2006; M6 14:18 pp.44. {{ISBN|0-321-33025-0}}</ref> [[मशीन कोड]] के विपरीत, शॉर्ट कोड स्टेटमेंट समझने योग्य रूप में गणितीय अभिव्यक्तियों का प्रतिनिधित्व करते हैं। हालाँकि, प्रोग्राम को मशीन कोड में हर बार चलने पर अनुवादित करना पड़ता था, जिससे प्रक्रिया समान मशीन कोड चलाने की तुलना में बहुत धीमी हो जाती थी।


<!-- [[WP:NFCC]] violation: [[File:Manchester Mark2.jpg|thumb|300px|The [[Manchester Mark 1]] ran programs written in [[Autocode]] from 1952.]] -->
1949 में प्रस्तावित [[जॉन मौचली]] का शॉर्ट कोड (कंप्यूटर लैंग्वेज), [[इलेक्ट्रॉनिक कंप्यूटर]] के लिए विकसित की गई प्रथम उच्च-स्तरीय लैंग्वेजों में से एक थी।<ref name="Sebesta">Sebesta, W.S Concepts of Programming languages. 2006; M6 14:18 pp.44. {{ISBN|0-321-33025-0}}</ref> [[मशीन कोड]] के विपरीत, शॉर्ट कोड कथन समझने योग्य रूप में गणितीय अभिव्यक्तियों का प्रतिनिधित्व करते हैं। यद्यपि, प्रोग्राम को मशीन कोड में प्रत्येक बार चलने पर अनुवादित करना पड़ता था, जिससे प्रक्रिया समान मशीन कोड चलाने की तुलना में बहुत मंद हो जाती थी।
[[मैनचेस्टर विश्वविद्यालय]] में, [[एलिक ग्लेनी]] ने 1950 के दशक की शुरुआत में [[ऑटोकोड]] विकसित किया। एक उच्च-स्तरीय प्रोग्रामिंग भाषा के रूप में, यह भाषा को स्वचालित रूप से मशीन कोड में बदलने के लिए एक [[संकलक]] का उपयोग करता था। पहला कोड और कंपाइलर 1952 में मैनचेस्टर विश्वविद्यालय में [[मैनचेस्टर मार्क 1]] कंप्यूटर के लिए विकसित किया गया था और इसे पहला कंपाइलर उच्च स्तरीय प्रोग्रामिंग भाषा माना जाता है।<ref>{{Cite journal |last1=Knuth|first1=Donald E.|last2=Pardo|first2=Luis Trabb|title=प्रोग्रामिंग भाषाओं का प्रारंभिक विकास|journal=Encyclopedia of Computer Science and Technology|volume=7|pages=419–493}}</ref><ref>{{cite book|url=https://books.google.com/books?id=kpYX_lNI0VMC|title=डिजीटल: कंप्यूटर का विज्ञान और यह हमारी दुनिया को कैसे आकार देता है|author=Peter J. Bentley|year=2012|publisher=Oxford University Press|page=87|isbn=9780199693795|url-status=live|archive-url=https://web.archive.org/web/20160829191955/https://books.google.com/books?id=kpYX_lNI0VMC|archive-date=29 August 2016}}</ref>
मार्क 1 के लिए दूसरा ऑटो कोड टोनी ब्रूकर|आर द्वारा विकसित किया गया था। 1954 में ए. ब्रूकर और इसे मार्क 1 ऑटोकोड कहा जाता था। ब्रूकर ने मैनचेस्टर विश्वविद्यालय के साथ मिलकर 1950 के दशक में [[फेरांती पारा]] के लिए एक ऑटो कोड भी विकसित किया। [[EDSAC]] के लिए संस्करण डेविड हार्टले (कंप्यूटर वैज्ञानिक) | डी द्वारा तैयार किया गया था। 1961 में [[कैम्ब्रिज गणितीय प्रयोगशाला विश्वविद्यालय]] के एफ. हार्टले। ईडीएसएसी 2 ऑटोकोड के रूप में जाना जाता है, यह स्थानीय परिस्थितियों के लिए अनुकूलित मर्करी ऑटोकोड से एक सीधा विकास था और इसके ऑब्जेक्ट कोड अनुकूलन और स्रोत-भाषा निदान के लिए विख्यात था जो उस समय के लिए उन्नत थे। मैनचेस्टर [[एटलस कंप्यूटर (मैनचेस्टर)]] मशीन विश्वविद्यालय के लिए विकास का एक समकालीन लेकिन अलग धागा, [[एटलस ऑटोकोड]] विकसित किया गया था।


1954 में, [[जॉन बैकस]] द्वारा आईबीएम में [[फोरट्रान]] का आविष्कार किया गया था। यह पहली व्यापक रूप से इस्तेमाल की जाने वाली उच्च-स्तरीय भाषा थी | उच्च-स्तरीय सामान्य-उद्देश्य वाली प्रोग्रामिंग भाषा, जिसका कार्यात्मक कार्यान्वयन था, केवल कागज पर एक डिजाइन के विपरीत।<ref>{{cite web |url=http://www.nbcnews.com/id/17704662 |title=फोरट्रान निर्माता जॉन बैकस का निधन - टेक और गैजेट्स|publisher=NBC News |date=2007-03-20 |access-date=2010-04-25}}</ref><ref>{{cite web |url=http://www.math.grin.edu/~rebelsky/Courses/CS302/99S/Outlines/outline.02.html |title=CSC-302 99S : कक्षा 02: प्रोग्रामिंग भाषाओं का संक्षिप्त इतिहास|publisher=Math.grin.edu |access-date=2010-04-25 |url-status=live |archive-url=https://web.archive.org/web/20100715042920/http://www.math.grin.edu/~rebelsky/Courses/CS302/99S/Outlines/outline.02.html |archive-date=15 July 2010}}</ref> उच्च-प्रदर्शन कंप्यूटिंग के लिए यह अभी भी एक लोकप्रिय भाषा है<ref name=hpc>{{cite journal|url=http://queue.acm.org/detail.cfm?id=1820518|author=Eugene Loh|title=आदर्श एचपीसी प्रोग्रामिंग भाषा|journal=Queue|date=18 June 2010|volume=8|issue=6|url-status=live|archive-url=https://web.archive.org/web/20160304015345/http://queue.acm.org/detail.cfm?id=1820518|archive-date=4 March 2016}}</ref> और उन कार्यक्रमों के लिए उपयोग किया जाता है जो दुनिया के टॉप 500 को बेंचमार्क और रैंक करते हैं।<ref>{{cite web |title = एचपीएल - वितरित-मेमोरी कंप्यूटरों के लिए उच्च-प्रदर्शन लाइनपैक बेंचमार्क का पोर्टेबल कार्यान्वयन|access-date = 2015-02-21 |url = http://www.netlib.org/benchmark/hpl |url-status=live |archive-url = https://web.archive.org/web/20150215031500/http://www.netlib.org/benchmark/hpl/ |archive-date = 15 February 2015}}</ref>
[[मैनचेस्टर विश्वविद्यालय]] में, [[एलिक ग्लेनी]] ने 1950 के दशक के प्रारंभ में [[ऑटोकोड]] विकसित किया। उच्च-स्तरीय प्रोग्रामिंग लैंग्वेज के रूप में, यह लैंग्वेज को स्वचालित रूप से मशीन कोड में बदलने के लिए [[संकलक|कम्पाइलर]] का उपयोग करता था। प्रथम कोड और कंपाइलर 1952 में मैनचेस्टर विश्वविद्यालय में [[मैनचेस्टर मार्क 1]] कंप्यूटर के लिए विकसित किया गया था और इसे प्रथम कंपाइलर उच्च स्तरीय प्रोग्रामिंग लैंग्वेज माना जाता है।<ref>{{Cite journal |last1=Knuth|first1=Donald E.|last2=Pardo|first2=Luis Trabb|title=प्रोग्रामिंग भाषाओं का प्रारंभिक विकास|journal=Encyclopedia of Computer Science and Technology|volume=7|pages=419–493}}</ref><ref>{{cite book|url=https://books.google.com/books?id=kpYX_lNI0VMC|title=डिजीटल: कंप्यूटर का विज्ञान और यह हमारी दुनिया को कैसे आकार देता है|author=Peter J. Bentley|year=2012|publisher=Oxford University Press|page=87|isbn=9780199693795|url-status=live|archive-url=https://web.archive.org/web/20160829191955/https://books.google.com/books?id=kpYX_lNI0VMC|archive-date=29 August 2016}}</ref>
एक और प्रारंभिक प्रोग्रामिंग भाषा अमेरिका में [[ग्रेस हूपर]] द्वारा तैयार की गई थी, जिसे [[फ्लो-Matic]] कहा जाता है। इसे 1955 से 1959 की अवधि के दौरान [[रेमिंगटन रैंड]] में [[UNIVAC I]] के लिए विकसित किया गया था। हॉपर ने पाया कि व्यावसायिक डेटा प्रोसेसिंग ग्राहक गणितीय संकेतन से असहज थे, और 1955 की शुरुआत में, उन्होंने और उनकी टीम ने एक [[अंग्रेजी भाषा]] प्रोग्रामिंग भाषा के लिए एक विनिर्देश लिखा और एक प्रोटोटाइप लागू किया।<ref>Hopper (1978) p.&nbsp;16.</ref> फ्लो-मैटिक कंपाइलर 1958 की शुरुआत में सार्वजनिक रूप से उपलब्ध हो गया था और 1959 में काफी हद तक पूरा हो गया था।<ref>Sammet (1969) p.&nbsp;316</ref> [[COBOL]] के डिजाइन में फ्लो-मैटिक का एक बड़ा प्रभाव था, क्योंकि उस समय केवल यह और इसके प्रत्यक्ष वंशज [[AIMACO]] वास्तविक उपयोग में थे।<ref>Sammet (1978) p.&nbsp;204.</ref>


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


1954 में, [[जॉन बैकस]] द्वारा आईबीएम में [[फोरट्रान]] का आविष्कार किया गया था। यह प्रथम व्यापक रूप से उपयोग की जाने वाली उच्च-स्तरीय लैंग्वेज थी, जिसका कार्यात्मक कार्यान्वयन मात्र पेपर पर डिजाइन के विपरीत था।<ref>{{cite web |url=http://www.nbcnews.com/id/17704662 |title=फोरट्रान निर्माता जॉन बैकस का निधन - टेक और गैजेट्स|publisher=NBC News |date=2007-03-20 |access-date=2010-04-25}}</ref><ref>{{cite web |url=http://www.math.grin.edu/~rebelsky/Courses/CS302/99S/Outlines/outline.02.html |title=CSC-302 99S : कक्षा 02: प्रोग्रामिंग भाषाओं का संक्षिप्त इतिहास|publisher=Math.grin.edu |access-date=2010-04-25 |url-status=live |archive-url=https://web.archive.org/web/20100715042920/http://www.math.grin.edu/~rebelsky/Courses/CS302/99S/Outlines/outline.02.html |archive-date=15 July 2010}}</ref> उच्च-निष्पादन कंप्यूटिंग के लिए यह अभी भी लोकप्रिय लैंग्वेज है<ref name="hpc">{{cite journal|url=http://queue.acm.org/detail.cfm?id=1820518|author=Eugene Loh|title=आदर्श एचपीसी प्रोग्रामिंग भाषा|journal=Queue|date=18 June 2010|volume=8|issue=6|url-status=live|archive-url=https://web.archive.org/web/20160304015345/http://queue.acm.org/detail.cfm?id=1820518|archive-date=4 March 2016}}</ref> और उन प्रोग्रामों के लिए उपयोग किया जाता है जो संसार के श्रेष्ठ 500 को बेंचमार्क और पदित करते हैं।<ref>{{cite web |title = एचपीएल - वितरित-मेमोरी कंप्यूटरों के लिए उच्च-प्रदर्शन लाइनपैक बेंचमार्क का पोर्टेबल कार्यान्वयन|access-date = 2015-02-21 |url = http://www.netlib.org/benchmark/hpl |url-status=live |archive-url = https://web.archive.org/web/20150215031500/http://www.netlib.org/benchmark/hpl/ |archive-date = 15 February 2015}}</ref>
एक और प्रारंभिक प्रोग्रामिंग लैंग्वेज अमेरिका में [[ग्रेस हूपर]] द्वारा तैयार की गई थी, जिसे [[फ्लो-Matic|फ्लो-मेटिक]] कहा जाता है। इसे 1955 से 1959 की अवधि के समय [[रेमिंगटन रैंड]] में [[UNIVAC I|यूनीवैक आई]] के लिए विकसित किया गया था। हॉपर ने पाया कि व्यावसायिक डेटा प्रोसेसिंग ग्रारूप गणितीय संकेतन से असहज थे, और 1955 के प्रारंभ में, उन्होंने और उनकी समूह ने [[अंग्रेजी भाषा|अंग्रेजी]] लैंग्वेज प्रोग्रामिंग लैंग्वेज के लिए विनिर्देश लिखा और प्रोटोटाइप लागू किया।<ref>Hopper (1978) p.&nbsp;16.</ref> फ्लो-मैटिक कंपाइलर 1958 के प्रारंभ में सार्वजनिक रूप से उपलब्ध हो गया था और 1959 में व्यापक रूप से पूर्ण हो गया था।<ref>Sammet (1969) p.&nbsp;316</ref> [[COBOL|कोबोल]] के डिजाइन में फ्लो-मैटिक का बड़ा प्रभाव था, क्योंकि उस समय मात्र यह और इसके प्रत्यक्ष वंशज [[AIMACO|एमाको]] वास्तविक उपयोग में थे।<ref>Sammet (1978) p.&nbsp;204.</ref>
=== शोधन ===
=== शोधन ===
उच्च-स्तरीय भाषाओं के बढ़ते उपयोग ने [[निम्न-स्तरीय प्रोग्रामिंग भाषा]]ओं या [[सिस्टम प्रोग्रामिंग भाषा]]ओं की आवश्यकता को प्रस्तुत किया। ये भाषाएँ, अलग-अलग डिग्री तक, असेम्बली भाषाओं और उच्च-स्तरीय भाषाओं के बीच सुविधाएँ प्रदान करती हैं। उनका उपयोग उन कार्यों को करने के लिए किया जा सकता है जिनके लिए हार्डवेयर सुविधाओं तक सीधी पहुंच की आवश्यकता होती है लेकिन फिर भी उच्च-स्तरीय नियंत्रण संरचना और त्रुटि-जांच प्रदान करते हैं।
उच्च-स्तरीय लैंग्वेजों के बढ़ते उपयोग ने [[निम्न-स्तरीय प्रोग्रामिंग भाषा|निम्न-स्तरीय प्रोग्रामिंग]] लैंग्वेजों या [[सिस्टम प्रोग्रामिंग भाषा|सिस्टम प्रोग्रामिंग]] लैंग्वेजों की आवश्यकता को प्रस्तुत किया। ये लैंग्वेज, अलग-अलग डिग्री तक, असेम्बली लैंग्वेजों और उच्च-स्तरीय लैंग्वेजों के बीच सुविधाएँ प्रदान करती हैं। उनका उपयोग उन कार्यों को करने के लिए किया जा सकता है जिनके लिए हार्डवेयर सुविधाओं तक सीधी पहुंच की आवश्यकता होती है परन्तु फिर भी उच्च-स्तरीय नियंत्रण संरचना और त्रुटि-जांच प्रदान करते हैं।
    
    
1960 के दशक से 1970 के दशक के अंत तक की अवधि ने अब उपयोग में आने वाले प्रमुख भाषा प्रतिमानों का विकास किया:
1960 के दशक से 1970 के दशक के अंत तक की अवधि ने अब उपयोग में आने वाले प्रमुख लैंग्वेज प्रतिमानों का विकास किया था:
* [[एपीएल (प्रोग्रामिंग भाषा)]] ने [[सरणी प्रोग्रामिंग]] की शुरुआत की और [[कार्यात्मक प्रोग्रामिंग]] को प्रभावित किया।<ref>Richard L. Wexelblat: ''History of Programming Languages'', Academic Press, 1981, chapter XIV.</ref>
* [[एपीएल (प्रोग्रामिंग भाषा)|एपीएल (प्रोग्रामिंग लैंग्वेज)]] ने [[सरणी प्रोग्रामिंग]] के प्रारंभ की और [[कार्यात्मक प्रोग्रामिंग]] को प्रभावित किया।<ref>Richard L. Wexelblat: ''History of Programming Languages'', Academic Press, 1981, chapter XIV.</ref>
* [[ALGOL]] ने संरचित प्रक्रियात्मक प्रोग्रामिंग और [[प्रोग्रामिंग भाषा विनिर्देश]] के अनुशासन दोनों को परिष्कृत किया; एल्गोरिथम भाषा [[ALGOL 60]] पर संशोधित रिपोर्ट इस बात का मॉडल बन गई कि बाद में भाषा विनिर्देशों को कैसे लिखा गया।
* [[ALGOL|एल्गोल]] ने संरचित प्रक्रियात्मक प्रोग्रामिंग और [[प्रोग्रामिंग भाषा विनिर्देश|प्रोग्रामिंग लैंग्वेज विनिर्देश]] के अनुशासन दोनों को परिष्कृत किया; एल्गोरिथम लैंग्वेज [[ALGOL 60|एल्गोल 60]] पर संशोधित रिपोर्ट इस बात का मॉडल बन गई कि बाद में लैंग्वेज विनिर्देशों को कैसे लिखा गया।
* [[लिस्प (प्रोग्रामिंग भाषा)]], 1958 में लागू की गई, पहली गतिशील रूप से टाइप की गई कार्यात्मक प्रोग्रामिंग भाषा थी।
* [[लिस्प (प्रोग्रामिंग भाषा)|लिस्प (प्रोग्रामिंग लैंग्वेज)]], 1958 में लागू की गई, प्रथम गतिशील रूप से टाइप की गई कार्यात्मक प्रोग्रामिंग लैंग्वेज थी।
* 1960 के दशक में, [[शुरुआत]] पहली भाषा थी जिसे वस्तु-उन्मुख प्रोग्रामिंग का समर्थन करने के लिए डिज़ाइन किया गया था; 1970 के दशक के मध्य में, स्मॉलटाक ने पहली विशुद्ध रूप से वस्तु-उन्मुख भाषा का अनुसरण किया।
* 1960 के दशक में, [[शुरुआत|सिमुला]] प्रथम लैंग्वेज थी जिसे ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग का समर्थन करने के लिए डिज़ाइन किया गया था; 1970 के दशक के मध्य में, स्मॉलटाक ने प्रथम विशुद्ध रूप से ऑब्जेक्ट-ओरिएंटेड लैंग्वेज का अनुसरण किया।
* C (प्रोग्रामिंग लैंग्वेज) को 1969 और 1973 के बीच [[यूनिक्स]] ऑपरेटिंग सिस्टम के लिए सिस्टम प्रोग्रामिंग लैंग्वेज के रूप में विकसित किया गया था और यह लोकप्रिय बना हुआ है।<ref>{{cite web|url=http://www.cs.berkeley.edu/~flab/languages.html|author=François Labelle|title=प्रोग्रामिंग भाषा उपयोग ग्राफ|work=[[SourceForge]]|access-date=21 June 2006|url-status=live|archive-url=https://web.archive.org/web/20060617055109/http://www.cs.berkeley.edu/%7Eflab/languages.html|archive-date=17 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.</ref>
* C (प्रोग्रामिंग लैंग्वेज) को 1969 और 1973 के बीच [[यूनिक्स]] ऑपरेटिंग सिस्टम के लिए सिस्टम प्रोग्रामिंग लैंग्वेज के रूप में विकसित किया गया था और यह लोकप्रिय बना हुआ है।<ref>{{cite web|url=http://www.cs.berkeley.edu/~flab/languages.html|author=François Labelle|title=प्रोग्रामिंग भाषा उपयोग ग्राफ|work=[[SourceForge]]|access-date=21 June 2006|url-status=live|archive-url=https://web.archive.org/web/20060617055109/http://www.cs.berkeley.edu/%7Eflab/languages.html|archive-date=17 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.</ref>
* 1972 में डिजाइन किया गया [[प्रोलॉग]] पहली [[तर्क प्रोग्रामिंग]] लैंग्वेज थी।
* 1972 में डिजाइन किया गया [[प्रोलॉग]] प्रथम [[तर्क प्रोग्रामिंग]] लैंग्वेज थी।
* 1978 में, ML (प्रोग्रामिंग लैंग्वेज) ने लिस्प (प्रोग्रामिंग लैंग्वेज) के शीर्ष पर एक बहुरूपी प्रकार की प्रणाली का निर्माण किया, अग्रणी प्रकार प्रणाली कार्यात्मक प्रोग्रामिंग भाषाएँ।
* 1978 में, एमएल ने लिस्प के शीर्ष पर एक बहुरूपी प्रकार प्रणाली का निर्माण किया, जो सांख्यिकीय रूप से टाइप की जाने वाली कार्यात्मक प्रोग्रामिंग लैंग्वेजों में अग्रणी थी।
इनमें से प्रत्येक भाषा ने वंशजों को जन्म दिया, और अधिकांश आधुनिक प्रोग्रामिंग भाषाएं उनमें से कम से कम एक को अपने वंश में गिनती हैं।
इनमें से प्रत्येक लैंग्वेज ने वंशजों को जन्म दिया, और अधिकांश आधुनिक प्रोग्रामिंग लैंग्वेज उनमें से कम से कम को अपने वंश में गणनीय हैं।
 
1960 और 1970 के दशक में भी [[संरचित प्रोग्रामिंग]] की खूबियों पर काफी बहस हुई, और [[एमएल (प्रोग्रामिंग भाषा)]] को इसका समर्थन करने के लिए डिज़ाइन किया जाना चाहिए।<ref>{{cite journal|title=अर्धविराम युद्ध|journal=American Scientist|first1=Brian|last1=Hayes|volume=94|issue=4|year=2006|pages=299–303|doi=10.1511/2006.60.299}}</ref> एड्जर डब्ल्यू. डिज्कस्ट्रा ने 1968 में एसीएम के संचार में प्रकाशित एक प्रसिद्ध पत्र में तर्क दिया कि [[के लिए जाओ]] कथनों को सभी उच्च स्तरीय प्रोग्रामिंग भाषाओं से हटा दिया जाना चाहिए।<ref>{{cite journal|last=Dijkstra|first=Edsger W.|author-link=Edsger Dijkstra|title=नुकसानदायक माने जाने वाले स्टेटमेंट पर जाएं|journal=Communications of the ACM|volume=11|issue=3|date=March 1968|pages=147–148|url=http://www.cs.utexas.edu/users/EWD/ewd02xx/EWD215.PDF|doi=10.1145/362929.362947|s2cid=17469809|url-status=live|archive-url=https://web.archive.org/web/20140513014557/http://www.cs.utexas.edu/users/EWD/ewd02xx/EWD215.PDF|archive-date=13 May 2014}}</ref>


1960 और 1970 के दशक में भी [[संरचित प्रोग्रामिंग]] की विशेषताओं पर अत्यधिक चर्चा हुई, और [[एमएल (प्रोग्रामिंग भाषा)|एमएल (प्रोग्रामिंग लैंग्वेज)]] को इसका समर्थन करने के लिए डिज़ाइन किया जाना चाहिए।<ref>{{cite journal|title=अर्धविराम युद्ध|journal=American Scientist|first1=Brian|last1=Hayes|volume=94|issue=4|year=2006|pages=299–303|doi=10.1511/2006.60.299}}</ref> एड्जर डब्ल्यू. डिज्कस्ट्रा ने 1968 में एसीएम के संचार में प्रकाशित प्रसिद्ध पत्र में तर्क दिया कि [[के लिए जाओ|गोटू]] कथनों को सभी उच्च स्तरीय प्रोग्रामिंग लैंग्वेजों से हटा दिया जाना चाहिए।<ref>{{cite journal|last=Dijkstra|first=Edsger W.|author-link=Edsger Dijkstra|title=नुकसानदायक माने जाने वाले स्टेटमेंट पर जाएं|journal=Communications of the ACM|volume=11|issue=3|date=March 1968|pages=147–148|url=http://www.cs.utexas.edu/users/EWD/ewd02xx/EWD215.PDF|doi=10.1145/362929.362947|s2cid=17469809|url-status=live|archive-url=https://web.archive.org/web/20140513014557/http://www.cs.utexas.edu/users/EWD/ewd02xx/EWD215.PDF|archive-date=13 May 2014}}</ref>
=== समेकन और विकास ===
[[File:Bangalore India Tech books for sale IMG 5261.jpg|thumb|200px|right|प्रोग्रामिंग लैंग्वेज टेक्स्टबुक का छोटा चयन]]1980 के दशक सापेक्ष समेकन के वर्ष थे। [[सी ++]] संयुक्त ऑब्जेक्ट-ओरिएंटेड और सिस्टम प्रोग्रामिंग। संयुक्त राज्य सरकार ने एडा (प्रोग्रामिंग लैंग्वेज) को मानकीकृत किया, [[पास्कल (प्रोग्रामिंग भाषा)|पास्कल (प्रोग्रामिंग लैंग्वेज)]] से प्राप्त सिस्टम प्रोग्रामिंग लैंग्वेज और रक्षा संपर्कक द्वारा उपयोग के लिए अभिप्रेत है। जापान और अन्य स्थानों पर, तथाकथित पांचवीं पीढ़ी [[एडा (प्रोग्रामिंग भाषा)|एडा (प्रोग्रामिंग लैंग्वेज)]] की जांच में बड़ी निधि व्यय की गई थी पाँचवीं पीढ़ी की लैंग्वेज जिनमें लॉजिक प्रोग्रामिंग संरचनाएँ सम्मिलित थीं।<ref>Tetsuro Fujise, Takashi Chikayama, Kazuaki Rokusawa, Akihiko Nakase (December 1994). "KLIC: A Portable Implementation of KL1" ''Proc. of FGCS '94, ICOT'' Tokyo, December 1994. {{cite web |url=http://www.icot.or.jp/ARCHIVE/HomePage-E.html |title=Archived copy |access-date=2006-10-09 |url-status=dead |archive-url=https://web.archive.org/web/20060925132105/http://www.icot.or.jp/ARCHIVE/HomePage-E.html |archive-date=25 September 2006}} KLIC is a portable implementation of a concurrent logic programming language [[KL1]].</ref> कार्यात्मक लैंग्वेज समुदाय एमएल (प्रोग्रामिंग लैंग्वेज) और लिस्प को मानकीकृत करने के लिए चले गए। नवीन प्रतिमानों का आविष्कार करने के अतिरिक्त, इन सभी आंदोलनों ने पूर्व दशकों में आविष्कृत विचारों पर विस्तार किया।


=== समेकन और विकास ===
1980 के दशक के समय बड़े पैमाने की प्रणालियों की प्रोग्रामिंग के लिए लैंग्वेज डिजाइन में महत्वपूर्ण प्रवृत्ति कोड के मॉड्यूल या बड़े पैमाने की संगठनात्मक इकाइयों के उपयोग पर बढ़ा हुआ ध्यान था। [[Modula-2|मोड्यूला-2]], एडा, और एम्एल सभी ने 1980 के दशक में उल्लेखनीय मॉड्यूल सिस्टम विकसित किए, जो प्रायः [[सामान्य प्रोग्रामिंग]] निर्माणों से जुड़े थे।<ref>{{cite web|author=Jim Bender|url=http://readscheme.org/modules/|title=कार्यात्मक प्रोग्रामिंग भाषाओं के लिए मॉड्यूल पर लघु ग्रंथ सूची|work=ReadScheme.org|date=15 March 2004|url-status=live|archive-url=https://web.archive.org/web/20060924085057/http://readscheme.org/modules/|archive-date=24 September 2006}}</ref>
[[File:Bangalore India Tech books for sale IMG 5261.jpg|thumb|200px|right|प्रोग्रामिंग भाषा पाठ्यपुस्तकों का एक छोटा चयन]]1980 के दशक सापेक्ष समेकन के वर्ष थे। [[सी ++]] संयुक्त वस्तु-उन्मुख और सिस्टम प्रोग्रामिंग। संयुक्त राज्य सरकार ने Ada (प्रोग्रामिंग लैंग्वेज) को मानकीकृत किया, [[पास्कल (प्रोग्रामिंग भाषा)]] से प्राप्त एक सिस्टम प्रोग्रामिंग लैंग्वेज और रक्षा ठेकेदारों द्वारा उपयोग के लिए अभिप्रेत है। जापान और अन्य जगहों पर, तथाकथित पांचवीं पीढ़ी [[एडा (प्रोग्रामिंग भाषा)]] की जांच में बड़ी रकम खर्च की गई थी पाँचवीं पीढ़ी की भाषाएँ जिनमें लॉजिक प्रोग्रामिंग संरचनाएँ शामिल थीं।<ref>Tetsuro Fujise, Takashi Chikayama, Kazuaki Rokusawa, Akihiko Nakase (December 1994). "KLIC: A Portable Implementation of KL1" ''Proc. of FGCS '94, ICOT'' Tokyo, December 1994. {{cite web |url=http://www.icot.or.jp/ARCHIVE/HomePage-E.html |title=Archived copy |access-date=2006-10-09 |url-status=dead |archive-url=https://web.archive.org/web/20060925132105/http://www.icot.or.jp/ARCHIVE/HomePage-E.html |archive-date=25 September 2006}} KLIC is a portable implementation of a concurrent logic programming language [[KL1]].</ref> कार्यात्मक भाषा समुदाय एमएल (प्रोग्रामिंग भाषा) और लिस्प को मानकीकृत करने के लिए चले गए। नए प्रतिमानों का आविष्कार करने के बजाय, इन सभी आंदोलनों ने पिछले दशकों में आविष्कृत विचारों पर विस्तार किया।


1980 के दशक के दौरान बड़े पैमाने की प्रणालियों की प्रोग्रामिंग के लिए भाषा डिजाइन में एक महत्वपूर्ण प्रवृत्ति कोड के मॉड्यूल या बड़े पैमाने की संगठनात्मक इकाइयों के उपयोग पर एक बढ़ा हुआ ध्यान था। [[Modula-2]], Ada, और ML सभी ने 1980 के दशक में उल्लेखनीय मॉड्यूल सिस्टम विकसित किए, जो अक्सर [[सामान्य प्रोग्रामिंग]] निर्माणों से जुड़े थे।<ref>{{cite web|author=Jim Bender|url=http://readscheme.org/modules/|title=कार्यात्मक प्रोग्रामिंग भाषाओं के लिए मॉड्यूल पर लघु ग्रंथ सूची|work=ReadScheme.org|date=15 March 2004|url-status=live|archive-url=https://web.archive.org/web/20060924085057/http://readscheme.org/modules/|archive-date=24 September 2006}}</ref>
1990 के दशक के मध्य में [[इंटरनेट]] के तीव्र विकास ने नवीन लैंग्वेजों के अवसर उत्पन्न किए। पर्ल, मूल रूप से 1987 में प्रथम बार रिलीज़ किया गया यूनिक्स स्क्रिप्टिंग टूल, गतिशील [[वेबसाइट]] में सामान्य हो गया। सर्वर-साइड प्रोग्रामिंग के लिए [[जावा (प्रोग्रामिंग भाषा)|जावा (प्रोग्रामिंग लैंग्वेज)]] का उपयोग किया जाने लगा, और बायटेकोड वर्चुअल मशीनें वाणिज्यिक सेटिंग में एक बार लिखने, कहीं भी चलाने के अपने विचार के साथ फिर से लोकप्रिय हो गईं ([[यूसीएसडी पास्कल]] 1980 के दशक के प्रारंभ में समय के लिए लोकप्रिय था)। ये विकास मौलिक रूप से नवीन नहीं थे; बल्कि, वे कई वर्तमान लैंग्वेजों और प्रतिमानों का परिशोधन थे (यद्यपि उनका सिंटैक्स प्रायः प्रोग्रामिंग लैंग्वेजों के सी वर्ग पर आधारित था)।
1990 के दशक के मध्य में [[इंटरनेट]] के तीव्र विकास ने नई भाषाओं के अवसर पैदा किए। पर्ल, मूल रूप से 1987 में पहली बार रिलीज़ किया गया एक यूनिक्स स्क्रिप्टिंग टूल, गतिशील [[वेबसाइट]]ों में आम हो गया। सर्वर-साइड प्रोग्रामिंग के लिए [[जावा (प्रोग्रामिंग भाषा)]] का उपयोग किया जाने लगा, और बायटेकोड वर्चुअल मशीनें वाणिज्यिक सेटिंग्स में एक बार लिखने, कहीं भी चलाने के अपने वादे के साथ फिर से लोकप्रिय हो गईं ([[यूसीएसडी पास्कल]] 1980 के दशक की शुरुआत में एक समय के लिए लोकप्रिय था)। ये विकास मौलिक रूप से नवीन नहीं थे; बल्कि, वे कई मौजूदा भाषाओं और प्रतिमानों का परिशोधन थे (हालांकि उनका सिंटैक्स अक्सर प्रोग्रामिंग भाषाओं के सी परिवार पर आधारित था)।


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


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


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


=== सिंटेक्स ===
=== सिंटेक्स ===
{{Main|Syntax (programming languages)}}
{{Main|सिंटैक्स (प्रोग्रामिंग लैंग्वेज)}}
[[File:Python add5 parse.png|thumb|367px|इनसेट टोकेनाइजेशन के साथ पायथन (प्रोग्रामिंग लैंग्वेज) का [[पार्स पेड़]]]]
[[File:Python add5 parse.png|thumb|367px|निवेशन टोकेनाइजेशन के साथ पायथन (प्रोग्रामिंग लैंग्वेज) का [[पार्स पेड़|पार्स ट्री]]]]
[[File:Python add5 syntax.svg|thumb|292px|[[वाक्य - विन्यास पर प्रकाश डालना]] का उपयोग अक्सर प्रोग्रामर्स को सोर्स कोड के तत्वों को पहचानने में मदद करने के लिए किया जाता है। उपरोक्त भाषा Python (प्रोग्रामिंग भाषा) है।]]एक प्रोग्रामिंग लैंग्वेज के सरफेस फॉर्म को इसके सिंटैक्स (प्रोग्रामिंग लैंग्वेज) के रूप में जाना जाता है। अधिकांश प्रोग्रामिंग भाषाएँ विशुद्ध रूप से पाठ्य हैं; वे लिखित प्राकृतिक भाषाओं की तरह शब्दों, संख्याओं और विराम चिह्नों सहित पाठ के क्रम का उपयोग करते हैं। दूसरी ओर, कुछ प्रोग्रामिंग लैंग्वेज प्रकृति में अधिक विज़ुअल प्रोग्रामिंग लैंग्वेज हैं, जो किसी प्रोग्राम को निर्दिष्ट करने के लिए प्रतीकों के बीच दृश्य संबंधों का उपयोग करती हैं।
[[File:Python add5 syntax.svg|thumb|292px|[[वाक्य - विन्यास पर प्रकाश डालना|सिंटेक्स]] हाईलाइट का उपयोग प्रायः प्रोग्रामर्स को सोर्स कोड के अवयवों को पहचानने में सहायता करने के लिए किया जाता है। उपरोक्त लैंग्वेज पायथ (प्रोग्रामिंग लैंग्वेज) है।]]एक प्रोग्रामिंग लैंग्वेज के आधार रूप को इसके सिंटैक्स (प्रोग्रामिंग लैंग्वेज) के रूप में जाना जाता है। अधिकांश प्रोग्रामिंग लैंग्वेज विशुद्ध रूप से टेक्स्ट हैं; वे लिखित प्राकृतिक लैंग्वेजों के जैसे शब्दों, संख्याओं और विराम प्रतीकों सहित टेक्स्ट के क्रम का उपयोग करते हैं। दूसरी ओर, कुछ प्रोग्रामिंग लैंग्वेज प्रकृति में अधिक विज़ुअल प्रोग्रामिंग लैंग्वेज हैं, जो किसी प्रोग्राम को निर्दिष्ट करने के लिए प्रतीकों के बीच दृश्य संबंधों का उपयोग करती हैं।


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


प्रोग्रामिंग लैंग्वेज सिंटैक्स को सामान्यतः [[नियमित अभिव्यक्ति]] ([[शाब्दिक विश्लेषण]] संरचना के लिए) और बैकस-नौर रूप (संदर्भ-मुक्त व्याकरण संरचना के लिए) के संयोजन का उपयोग करके परिभाषित किया जाता है। लिस्प (प्रोग्रामिंग लैंग्वेज) पर आधारित सरल व्याकरण नीचे दिया गया है:
expression ::= atom | list
atomm::= number | symbol
numbere::= [+-]?['0'-'9']+
symbolb::= ['A'-'Z<nowiki>''</nowiki>a'-'z'].*
listt::= '(' expression* ')'
यह व्याकरण निम्नलिखित निर्दिष्ट करता है:
यह व्याकरण निम्नलिखित निर्दिष्ट करता है:
* एक अभिव्यक्ति या तो परमाणु या सूची है;
* एक अभिव्यक्ति या तो परमाणु या सूची है;
* एक परमाणु या तो एक संख्या या प्रतीक है;
* एक परमाणु या तो संख्या या प्रतीक है;
* एक संख्या एक या अधिक दशमलव अंकों का एक अखंड क्रम है, वैकल्पिक रूप से प्लस या माइनस चिह्न से पहले;
* एक संख्या या अधिक दशमलव अंकों का अखंड क्रम है, वैकल्पिक रूप से धन या ऋण प्रतीक से पहले;
* एक प्रतीक एक अक्षर है जिसके बाद शून्य या अधिक वर्ण होते हैं (व्हाट्सएप को छोड़कर); तथा
* एक प्रतीक अक्षर है जिसके बाद शून्य या अधिक वर्ण होते हैं (व्हाट्सएप को छोड़कर); तथा
* एक सूची कोष्ठकों की एक मिलान जोड़ी है, इसके अंदर शून्य या अधिक भाव हैं।
* एक सूची कोष्ठकों का मिलान युग्म है, इसके भीतर शून्य या अधिक भाव हैं।


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


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


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


निम्नलिखित सी (प्रोग्रामिंग भाषा) टुकड़ा वाक्य रचनात्मक रूप से सही है, लेकिन उन कार्यों को निष्पादित करता है जो शब्दार्थ परिभाषित नहीं हैं (संचालन <code>*p >> 4</code> एक जटिल प्रकार वाले मूल्य के लिए कोई अर्थ नहीं है और <code>p->im</code> परिभाषित नहीं है क्योंकि का मान <code>p</code> अशक्त सूचक है):
निम्नलिखित सी भाषा खंड वाक्यात्मक रूप से सही है, लेकिन ऐसे ऑपरेशन करता है जो सिमेंटिक रूप से परिभाषित नहीं हैं (ऑपरेशन <code>*p >> 4</code> का जटिल प्रकार वाले मान के लिए कोई अर्थ नहीं है और <code>p->im</code> परिभाषित नहीं है क्योंकि <code>p</code> अशक्त सूचक है):
complex *p = NULL;
complex abs_p = sqrt(*p >> 4 + p->im);
यदि पहली पंक्ति पर प्रकार की घोषणा छोड़ दी गई थी, तो प्रोग्राम संकलन के समय अपरिभाषित चर <code>p</code> पर एक त्रुटि ट्रिगर करेगा। यद्यपि, प्रोग्राम अभी भी वाक्य रचनात्मक रूप से उचित होगा क्योंकि प्रकार की घोषणाएं मात्र सिमेंटिक सूचना प्रदान करती हैं।


<वाक्यविन्यास प्रकाश लैंग = सी>
प्रोग्रामिंग लैंग्वेज को निर्दिष्ट करने के लिए आवश्यक व्याकरण को [[चॉम्स्की पदानुक्रम]] में अपनी स्थिति के अनुसार वर्गीकृत किया जा सकता है। अधिकांश प्रोग्रामिंग लैंग्वेजों के सिंटैक्स को टाइप-2 व्याकरण का उपयोग करके निर्दिष्ट किया जा सकता है, अर्थात, वे संदर्भ-मुक्त व्याकरण हैं।<ref>{{cite book|author=Michael Sipser|year=1996|title=संगणना के सिद्धांत का परिचय|publisher=PWS Publishing|isbn=978-0-534-94728-6 |author-link=Michael Sipser|title-link=संगणना के सिद्धांत का परिचय}} Section 2.2: Pushdown Automata, pp.101–114.</ref> पर्ल और लिस्प सहित कुछ लैंग्वेजों में ऐसे निर्माण होते हैं जो पार्सिंग चरण के समय निष्पादन की अनुमति देते हैं। ऐसी लैंग्वेज जिनमें ऐसे निर्माण होते हैं जो प्रोग्रामर को पार्सर के व्यवहार को बदलने की अनुमति देते हैं, सिंटैक्स विश्लेषण को [[अनिर्णीत समस्या]] बनाते हैं, और सामान्यतः पार्सिंग और निष्पादन के बीच के अंतर को अस्पष्ट करते हैं।<ref>Jeffrey Kegler, "[http://www.jeffreykegler.com/Home/perl-and-undecidability Perl and Undecidability] {{webarchive|url=https://web.archive.org/web/20090817183115/http://www.jeffreykegler.com/Home/perl-and-undecidability |date=17 August 2009 }}", ''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.</ref> लिस्प के मैक्रो सिस्टम और पर्ल के <code>BEGIN</code> ब्लॉक के विपरीत, जिसमें सामान्य गणनाएं हो सकती हैं, सी मैक्रोज़ मात्र स्ट्रिंग प्रतिस्थापन हैं और कोड निष्पादन की आवश्यकता नहीं होती है।<ref>Marty Hall, 1995, [http://www.apl.jhu.edu/~hall/Lisp-Notes/Macros.html Lecture Notes: Macros] {{webarchive|url=https://web.archive.org/web/20130806054148/http://www.apl.jhu.edu/~hall/Lisp-Notes/Macros.html |date=6 August 2013 }}, [[PostScript]] [http://www.apl.jhu.edu/~hall/Lisp-Notes/Macros.ps version] {{webarchive|url=https://web.archive.org/web/20000817211709/http://www.apl.jhu.edu/~hall/Lisp-Notes/Macros.ps |date=17 August 2000 }}</ref>
जटिल * पी = न्यूल;
=== सिमेंटिक ===
जटिल abs_p = sqrt (*p >> 4 + p->im);
सिमेंटिक्स कंप्यूटर विज्ञान शब्द का तात्पर्य ऐसी लैंग्वेजों के अर्थ से है, जैसा कि उनके रूप (सिंटेक्स) के विपरीत है।
</वाक्यविन्यास हाइलाइट>
 
==== स्टेटिक सिमेंटिक्स ====
स्थैतिक सिमेंटिक वैध टेक्स्टों की संरचना पर प्रतिबंधों को परिभाषित करता है जो मानक वाक्यात्मक औपचारिकताओं में व्यक्त करना कठिन या असंभव है।<ref name="Aaby 2004"/> संकलित लैंग्वेजों के लिए, स्थैतिक सिमेंटिक में अनिवार्य रूप से वे सिमेंटिक नियम सम्मिलित होते हैं जिन्हें संकलन समय पर जांचा जा सकता है। उदाहरणों में यह जाँचना सम्मिलित है कि प्रत्येक [[पहचानकर्ता]] को उपयोग किए जाने से पहले घोषित किया जाता है (ऐसी लैंग्वेजों में जिन्हें ऐसी घोषणाओं की आवश्यकता होती है) या यह कि [[केस स्टेटमेंट|केस कथन]] की भुजाओं पर लेबल अलग-अलग होते हैं।<ref>Michael Lee Scott, ''Programming language pragmatics'', Edition 2, Morgan Kaufmann, 2006, {{ISBN|0-12-633951-1}}, p. 18–19</ref> इस प्रकार के कई महत्वपूर्ण प्रतिबंध, जैसे कि यह जाँचना कि पहचानकर्ताओं का उपयोग उपयुक्त संदर्भ में किया जाता है (इस प्रकार से उदाहरण के लिए किसी संक्रिया नाम में पूर्णांक नहीं जोड़ना), या [[सबरूटीन]] कॉल में उपयुक्त संख्या और प्रकार के [[तर्क]] हैं, उन्हें नियमों के रूप में परिभाषित करके लागू किया जा सकता है तर्क में प्रकार प्रणाली कहा जाता है। [[स्थिर कोड विश्लेषण]] के अन्य रूप जैसे [[डेटा प्रवाह विश्लेषण]] भी स्थैतिक सिमेंटिक का भाग हो सकते हैं। जावा (प्रोग्रामिंग लैंग्वेज) और सी शार्प (प्रोग्रामिंग लैंग्वेज) जैसी नवीन प्रोग्रामिंग लैंग्वेज में [[निश्चित असाइनमेंट विश्लेषण]] है, जो उनके स्थिर सिमेंटिक के भाग के रूप में डेटा प्रवाह विश्लेषण का रूप है।


यदि पहली पंक्ति पर [[प्रकार की घोषणा]] को छोड़ दिया गया था, तो प्रोग्राम अपरिभाषित चर पर एक त्रुटि को ट्रिगर करेगा <code>p</code> संकलन के दौरान। हालांकि, कार्यक्रम अभी भी वाक्य रचनात्मक रूप से सही होगा क्योंकि प्रकार की घोषणाएं केवल सिमेंटिक जानकारी प्रदान करती हैं।
==== गतिशील सिमेंटिक ====
{{main|प्रोग्रामिंग लैंग्वेजों का सिमेंटिक}}


प्रोग्रामिंग भाषा को निर्दिष्ट करने के लिए आवश्यक व्याकरण को [[चॉम्स्की पदानुक्रम]] में अपनी स्थिति के अनुसार वर्गीकृत किया जा सकता है। अधिकांश प्रोग्रामिंग भाषाओं के सिंटैक्स को टाइप-2 व्याकरण का उपयोग करके निर्दिष्ट किया जा सकता है, अर्थात, वे संदर्भ-मुक्त व्याकरण हैं।<ref>{{cite book|author=Michael Sipser|year=1996|title=संगणना के सिद्धांत का परिचय|publisher=PWS Publishing|isbn=978-0-534-94728-6 |author-link=Michael Sipser|title-link=संगणना के सिद्धांत का परिचय}} Section 2.2: Pushdown Automata, pp.101–114.</ref> पर्ल और लिस्प सहित कुछ भाषाओं में ऐसे निर्माण होते हैं जो पार्सिंग चरण के दौरान निष्पादन की अनुमति देते हैं। ऐसी भाषाएँ जिनमें ऐसे निर्माण होते हैं जो प्रोग्रामर को पार्सर के व्यवहार को बदलने की अनुमति देते हैं, सिंटैक्स विश्लेषण को एक [[अनिर्णीत समस्या]] बनाते हैं, और आम तौर पर पार्सिंग और निष्पादन के बीच के अंतर को धुंधला करते हैं।<ref>Jeffrey Kegler, "[http://www.jeffreykegler.com/Home/perl-and-undecidability Perl and Undecidability] {{webarchive|url=https://web.archive.org/web/20090817183115/http://www.jeffreykegler.com/Home/perl-and-undecidability |date=17 August 2009 }}", ''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.</ref> लिस्प मैक्रो|लिस्प के मैक्रो सिस्टम और पर्ल के विपरीत <code>BEGIN</code> ब्लॉक, जिसमें सामान्य संगणनाएँ हो सकती हैं, C मैक्रोज़ केवल स्ट्रिंग प्रतिस्थापन हैं और कोड निष्पादन की आवश्यकता नहीं है।<ref>Marty Hall, 1995, [http://www.apl.jhu.edu/~hall/Lisp-Notes/Macros.html Lecture Notes: Macros] {{webarchive|url=https://web.archive.org/web/20130806054148/http://www.apl.jhu.edu/~hall/Lisp-Notes/Macros.html |date=6 August 2013 }}, [[PostScript]] [http://www.apl.jhu.edu/~hall/Lisp-Notes/Macros.ps version] {{webarchive|url=https://web.archive.org/web/20000817211709/http://www.apl.jhu.edu/~hall/Lisp-Notes/Macros.ps |date=17 August 2000 }}</ref>
एक बार डेटा निर्दिष्ट हो जाने के बाद, मशीन को डेटा पर ऑपरेशन करने का निर्देश दिया जाना चाहिए। इस प्रकार से उदाहरण के लिए, सिमेंटिक उस [[मूल्यांकन रणनीति|मूल्याकंन कार्यनीति]] को परिभाषित कर सकता है जिसके द्वारा मानों का मूल्याकंन किया जाता है, या जिस विधि से नियंत्रण प्रवाह सप्रतिबन्ध रूप से कथन (कंप्यूटर विज्ञान) को निष्पादित करता है। किसी लैंग्वेज का गतिशील सिमेंटिक (जिसे निष्पादन सिमेंटिक के रूप में भी जाना जाता है) यह परिभाषित करता है कि किसी लैंग्वेज के विभिन्न निर्माणों को कैसे और कब प्रोग्राम व्यवहार का उत्पादन करना चाहिए। निष्पादन सिमेंटिक को परिभाषित करने के कई विधि हैं। सामान्यतः अभ्यास में उपयोग की जाने वाली लैंग्वेजों के निष्पादन शब्दों को निर्दिष्ट करने के लिए प्राकृतिक लैंग्वेज का प्रयोग प्रायः किया जाता है। अकादमिक शोध का महत्वपूर्ण भाग प्रोग्रामिंग लैंग्वेजों के औपचारिक सिमेंटिक में चला गया, जो निष्पादन सिमेंटिक को औपचारिक विधि से निर्दिष्ट करने की अनुमति देता है। अनुसंधान के इस क्षेत्र के परिणामों ने शिक्षा के बाहर प्रोग्रामिंग लैंग्वेज डिजाइन और कार्यान्वयन के लिए सीमित अनुप्रयोग देखा है।


=== टाइप सिस्टम ===
{{Main|डेटा टाइप|टाइप सिस्टम|टाइप सेफ्टी}}


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


==== स्टेटिक सिमेंटिक्स ====
==== टाइप की गई बनाम अनटाइप की गई लैंग्वेज ====
स्थैतिक शब्दार्थ वैध पाठों की संरचना पर प्रतिबंधों को परिभाषित करता है जो मानक वाक्यात्मक औपचारिकताओं में व्यक्त करना कठिन या असंभव है।<ref name="Aaby 2004"/>संकलित भाषाओं के लिए, स्थैतिक शब्दार्थ में अनिवार्य रूप से वे शब्दार्थ नियम शामिल होते हैं जिन्हें संकलन समय पर जांचा जा सकता है। उदाहरणों में यह जाँचना शामिल है कि प्रत्येक [[पहचानकर्ता]] को उपयोग किए जाने से पहले घोषित किया जाता है (ऐसी भाषाओं में जिन्हें ऐसी घोषणाओं की आवश्यकता होती है) या यह कि [[केस स्टेटमेंट]] की भुजाओं पर लेबल अलग-अलग होते हैं।<ref>Michael Lee Scott, ''Programming language pragmatics'', Edition 2, Morgan Kaufmann, 2006, {{ISBN|0-12-633951-1}}, p. 18–19</ref> इस प्रकार के कई महत्वपूर्ण प्रतिबंध, जैसे कि यह जाँचना कि पहचानकर्ताओं का उपयोग उपयुक्त संदर्भ में किया जाता है (उदाहरण के लिए किसी फ़ंक्शन नाम में पूर्णांक नहीं जोड़ना), या [[सबरूटीन]] कॉल में उपयुक्त संख्या और प्रकार के [[तर्क]] हैं, उन्हें नियमों के रूप में परिभाषित करके लागू किया जा सकता है एक तर्क में एक प्रकार प्रणाली कहा जाता है। [[स्थिर कोड विश्लेषण]] के अन्य रूप जैसे [[डेटा प्रवाह विश्लेषण]] भी स्थैतिक शब्दार्थ का हिस्सा हो सकते हैं। जावा (प्रोग्रामिंग लैंग्वेज) और सी शार्प (प्रोग्रामिंग लैंग्वेज) जैसी नई प्रोग्रामिंग लैंग्वेज | सी # में [[निश्चित असाइनमेंट विश्लेषण]] है, जो उनके स्थिर शब्दार्थ के हिस्से के रूप में डेटा प्रवाह विश्लेषण का एक रूप है।
एक लैंग्वेज टाइप की जाती है यदि प्रत्येक ऑपरेशन का विनिर्देश उस प्रकार के डेटा को परिभाषित करता है जिस पर ऑपरेशन लागू होता है।<ref name="typing">{{cite web|url=http://www.acooke.org/comp-lang.html|author=Andrew Cooke|title=कंप्यूटर भाषाओं का परिचय|access-date=13 July 2012|url-status=live|archive-url=https://web.archive.org/web/20120815140215/http://www.acooke.org/comp-lang.html|archive-date=15 August 2012}}</ref> इस प्रकार से उदाहरण के लिए, <code>"this text between the quotes"</code> द्वारा दर्शाया गया डेटा एक स्ट्रिंग है, और कई प्रोग्रामिंग भाषाओं में किसी संख्या को स्ट्रिंग से विभाजित करने का कोई अर्थ नहीं है और इसे निष्पादित नहीं किया जाएगा। अमान्य ऑपरेशन का पता तब लगाया जा सकता है जब प्रोग्राम संकलित किया जाता है (स्थैतिक प्रकार की जाँच) और संकलन त्रुटि संदेश के साथ कम्पाइलर द्वारा अस्वीकार कर दिया जाएगा, या यह पता लगाया जा सकता है कि प्रोग्राम चल रहा है (गतिशील प्रकार की जाँच), जिसके परिणामस्वरूप रन- टाइम अपवाद हैंडलिंग। कई लैंग्वेज इस अपवाद को संभालने के लिए अपवाद हैंडलर नामक संक्रिया की अनुमति देती हैं और इस प्रकार से उदाहरण के लिए, परिणाम के रूप में सदैव -1 देती हैं।


==== गतिशील शब्दार्थ ====
टाइप की गई लैंग्वेजों की विशेष स्थिति एकल-टाइप की गई लैंग्वेज हैं। ये प्रायः स्क्रिप्टिंग या मार्कअप लैंग्वेज होती हैं, जैसे [[REXX|रेक्स्क्स]] या [[मानक सामान्यीकृत मार्कअप भाषा|मानक सामान्यीकृत मार्कअप लैंग्वेज]], और इनमें मात्र डेटा प्रकार होता है——सामान्यतः वर्ण तार जो प्रतीकात्मक और संख्यात्मक डेटा दोनों के लिए उपयोग किए जाते हैं।
{{main|Semantics of programming languages}}
एक बार डेटा निर्दिष्ट हो जाने के बाद, मशीन को डेटा पर संचालन करने का निर्देश दिया जाना चाहिए। उदाहरण के लिए, शब्दार्थ उस [[मूल्यांकन रणनीति]] को परिभाषित कर सकता है जिसके द्वारा मूल्यों का मूल्यांकन किया जाता है, या जिस तरीके से नियंत्रण प्रवाह सशर्त रूप से कथन (कंप्यूटर विज्ञान) को निष्पादित करता है। किसी भाषा का गतिशील शब्दार्थ (जिसे निष्पादन शब्दार्थ के रूप में भी जाना जाता है) यह परिभाषित करता है कि किसी भाषा के विभिन्न निर्माणों को कैसे और कब एक कार्यक्रम व्यवहार का उत्पादन करना चाहिए। निष्पादन शब्दार्थ को परिभाषित करने के कई तरीके हैं। आमतौर पर अभ्यास में उपयोग की जाने वाली भाषाओं के निष्पादन शब्दों को निर्दिष्ट करने के लिए प्राकृतिक भाषा का प्रयोग अक्सर किया जाता है। अकादमिक शोध का एक महत्वपूर्ण हिस्सा प्रोग्रामिंग भाषाओं के औपचारिक शब्दार्थ में चला गया, जो निष्पादन शब्दार्थ को औपचारिक तरीके से निर्दिष्ट करने की अनुमति देता है। अनुसंधान के इस क्षेत्र के परिणामों ने शिक्षा के बाहर प्रोग्रामिंग भाषा डिजाइन और कार्यान्वयन के लिए सीमित आवेदन देखा है।


=== टाइप सिस्टम ===
इसके विपरीत, अनटाइप्ड लैंग्वेज, जैसे कि अधिकांश असेंबली लैंग्वेज, किसी भी डेटा पर किसी भी ऑपरेशन को करने की अनुमति देती है, सामान्यतः विभिन्न लंबाई के बिट का क्रम।<ref name="typing"/> उच्च-स्तरीय अनटाइप्ड लैंग्वेजों में [[BCPL|बीसीपीएल]], [[Tcl|टीसीएल]], और [[फोर्थ (प्रोग्रामिंग भाषा)|फोर्थ (प्रोग्रामिंग लैंग्वेज)]] के कुछ प्रकार सम्मिलित हैं।
{{Main|Data type|Type system|Type safety}}
एक प्रकार प्रणाली परिभाषित करती है कि कैसे एक प्रोग्रामिंग भाषा मूल्यों और अभिव्यक्तियों को प्रकारों में वर्गीकृत करती है, यह कैसे उन प्रकारों में हेरफेर कर सकती है और वे कैसे बातचीत करते हैं। एक प्रकार की प्रणाली का लक्ष्य कुछ गलत संचालन का पता लगाकर उस भाषा में लिखे गए कार्यक्रमों में एक निश्चित स्तर की शुद्धता को सत्यापित करना और आमतौर पर लागू करना है। किसी भी [[निर्णायकता (तर्क)]] प्रकार की प्रणाली में एक व्यापार-बंद शामिल होता है: जबकि यह कई गलत कार्यक्रमों को अस्वीकार करता है, यह कुछ सही, यद्यपि असामान्य कार्यक्रमों को भी प्रतिबंधित कर सकता है। इस नकारात्मक पक्ष को बायपास करने के लिए, कई भाषाओं में प्रकार की खामियां हैं, आमतौर पर अनियंत्रित प्रकार रूपांतरण #स्पष्ट प्रकार रूपांतरण जो प्रोग्रामर द्वारा विभिन्न प्रकारों के बीच सामान्य रूप से अस्वीकृत संचालन को स्पष्ट रूप से अनुमति देने के लिए उपयोग किया जा सकता है। अधिकांश टाइप की गई भाषाओं में, टाइप सिस्टम का उपयोग केवल [[प्रकार की जाँच]] प्रोग्राम के लिए किया जाता है, लेकिन कई भाषाएँ, आमतौर पर कार्यात्मक, [[अनुमान टाइप करें]], प्रोग्रामर को टाइप एनोटेशन लिखने की आवश्यकता से राहत देती हैं। टाइप सिस्टम के औपचारिक डिजाइन और अध्ययन को [[प्रकार सिद्धांत]] के रूप में जाना जाता है।


==== टाइप की गई बनाम अनटाइप की गई भाषाएं ====
व्यवहार में, जबकि कुछ लैंग्वेजों को टाइप सिद्धांत से टाइप किया हुआ माना जाता है (सभी ऑपरेशनों को सत्यापित या अस्वीकार करते हुए), अधिकांश आधुनिक लैंग्वेज टाइपिंग की डिग्री प्रदान करती हैं।<ref name="typing"/> कई प्रोडक्शन लैंग्वेज प्रोग्राम के निष्पादन पर ठीक नियंत्रण के लिए टाइप सिस्टम, ट्रेडिंग टाइप सेफ्टी को बायपास या सबवर्ट करने के साधन प्रदान करती हैं (स्पष्ट प्रकार रूपांतरण देखें )
एक भाषा टाइप की जाती है यदि प्रत्येक ऑपरेशन का विनिर्देश उस प्रकार के डेटा को परिभाषित करता है जिस पर ऑपरेशन लागू होता है।<ref name="typing">{{cite web|url=http://www.acooke.org/comp-lang.html|author=Andrew Cooke|title=कंप्यूटर भाषाओं का परिचय|access-date=13 July 2012|url-status=live|archive-url=https://web.archive.org/web/20120815140215/http://www.acooke.org/comp-lang.html|archive-date=15 August 2012}}</ref> उदाहरण के लिए, द्वारा दर्शाया गया डेटा <code>"this text between the quotes"</code> एक स्ट्रिंग शाब्दिक है, और कई प्रोग्रामिंग भाषाओं में एक संख्या को एक स्ट्रिंग से विभाजित करने का कोई अर्थ नहीं है और इसे निष्पादित नहीं किया जाएगा। अमान्य ऑपरेशन का पता तब लगाया जा सकता है जब प्रोग्राम संकलित किया जाता है (स्थैतिक प्रकार की जाँच) और संकलन त्रुटि संदेश के साथ संकलक द्वारा अस्वीकार कर दिया जाएगा, या यह पता लगाया जा सकता है कि प्रोग्राम चल रहा है (गतिशील प्रकार की जाँच), जिसके परिणामस्वरूप एक रन- समय अपवाद हैंडलिंग। कई भाषाएं इस अपवाद को संभालने के लिए एक अपवाद हैंडलर नामक फ़ंक्शन की अनुमति देती हैं और उदाहरण के लिए, परिणाम के रूप में हमेशा -1 लौटाती हैं।


टाइप की गई भाषाओं का एक विशेष मामला एकल-टाइप की गई भाषाएँ हैं। ये अक्सर स्क्रिप्टिंग या मार्कअप भाषाएँ होती हैं, जैसे [[REXX]] या [[मानक सामान्यीकृत मार्कअप भाषा]], और इनमें केवल एक डेटा प्रकार होता है{{dubious|date=March 2018}}——आमतौर पर वर्ण तार जो प्रतीकात्मक और संख्यात्मक डेटा दोनों के लिए उपयोग किए जाते हैं।
==== स्टेटिक विज़-ए-विज़ डायनामिक टाइपिंग ====
टाइप सिस्टम में, प्रोग्राम के निष्पादित होने से पहले, सामान्यतः कंपाइल-टाइम पर, सभी एक्सप्रेशंस के प्रकार निर्धारित किए जाते हैं। इस प्रकार से उदाहरण के लिए, 1 और (2+2) पूर्णांक व्यंजक हैं; उन्हें किसी ऐसे संक्रिया में पास नहीं किया जा सकता है जो स्ट्रिंग की अपेक्षा करता है या वेरिएबल में संग्रहीत होता है जिसे दिनांक रखने के लिए परिभाषित किया जाता है।<ref name="typing"/>


इसके विपरीत, एक अनटाइप्ड लैंग्वेज, जैसे कि अधिकांश असेंबली लैंग्वेज, किसी भी डेटा पर किसी भी ऑपरेशन को करने की अनुमति देती है, आमतौर पर विभिन्न लंबाई के बिट्स का क्रम।<ref name="typing"/>उच्च-स्तरीय अनटाइप्ड भाषाओं में [[BCPL]], [[Tcl]], और [[फोर्थ (प्रोग्रामिंग भाषा)]] की कुछ किस्में शामिल हैं।
वैधानिक रूप से टाइप की गई लैंग्वेज या तो [[प्रकट टाइपिंग|मेनिफेस्ट टाइपिंग]] रूप से टाइप की जा सकती हैं या टाइप इंफ़ेक्शन हो सकती हैं। पहली स्थिति में, प्रोग्रामर को स्पष्ट रूप से कुछ टेक्स्ट पोजीशन पर टाइप लिखना चाहिए (इस प्रकार से उदाहरण के लिए, वेरिएबल डिक्लेरेशन (कंप्यूटर साइंस) पर)। दूसरे स्थिति में, कम्पाइलर संदर्भ के आधार पर भावों और घोषणाओं के प्रकारों का अनुमान लगाता है। अधिकांश मुख्य रूप से वैधानिक रूप से टाइप की जाने वाली लैंग्वेज, जैसे C++, C Sharp (प्रोग्रामिंग लैंग्वेज) और Java (प्रोग्रामिंग लैंग्वेज), मेनिफेस्ट रूप से टाइप की जाती हैं। पूर्ण प्रकार का अनुमान परंपरागत रूप से कम मुख्यधारा की लैंग्वेजों से जुड़ा हुआ है, जैसे [[हास्केल (प्रोग्रामिंग भाषा)|हास्केल (प्रोग्रामिंग लैंग्वेज)]] और एमएल (प्रोग्रामिंग लैंग्वेज)। यद्यपि, कई मेनिफेस्ट रूप से टाइप की गई लैंग्वेज आंशिक प्रकार के अनुमान का समर्थन करती हैं; इस प्रकार से उदाहरण के लिए, सी ++, जावा (प्रोग्रामिंग लैंग्वेज), और सी शार्प (प्रोग्रामिंग लैंग्वेज) कुछ सीमित स्थितियों में सभी अनुमान प्रकार।<ref>Specifically, instantiations of [[generic programming|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 [[polymorphism in object-oriented programming|parametric polymorphism]] extensions—is discussed in two informal manuscripts from the Types mailing list: [http://www.seas.upenn.edu/~sweirich/types/archive/1999-2003/msg00849.html Generic Java type inference is unsound] {{webarchive|url=https://web.archive.org/web/20070129073839/http://www.seas.upenn.edu/~sweirich/types/archive/1999-2003/msg00849.html |date=29 January 2007 }} ([[Alan Jeffrey]], 17 December 2001) and [http://www.seas.upenn.edu/~sweirich/types/archive/1999-2003/msg00921.html Sound Generic Java type inference] {{webarchive|url=https://web.archive.org/web/20070129073849/http://www.seas.upenn.edu/~sweirich/types/archive/1999-2003/msg00921.html |date=29 January 2007 }} ([[Martin Odersky]], 15 January 2002). C#'s type system is similar to Java's and uses a similar partial type inference scheme.</ref> इसके अतिरिक्त, कुछ प्रोग्रामिंग लैंग्वेज कुछ प्रकारों को स्वचालित रूप से अन्य प्रकारों में परिवर्तित करने की अनुमति देती हैं; इस प्रकार से उदाहरण के लिए, इंट का उपयोग किया जा सकता है जहां प्रोग्राम फ्लोट की अपेक्षा करता है।


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


==== स्टेटिक विज़-ए-विज़ डायनामिक टाइपिंग ====
==== वीक और स्ट्रोंग टाइपिंग ====
टाइप सिस्टम में, प्रोग्राम के निष्पादित होने से पहले, आमतौर पर कंपाइल-टाइम पर, सभी एक्सप्रेशंस के प्रकार निर्धारित किए जाते हैं। उदाहरण के लिए, 1 और (2+2) पूर्णांक व्यंजक हैं; उन्हें किसी ऐसे फ़ंक्शन में पास नहीं किया जा सकता है जो स्ट्रिंग की अपेक्षा करता है या एक वेरिएबल में संग्रहीत होता है जिसे दिनांक रखने के लिए परिभाषित किया जाता है।<ref name="typing"/>
[[कमजोर टाइपिंग|वीक टाइपिंग]] प्रकार के मान को दूसरे के रूप में व्यवहार करने की अनुमति देता है, इस प्रकार से उदाहरण के लिए [[स्ट्रिंग (कंप्यूटर विज्ञान)]] को संख्या के रूप में मानना है।<ref name="typing"/> यह कभी-कभी उपयोगी हो सकता है, परन्तु यह कुछ प्रकार के प्रोग्राम दोषों को [[संकलन समय]] और यहां तक ​​कि रन टाइम (प्रोग्राम लाइफसाइकिल चरण) पर भी अनदेखा करने की अनुमति दे सकता है।


वैधानिक रूप से टाइप की गई भाषाएँ या तो [[प्रकट टाइपिंग]] हो सकती हैं या टाइप इंफ़ेक्शन | टाइप-इनफ़र्ड। पहले मामले में, प्रोग्रामर को स्पष्ट रूप से कुछ टेक्स्ट पोजीशन पर टाइप लिखना चाहिए (उदाहरण के लिए, वेरिएबल डिक्लेरेशन (कंप्यूटर साइंस) पर)। दूसरे मामले में, संकलक संदर्भ के आधार पर भावों और घोषणाओं के प्रकारों का अनुमान लगाता है। अधिकांश मुख्य रूप से वैधानिक रूप से टाइप की जाने वाली भाषाएँ, जैसे C++, C Sharp (प्रोग्रामिंग भाषा)|C# और Java (प्रोग्रामिंग भाषा), प्रकट रूप से टाइप की जाती हैं। पूर्ण प्रकार का अनुमान परंपरागत रूप से कम मुख्यधारा की भाषाओं से जुड़ा हुआ है, जैसे [[हास्केल (प्रोग्रामिंग भाषा)]] और एमएल (प्रोग्रामिंग भाषा)। हालाँकि, कई प्रकट रूप से टाइप की गई भाषाएँ आंशिक प्रकार के अनुमान का समर्थन करती हैं; उदाहरण के लिए, सी ++, जावा (प्रोग्रामिंग भाषा), और सी शार्प (प्रोग्रामिंग भाषा) | सी # कुछ सीमित मामलों में सभी अनुमान प्रकार।<ref>Specifically, instantiations of [[generic programming|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 [[polymorphism in object-oriented programming|parametric polymorphism]] extensions—is discussed in two informal manuscripts from the Types mailing list: [http://www.seas.upenn.edu/~sweirich/types/archive/1999-2003/msg00849.html Generic Java type inference is unsound] {{webarchive|url=https://web.archive.org/web/20070129073839/http://www.seas.upenn.edu/~sweirich/types/archive/1999-2003/msg00849.html |date=29 January 2007 }} ([[Alan Jeffrey]], 17 December 2001) and [http://www.seas.upenn.edu/~sweirich/types/archive/1999-2003/msg00921.html Sound Generic Java type inference] {{webarchive|url=https://web.archive.org/web/20070129073849/http://www.seas.upenn.edu/~sweirich/types/archive/1999-2003/msg00921.html |date=29 January 2007 }} ([[Martin Odersky]], 15 January 2002). C#'s type system is similar to Java's and uses a similar partial type inference scheme.</ref> इसके अतिरिक्त, कुछ प्रोग्रामिंग भाषाएं कुछ प्रकारों को स्वचालित रूप से अन्य प्रकारों में परिवर्तित करने की अनुमति देती हैं; उदाहरण के लिए, एक इंट का उपयोग किया जा सकता है जहां प्रोग्राम फ्लोट की अपेक्षा करता है।
सशक्त रूप से टाइप की गई प्रोग्रामिंग लैंग्वेज इन प्रोग्राम दोषों को रोकती है। असत्य प्रकार के मान पर कोई ऑपरेशन करने का प्रयास त्रुटि उत्पन्न करता है।<ref name="typing"/> स्ट्रोंग टाइप की गई लैंग्वेजों को प्रायः टाइप-सेफ या एक [[प्रकार की सुरक्षा]] कहा जाता है।


टाइप सिस्टम, जिसे गुप्त टाइपिंग भी कहा जाता है, रन टाइम पर संचालन की प्रकार-सुरक्षा निर्धारित करता है; दूसरे शब्दों में, प्रकार शाब्दिक अभिव्यक्तियों के बजाय रन-टाइम मानों से जुड़े होते हैं।<ref name="typing"/>प्रकार-अनुमानित भाषाओं की तरह, गतिशील रूप से टाइप की गई भाषाओं के लिए प्रोग्रामर को अभिव्यक्तियों पर स्पष्ट प्रकार के एनोटेशन लिखने की आवश्यकता नहीं होती है। अन्य बातों के अलावा, यह प्रोग्राम निष्पादन में विभिन्न बिंदुओं पर विभिन्न प्रकार के मानों को संदर्भित करने के लिए एकल चर की अनुमति दे सकता है। हालाँकि, टाइप [[सॉफ्टवेयर बग]] को स्वचालित रूप से तब तक नहीं पहचाना जा सकता जब तक कि कोड का एक टुकड़ा वास्तव में निष्पादित न हो जाए, संभावित रूप से [[डिबगिंग]] को और अधिक कठिन बना देता है। लिस्प (प्रोग्रामिंग लैंग्वेज), स्मॉलटाक, पर्ल, पायथन (प्रोग्रामिंग लैंग्वेज), [[जावास्क्रिप्ट]] और [[रूबी (प्रोग्रामिंग भाषा)]] गतिशील रूप से टाइप की गई भाषाओं के सभी उदाहरण हैं।
वीक रूप से टाइप की गई वैकल्पिक परिभाषा लैंग्वेजों को संदर्भित करती है, जैसे कि पर्ल और जावास्क्रिप्ट, जो बड़ी संख्या में निहित प्रकार के रूपांतरणों की अनुमति देती हैं। जावास्क्रिप्ट में, इस प्रकार से उदाहरण के लिए, अभिव्यक्ति <code>2 * x</code> परोक्ष रूप से <code>x</code> को एक संख्या में परिवर्तित करता है, और यह रूपांतरण तब भी सफल होता है, जब <code>x</code> <code>null</code>, <code>undefined</code>, <code>Array</code> या अक्षरों की एक स्ट्रिंग हो। ऐसे अंतर्निहित रूपांतरण प्रायः उपयोगी होते हैं, परन्तु वे प्रोग्रामिंग त्रुटियों को छिपा सकते हैं।


==== कमजोर और मजबूत टाइपिंग ====
स्ट्रोंग और स्थिर अब सामान्यतः लाम्बिक अवधारणाएं मानी जाती हैं, परन्तु साहित्य में उपयोग अलग है। कुछ शब्द दृढ़ता से टाइप किए गए शब्द का उपयोग दृढ़ता से, स्थिर रूप से टाइप किए गए, या इससे भी अधिक भ्रमित करने के लिए किया जाता है, जिसका अर्थ है कि मात्र स्थिर रूप से टाइप किया गया है। इस प्रकार C (प्रोग्रामिंग लैंग्वेज) को दृढ़ता से टाइप किया गया और वीक रूप से टाइप किया गया दोनों कहा गया है।<ref>{{cite web|url=http://www.schemers.org/Documents/Standards/R5RS/HTML/r5rs-Z-H-4.html|title=एल्गोरिदम भाषा योजना पर संशोधित रिपोर्ट|date=20 February 1998|url-status=live|archive-url=https://web.archive.org/web/20060714212928/http://www.schemers.org/Documents/Standards/R5RS/HTML/r5rs-Z-H-4.html|archive-date=14 July 2006}}</ref><ref>{{cite web|url=http://citeseer.ist.psu.edu/cardelli85understanding.html|title=अंडरस्टैंडिंग टाइप्स, डेटा एब्स्ट्रेक्शन और पॉलीमॉर्फिज्म पर|author=[[Luca Cardelli]] and [[Peter Wegner]]|work=Manuscript (1985)|url-status=live|archive-url=https://web.archive.org/web/20060619072646/http://citeseer.ist.psu.edu/cardelli85understanding.html|archive-date=19 June 2006}}</ref>
[[कमजोर टाइपिंग]] एक प्रकार के मान को दूसरे के रूप में व्यवहार करने की अनुमति देता है, उदाहरण के लिए एक [[स्ट्रिंग (कंप्यूटर विज्ञान)]] को एक संख्या के रूप में मानना।<ref name="typing"/>यह कभी-कभी उपयोगी हो सकता है, लेकिन यह कुछ प्रकार के प्रोग्राम दोषों को [[संकलन समय]] और यहां तक ​​कि रन टाइम (प्रोग्राम लाइफसाइकिल चरण) पर भी अनदेखा करने की अनुमति दे सकता है।


सशक्त रूप से टाइप की गई प्रोग्रामिंग भाषा इन प्रोग्राम दोषों को रोकती है। गलत प्रकार के मान पर कोई ऑपरेशन करने का प्रयास एक त्रुटि उत्पन्न करता है।<ref name="typing"/>जोरदार टाइप की गई भाषाओं को अक्सर टाइप-सेफ या [[प्रकार की सुरक्षा]] कहा जाता है।
कुछ वृत्तिक प्रोग्रामरों को यह विचित्र लग सकता है कि सी वीक, वैधानिक रूप से टाइप किया जा सकता है। यद्यपि, ध्यान दें कि जेनेरिक पॉइंटर, वोयड * पॉइंटर का उपयोग, स्पष्ट कास्ट करने की आवश्यकता के बिना अन्य पॉइंटर्स को कास्टिंग पॉइंटर्स की अनुमति देता है। यह किसी स्पष्ट कास्ट जैसे <code>(int)</code> या <code>(char)</code> का उपयोग किए बिना C में किसी भी प्रकार के डेटाटाइप में बाइट की एक सरणी को कास्ट करने के समान है।


कमजोर रूप से टाइप की गई एक वैकल्पिक परिभाषा भाषाओं को संदर्भित करती है, जैसे कि पर्ल और जावास्क्रिप्ट, जो बड़ी संख्या में निहित प्रकार के रूपांतरणों की अनुमति देती हैं। जावास्क्रिप्ट में, उदाहरण के लिए, अभिव्यक्ति <code>2 * x</code> परोक्ष रूप से रूपांतरित करता है <code>x</code> एक संख्या के लिए, और यह रूपांतरण तब भी सफल होता है जब <code>x</code> है <code>null</code>, <code>undefined</code>, एक <code>Array</code>, या अक्षरों की एक स्ट्रिंग। ऐसे अंतर्निहित रूपांतरण अक्सर उपयोगी होते हैं, लेकिन वे प्रोग्रामिंग त्रुटियों को छिपा सकते हैं।
=== मानक लाइब्रेरी और रन-टाइम सिस्टम ===
मजबूत और स्थिर अब आम तौर पर ऑर्थोगोनल अवधारणाएं मानी जाती हैं, लेकिन साहित्य में उपयोग अलग है। कुछ शब्द दृढ़ता से टाइप किए गए शब्द का उपयोग दृढ़ता से, स्थिर रूप से टाइप किए गए, या इससे भी अधिक भ्रमित करने के लिए किया जाता है, जिसका अर्थ है कि केवल स्थिर रूप से टाइप किया गया है। इस प्रकार C (प्रोग्रामिंग लैंग्वेज) को दृढ़ता से टाइप किया गया और कमजोर रूप से टाइप किया गया, दोनों कहा गया है।<ref>{{cite web|url=http://www.schemers.org/Documents/Standards/R5RS/HTML/r5rs-Z-H-4.html|title=एल्गोरिदम भाषा योजना पर संशोधित रिपोर्ट|date=20 February 1998|url-status=live|archive-url=https://web.archive.org/web/20060714212928/http://www.schemers.org/Documents/Standards/R5RS/HTML/r5rs-Z-H-4.html|archive-date=14 July 2006}}</ref><ref>{{cite web|url=http://citeseer.ist.psu.edu/cardelli85understanding.html|title=अंडरस्टैंडिंग टाइप्स, डेटा एब्स्ट्रेक्शन और पॉलीमॉर्फिज्म पर|author=[[Luca Cardelli]] and [[Peter Wegner]]|work=Manuscript (1985)|url-status=live|archive-url=https://web.archive.org/web/20060619072646/http://citeseer.ist.psu.edu/cardelli85understanding.html|archive-date=19 June 2006}}</ref>
{{main|मानक लाइब्रेरी}}
कुछ पेशेवर प्रोग्रामरों को यह अजीब लग सकता है कि सी कमजोर, वैधानिक रूप से टाइप किया जा सकता है। हालाँकि, ध्यान दें कि जेनेरिक पॉइंटर, शून्य * पॉइंटर का उपयोग, स्पष्ट कास्ट करने की आवश्यकता के बिना अन्य पॉइंटर्स को कास्टिंग पॉइंटर्स की अनुमति देता है। यह किसी स्पष्ट कास्ट का उपयोग किए बिना सी में किसी भी प्रकार के डेटाटाइप को बाइट्स की सरणी डालने के समान ही है <code>(int)</code> या <code>(char)</code>.


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


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


== डिजाइन और कार्यान्वयन ==
== डिजाइन और कार्यान्वयन ==
प्रोग्रामिंग भाषाएं संचार के लिए वाहनों के रूप में अपने उद्देश्य से संबंधित प्राकृतिक भाषाओं के साथ गुणों को साझा करती हैं, इसके शब्दार्थ से अलग एक वाक्यात्मक रूप है, और संबंधित भाषाओं के भाषा परिवारों को एक दूसरे से अलग करके दिखाती है।<ref name="Fischer">Steven R. Fischer, ''A history of language'', Reaktion Books, 2003, {{ISBN|1-86189-080-X}}, p. 205</ref><ref name="levenez">{{cite web|author=Éric Lévénez|title=कंप्यूटर भाषा इतिहास|year=2011|url=http://www.levenez.com/lang/|url-status=live|archive-url=https://web.archive.org/web/20060107162045/http://www.levenez.com/lang/|archive-date=7 January 2006}}</ref> लेकिन कृत्रिम निर्माण के रूप में, वे उपयोग के माध्यम से विकसित हुई भाषाओं से मौलिक तरीकों से भी भिन्न हैं। एक महत्वपूर्ण अंतर यह है कि एक प्रोग्रामिंग भाषा का पूरी तरह से वर्णन और अध्ययन किया जा सकता है क्योंकि इसकी एक सटीक और परिमित परिभाषा है।<ref>{{cite web|url=http://www.cs.cornell.edu/info/Projects/Nuprl/cs611/fall94notes/cn2/subsection3_1_3.html|author=Jing Huang|title=कृत्रिम भाषा बनाम प्राकृतिक भाषा|url-status=live|archive-url=https://web.archive.org/web/20090903084542/http://www.cs.cornell.edu/info/Projects/Nuprl/cs611/fall94notes/cn2/subsection3_1_3.html|archive-date=3 September 2009}}</ref> इसके विपरीत, प्राकृतिक भाषाओं के अलग-अलग समुदायों में उनके उपयोगकर्ताओं द्वारा दिए गए अर्थ बदलते रहते हैं। जबकि [[निर्मित भाषाएँ]] भी एक विशिष्ट उद्देश्य के साथ जमीन से डिज़ाइन की गई कृत्रिम भाषाएँ हैं, उनमें एक प्रोग्रामिंग भाषा की सटीक और पूर्ण शब्दार्थ परिभाषा का अभाव है।
प्रोग्रामिंग लैंग्वेज संचार के लिए वाहनों के रूप में अपने उद्देश्य से संबंधित प्राकृतिक लैंग्वेजों के साथ गुणों को साझा करती हैं, इसके सिमेंटिक से अलग वाक्यात्मक रूप है, और संबंधित लैंग्वेजों के लैंग्वेज वर्गों को दूसरे से अलग करके दिखाती है।<ref name="Fischer">Steven R. Fischer, ''A history of language'', Reaktion Books, 2003, {{ISBN|1-86189-080-X}}, p. 205</ref><ref name="levenez">{{cite web|author=Éric Lévénez|title=कंप्यूटर भाषा इतिहास|year=2011|url=http://www.levenez.com/lang/|url-status=live|archive-url=https://web.archive.org/web/20060107162045/http://www.levenez.com/lang/|archive-date=7 January 2006}}</ref> परन्तु कृत्रिम निर्माण के रूप में, वे उपयोग के माध्यम से विकसित हुई लैंग्वेजों से मौलिक विधियों से भी भिन्न हैं। महत्वपूर्ण अंतर यह है कि प्रोग्रामिंग लैंग्वेज का पूर्ण रूप से वर्णन और अध्ययन किया जा सकता है क्योंकि इसकी यथार्थ और परिमित परिभाषा है।<ref>{{cite web|url=http://www.cs.cornell.edu/info/Projects/Nuprl/cs611/fall94notes/cn2/subsection3_1_3.html|author=Jing Huang|title=कृत्रिम भाषा बनाम प्राकृतिक भाषा|url-status=live|archive-url=https://web.archive.org/web/20090903084542/http://www.cs.cornell.edu/info/Projects/Nuprl/cs611/fall94notes/cn2/subsection3_1_3.html|archive-date=3 September 2009}}</ref> इसके विपरीत, प्राकृतिक लैंग्वेजों के अलग-अलग समुदायों में उनके उपयोगकर्ताओं द्वारा दिए गए अर्थ बदलते रहते हैं। जबकि [[निर्मित भाषाएँ|निर्मित लैंग्वेज]] भी विशिष्ट उद्देश्य के साथ आधार से डिज़ाइन की गई कृत्रिम लैंग्वेज हैं, उनमें प्रोग्रामिंग लैंग्वेज की यथार्थ और पूर्ण सिमेंटिक परिभाषा का अभाव है।


कई प्रोग्रामिंग लैंग्वेज को स्क्रैच से डिजाइन किया गया है, नई जरूरतों को पूरा करने के लिए बदल दिया गया है और अन्य भाषाओं के साथ जोड़ा गया है। कई अंततः अनुपयोगी हो गए हैं। यद्यपि एक सार्वभौमिक प्रोग्रामिंग भाषा को डिजाइन करने के प्रयास किए गए हैं जो सभी उद्देश्यों को पूरा करती है, वे सभी इस भूमिका को भरने के रूप में आम तौर पर स्वीकार करने में विफल रहे हैं।<ref>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." ({{cite encyclopedia|url=http://www.encyclopediaofmath.org/index.php?title=PL/I&oldid=19175|title=PL/I|encyclopedia=Encyclopedia of Mathematics|access-date=29 June 2006|url-status=live|archive-url=https://web.archive.org/web/20120426010947/http://www.encyclopediaofmath.org/index.php?title=PL%2FI&oldid=19175|archive-date=26 April 2012}}). [[Ada (programming language)|Ada]] and [[UNCOL]] had similar early goals.</ref> विविध प्रोग्रामिंग भाषाओं की आवश्यकता उन संदर्भों की विविधता से उत्पन्न होती है जिनमें भाषाओं का उपयोग किया जाता है:
कई प्रोग्रामिंग लैंग्वेज को स्क्रैच से डिजाइन किया गया है, नवीन आवश्यकताओं को पूर्ण करने के लिए बदल दिया गया है और अन्य लैंग्वेजों के साथ जोड़ा गया है। कई अंततः अनुपयोगी हो गए हैं। यद्यपि सार्वभौमिक प्रोग्रामिंग लैंग्वेज को डिजाइन करने के प्रयास किए गए हैं जो सभी उद्देश्यों को पूर्ण करती है, वे सभी इस भूमिका को भरने के रूप में सामान्यतः स्वीकार करने में विफल रहे हैं।<ref>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." ({{cite encyclopedia|url=http://www.encyclopediaofmath.org/index.php?title=PL/I&oldid=19175|title=PL/I|encyclopedia=Encyclopedia of Mathematics|access-date=29 June 2006|url-status=live|archive-url=https://web.archive.org/web/20120426010947/http://www.encyclopediaofmath.org/index.php?title=PL%2FI&oldid=19175|archive-date=26 April 2012}}). [[Ada (programming language)|Ada]] and [[UNCOL]] had similar early goals.</ref> विविध प्रोग्रामिंग लैंग्वेजों की आवश्यकता उन संदर्भों की विविधता से उत्पन्न होती है जिनमें लैंग्वेजों का उपयोग किया जाता है:
* कार्यक्रमों में व्यक्तिगत शौकियों द्वारा लिखी गई छोटी लिपियों से लेकर सैकड़ों [[प्रोग्रामर]]ों द्वारा लिखी गई विशाल प्रणालियाँ शामिल हैं।
* प्रोग्रामों में व्यक्तिगत रुचिपूर्ण से लिखी गई छोटी लिपियों से लेकर सैकड़ों [[प्रोग्रामर|प्रोग्रामरों]] द्वारा लिखी गई विशाल प्रणालियाँ सम्मिलित हैं।
* प्रोग्रामर नौसिखियों से विशेषज्ञता में होते हैं जिन्हें सादगी की सबसे ज्यादा जरूरत होती है, उन विशेषज्ञों के लिए जो काफी जटिलता के साथ सहज हो सकते हैं।
* प्रोग्रामर नवीन लोगों से विशेषज्ञता में होते हैं जिन्हें सादगी की सबसे अधिक आवश्यकता होती है, उन विशेषज्ञों के लिए जो अत्यधिक जटिलता के साथ सहज हो सकते हैं।
* कार्यक्रमों को [[microcontroller]] से लेकर [[सुपर कंप्यूटर]] तक की प्रणालियों पर गति, आकार और सरलता को संतुलित करना चाहिए।
* प्रोग्रामों को [[microcontroller|माइक्रो नियंत्रक]] से लेकर [[सुपर कंप्यूटर]] तक की प्रणालियों पर गति, आकार और सरलता को संतुलित करना चाहिए।
* कार्यक्रम एक बार लिखे जा सकते हैं और पीढ़ियों तक नहीं बदले जा सकते हैं, या वे लगातार संशोधन से गुजर सकते हैं।
* प्रोग्राम एक बार लिखे जा सकते हैं और पीढ़ियों तक नहीं बदले जा सकते हैं, या वे निरंतर संशोधन से गुजर सकते हैं।
* प्रोग्रामर बस अपने स्वाद में भिन्न हो सकते हैं: वे समस्याओं पर चर्चा करने और उन्हें किसी विशेष भाषा में व्यक्त करने के आदी हो सकते हैं।
* प्रोग्रामर मात्र अपने पसंद में भिन्न हो सकते हैं: वे समस्याओं पर चर्चा करने और उन्हें किसी विशेष लैंग्वेज में व्यक्त करने के में प्रवृत हो सकते हैं।


प्रोग्रामिंग भाषाओं के विकास में एक सामान्य प्रवृत्ति उच्च स्तर के अमूर्तन (कंप्यूटर विज्ञान) का उपयोग करके समस्याओं को हल करने की अधिक क्षमता जोड़ना है। शुरुआती प्रोग्रामिंग लैंग्वेज कंप्यूटर के अंतर्निहित हार्डवेयर से बहुत करीब से जुड़ी हुई थीं। जैसे-जैसे नई प्रोग्रामिंग भाषाएँ विकसित हुई हैं, सुविधाएँ जोड़ी गई हैं जो प्रोग्रामर को उन विचारों को व्यक्त करने देती हैं जो सरल अनुवाद से अंतर्निहित हार्डवेयर निर्देशों में अधिक दूरस्थ हैं। क्योंकि प्रोग्रामर कंप्यूटर की जटिलता से कम बंधे होते हैं, उनके प्रोग्राम प्रोग्रामर के कम प्रयास से अधिक कंप्यूटिंग कर सकते हैं। यह उन्हें प्रति समय इकाई में अधिक कार्यात्मकता लिखने देता है।<ref>Frederick P. Brooks, Jr.: ''The Mythical Man-Month'', Addison-Wesley, 1982, pp. 93–94</ref>
प्रोग्रामिंग लैंग्वेजों के विकास में सामान्य प्रवृत्ति उच्च स्तर के अमूर्तन (कंप्यूटर विज्ञान) का उपयोग करके समस्याओं को हल करने की अधिक क्षमता जोड़ना है। प्रारंभिक प्रोग्रामिंग लैंग्वेज कंप्यूटर के अंतर्निहित हार्डवेयर से बहुत निकट से जुड़ी हुई थीं। जैसे-जैसे नवीन प्रोग्रामिंग लैंग्वेज विकसित हुई हैं, सुविधाएँ जोड़ी गई हैं जो प्रोग्रामर को उन विचारों को व्यक्त करने देती हैं जो सरल अनुवाद से अंतर्निहित हार्डवेयर निर्देशों में अधिक दूरस्थ हैं। क्योंकि प्रोग्रामर कंप्यूटर की जटिलता से कम बंधे होते हैं, उनके प्रोग्राम प्रोग्रामर के कम प्रयास से अधिक कंप्यूटिंग कर सकते हैं। यह उन्हें प्रति समय इकाई में अधिक कार्यात्मकता लिखने देता है।<ref>Frederick P. Brooks, Jr.: ''The Mythical Man-Month'', Addison-Wesley, 1982, pp. 93–94</ref>


{{anchor|English-like programming languages}}
प्रोग्रामिंग के लिए विशेष लैंग्वेज की आवश्यकता को समाप्त करने की विधि के रूप में [[प्राकृतिक भाषा प्रोग्रामिंग|प्राकृतिक लैंग्वेज प्रोग्रामिंग]] का प्रस्ताव दिया गया है। यद्यपि, यह टारगेट दूर है और इसके लाभ चर्चा के लिए विवृत हैं। एड्जर डब्ल्यू. डिज्कस्ट्रा ने यह स्थिति ली कि अर्थहीन निर्माणों की प्रारंभ को रोकने के लिए औपचारिक लैंग्वेज का उपयोग आवश्यक है, और प्राकृतिक लैंग्वेज प्रोग्रामिंग को मूर्खता के रूप में निरस्त कर दिया।<ref>Dijkstra, Edsger W. [http://www.cs.utexas.edu/users/EWD/transcriptions/EWD06xx/EWD667.html On the foolishness of "natural language programming."] {{webarchive|url=https://web.archive.org/web/20080120201526/http://www.cs.utexas.edu/users/EWD/transcriptions/EWD06xx/EWD667.html |date=20 January 2008 }} EWD667.</ref> [[एलन पर्लिस]] इसी प्रकार इस विचार को निरस्त कर रहे थे।<ref>{{cite web|last=Perlis|first=Alan|url=http://www-pu.informatik.uni-tuebingen.de/users/klaeren/epigrams.html|title=प्रोग्रामिंग पर एपिग्राम|work=SIGPLAN Notices Vol. 17, No. 9|date=September 1982|pages=7–13|url-status=live|archive-url=https://web.archive.org/web/19990117034445/http://www-pu.informatik.uni-tuebingen.de/users/klaeren/epigrams.html|archive-date=17 January 1999}}</ref> [[संरचित अंग्रेजी]] और [[एसक्यूएल]] में हाइब्रिड विधि अपनाए गए हैं।
प्रोग्रामिंग के लिए एक विशेष भाषा की आवश्यकता को खत्म करने के तरीके के रूप में [[प्राकृतिक भाषा प्रोग्रामिंग]] का प्रस्ताव दिया गया है। हालाँकि, यह लक्ष्य दूर है और इसके लाभ बहस के लिए खुले हैं। एड्जर डब्ल्यू. डिज्कस्ट्रा ने यह स्थिति ली कि अर्थहीन निर्माणों की शुरूआत को रोकने के लिए एक औपचारिक भाषा का उपयोग आवश्यक है, और प्राकृतिक भाषा प्रोग्रामिंग को मूर्खता के रूप में खारिज कर दिया।<ref>Dijkstra, Edsger W. [http://www.cs.utexas.edu/users/EWD/transcriptions/EWD06xx/EWD667.html On the foolishness of "natural language programming."] {{webarchive|url=https://web.archive.org/web/20080120201526/http://www.cs.utexas.edu/users/EWD/transcriptions/EWD06xx/EWD667.html |date=20 January 2008 }} EWD667.</ref> [[एलन पर्लिस]] इसी तरह इस विचार को खारिज कर रहे थे।<ref>{{cite web|last=Perlis|first=Alan|url=http://www-pu.informatik.uni-tuebingen.de/users/klaeren/epigrams.html|title=प्रोग्रामिंग पर एपिग्राम|work=SIGPLAN Notices Vol. 17, No. 9|date=September 1982|pages=7–13|url-status=live|archive-url=https://web.archive.org/web/19990117034445/http://www-pu.informatik.uni-tuebingen.de/users/klaeren/epigrams.html|archive-date=17 January 1999}}</ref> [[संरचित अंग्रेजी]] और [[एसक्यूएल]] में हाइब्रिड तरीके अपनाए गए हैं।


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


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


एक प्रोग्रामिंग भाषा विनिर्देश निम्नलिखित सहित कई रूप ले सकता है:
एक प्रोग्रामिंग लैंग्वेज विनिर्देश निम्नलिखित सहित कई रूप ले सकता है:
* भाषा के वाक्य-विन्यास, स्थिर शब्दार्थ और निष्पादन शब्दार्थ की स्पष्ट परिभाषा। जबकि सिंटैक्स आमतौर पर एक औपचारिक व्याकरण का उपयोग करके निर्दिष्ट किया जाता है, सिमेंटिक परिभाषाएँ प्राकृतिक भाषा में लिखी जा सकती हैं (जैसे, C (प्रोग्रामिंग भाषा) में), या प्रोग्रामिंग भाषाओं का एक औपचारिक शब्दार्थ (जैसे, [[मानक एमएल]] में)<ref>{{cite book|last=Milner|first=R.|author-link=Robin Milner |author2=[[Mads Tofte|M. Tofte]] |author3=[[Robert Harper (computer scientist)|R. Harper]] |author4=D. MacQueen |title=मानक एमएल की परिभाषा (संशोधित)|publisher=MIT Press|year=1997|isbn=978-0-262-63181-5}}</ref> और योजना (प्रोग्रामिंग भाषा)<ref>{{cite web|first=Richard|last=Kelsey|author2=William Clinger|author3=Jonathan Rees|title=धारा 7.2 औपचारिक शब्दार्थ|work=Revised<sup>5</sup> Report on the Algorithmic Language Scheme|url=http://www.schemers.org/Documents/Standards/R5RS/HTML/r5rs-Z-H-10.html#%_sec_7.2|date=February 1998|url-status=live|archive-url=https://web.archive.org/web/20060706081110/http://www.schemers.org/Documents/Standards/R5RS/HTML/r5rs-Z-H-10.html#%_sec_7.2|archive-date=6 July 2006}}</ref> विशेष विवरण)।
* लैंग्वेज के सिंटैक्स, स्थिर सिमेंटिक और निष्पादन सिमेंटिक की स्पष्ट परिभाषा। जबकि सिंटैक्स सामान्यतः औपचारिक व्याकरण का उपयोग करके निर्दिष्ट किया जाता है, सिमेंटिक परिभाषा प्राकृतिक लैंग्वेज में लिखी जा सकती हैं (जैसे, C लैंग्वेज) में), या प्रोग्रामिंग लैंग्वेजों का औपचारिक सिमेंटिक (जैसे, [[मानक एमएल]] में)<ref>{{cite book|last=Milner|first=R.|author-link=Robin Milner |author2=[[Mads Tofte|M. Tofte]] |author3=[[Robert Harper (computer scientist)|R. Harper]] |author4=D. MacQueen |title=मानक एमएल की परिभाषा (संशोधित)|publisher=MIT Press|year=1997|isbn=978-0-262-63181-5}}</ref> और योजना (प्रोग्रामिंग लैंग्वेज<ref>{{cite web|first=Richard|last=Kelsey|author2=William Clinger|author3=Jonathan Rees|title=धारा 7.2 औपचारिक शब्दार्थ|work=Revised<sup>5</sup> Report on the Algorithmic Language Scheme|url=http://www.schemers.org/Documents/Standards/R5RS/HTML/r5rs-Z-H-10.html#%_sec_7.2|date=February 1998|url-status=live|archive-url=https://web.archive.org/web/20060706081110/http://www.schemers.org/Documents/Standards/R5RS/HTML/r5rs-Z-H-10.html#%_sec_7.2|archive-date=6 July 2006}}</ref> विशेष विवरण में)।
* भाषा के लिए एक कंपाइलर के व्यवहार का विवरण (उदाहरण के लिए, सी ++ और [[फोरट्रान]] विनिर्देश)। इस विवरण से भाषा के वाक्य-विन्यास और शब्दार्थ का अनुमान लगाना पड़ता है, जो प्राकृतिक या औपचारिक भाषा में लिखा जा सकता है।
* लैंग्वेज के लिए कंपाइलर के व्यवहार का विवरण (इस प्रकार से उदाहरण के लिए, सी ++ और [[फोरट्रान]] विनिर्देश)। इस विवरण से लैंग्वेज के सिंटैक्स और सिमेंटिक का अनुमान लगाना पड़ता है, जो प्राकृतिक या औपचारिक लैंग्वेज में लिखा जा सकता है।
* एक संदर्भ कार्यान्वयन, कभी-कभी [[मेटा-सर्कुलर मूल्यांकनकर्ता]] (जैसे, प्रोलॉग या REXX<ref>[[American National Standards Institute|ANSI]] – Programming Language Rexx, X3-274.1996</ref>). संदर्भ कार्यान्वयन के व्यवहार में भाषा का वाक्य-विन्यास और शब्दार्थ स्पष्ट है।
* एक संदर्भ या मॉडल कार्यान्वयन, कभी-कभी [[मेटा-सर्कुलर मूल्यांकनकर्ता|निर्दिष्ट भाषा में लिखा जाता है,]] (जैसे, प्रोलॉग या रेक्स्क्स<ref>[[American National Standards Institute|ANSI]] – Programming Language Rexx, X3-274.1996</ref>)संदर्भ कार्यान्वयन के व्यवहार में लैंग्वेज का सिंटैक्स और सिमेंटिक स्पष्ट है।


=== कार्यान्वयन ===
=== कार्यान्वयन ===
{{Main|Programming language implementation}}
{{Main|प्रोग्रामिंग लैंग्वेज कार्यान्वयन}}
एक प्रोग्रामिंग भाषा का कार्यान्वयन उस भाषा में प्रोग्राम लिखने और उन्हें हार्डवेयर और सॉफ़्टवेयर के एक या अधिक कॉन्फ़िगरेशन पर निष्पादित करने का एक तरीका प्रदान करता है। प्रोग्रामिंग भाषा कार्यान्वयन के लिए मोटे तौर पर दो दृष्टिकोण हैं: संकलक और [[दुभाषिया (कंप्यूटिंग)]]। किसी भी तकनीक का उपयोग करके किसी भाषा को लागू करना आम तौर पर संभव है।
 
एक प्रोग्रामिंग लैंग्वेज का कार्यान्वयन उस लैंग्वेज में प्रोग्राम लिखने और उन्हें हार्डवेयर और सॉफ़्टवेयर के या अधिक कॉन्फ़िगरेशन पर निष्पादित करने की विधि प्रदान करता है। प्रोग्रामिंग लैंग्वेज कार्यान्वयन के लिए व्यापक रूप से दो दृष्टिकोण हैं: कम्पाइलर और [[दुभाषिया (कंप्यूटिंग)|इंटरप्रेटर (कंप्यूटिंग)]]। किसी भी तकनीक का उपयोग करके किसी लैंग्वेज को लागू करना सामान्यतः संभव है।


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


प्रोग्राम जो सीधे हार्डवेयर पर निष्पादित होते हैं, आमतौर पर उन प्रोग्रामों की तुलना में बहुत तेजी से चलते हैं जिन्हें सॉफ्टवेयर में व्याख्या किया जाता है।<ref>{{Cite book|title=कोड पूर्ण|last=Steve|first=McConnell|year=2004|isbn=0735619670|edition=Second|location=Redmond, Washington|oclc=54974573|pages=[https://archive.org/details/codecomplete0000mcco/page/590 590, 600]|url=https://archive.org/details/codecomplete0000mcco/page/590}}</ref>{{better source|date=March 2019}}
प्रोग्राम जो प्रत्यक्षतः हार्डवेयर पर निष्पादित होते हैं, सामान्यतः उन प्रोग्रामों की तुलना में बहुत तीव्रता से चलते हैं जिन्हें सॉफ्टवेयर में व्याख्या किया जाता है।<ref>{{Cite book|title=कोड पूर्ण|last=Steve|first=McConnell|year=2004|isbn=0735619670|edition=Second|location=Redmond, Washington|oclc=54974573|pages=[https://archive.org/details/codecomplete0000mcco/page/590 590, 600]|url=https://archive.org/details/codecomplete0000mcco/page/590}}</ref>
व्याख्या किए गए कार्यक्रमों के प्रदर्शन में सुधार के लिए एक तकनीक [[समय-समय पर संकलन]] है। यहां [[आभासी मशीन]], निष्पादन से ठीक पहले, हार्डवेयर पर सीधे निष्पादन के लिए मशीन कोड के लिए उपयोग किए जाने वाले [[बाईटकोड]] के ब्लॉक का अनुवाद करती है।


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


कुछ प्रोग्रामिंग भाषाएं मालिकाना और खुले के बीच की सीमा पर मौजूद हैं; उदाहरण के लिए, Oracle कार्पोरेशन [[जावा प्रोग्रामिंग भाषा]] के कुछ पहलुओं पर मालिकाना हक का दावा करता है,<ref>See: [[Oracle America, Inc. v. Google, Inc.]]</ref> और [[माइक्रोसॉफ्ट]] की सी शार्प (प्रोग्रामिंग लैंग्वेज)|सी# प्रोग्रामिंग लैंग्वेज, जिसमें सिस्टम के अधिकांश हिस्सों का खुला कार्यान्वयन है, एक बंद वातावरण के रूप में [[सामान्य भाषा रनटाइम]] (सीएलआर) भी है।<ref>{{Cite news|url=https://www.computerscience.org/resources/computer-programming-languages/|title=प्रोग्रामिंग भाषाओं के लिए गाइड {{!}} ComputerScience.org|work=ComputerScience.org|access-date=2018-05-13|language=en-US}}</ref>
== स्वामित्व लैंग्वेज ==
कई स्वामित्व वाली भाषाओं का व्यापक रूप से उपयोग किया जाता है, उनकी मालिकाना प्रकृति के बावजूद; उदाहरणों में [[MATLAB]], [[VBScript]] और [[वोल्फ्राम भाषा]] शामिल हैं। कुछ भाषाएँ बंद से खुले में परिवर्तन कर सकती हैं; उदाहरण के लिए, [[Erlang (प्रोग्रामिंग भाषा)]] मूल रूप से Ericsson की आंतरिक प्रोग्रामिंग भाषा थी।<ref>{{Cite web|url=https://www.ibm.com/developerworks/library/os-erlang1/index.html|title=मूल बातें|date=2011-05-10|website=ibm.com|language=en|access-date=2018-05-13}}</ref>
यद्यपि अधिकांश सामान्यतः उपयोग की जाने वाली प्रोग्रामिंग लैंग्वेजों में पूर्ण रूप से विवृत विनिर्देशों और कार्यान्वयन हैं, कई प्रोग्रामिंग लैंग्वेज मात्र स्वामित्व वाली प्रोग्रामिंग लैंग्वेजों के रूप में स्थित हैं, मात्र विक्रेता से कार्यान्वयन उपलब्ध है, जो अनुरोध कर सकता है कि ऐसी स्वामित्व वाली लैंग्वेज उनकी बौद्धिक संपदा है। स्वामित्व प्रोग्रामिंग लैंग्वेज सामान्यतः [[डोमेन विशिष्ट भाषा|डोमेन विशिष्ट]] लैंग्वेज या एकल उत्पाद के लिए आंतरिक स्क्रिप्टिंग लैंग्वेज होती हैं; कुछ स्वामित्व लैंग्वेज मात्र विक्रेता के भीतर आंतरिक रूप से उपयोग की जाती हैं, जबकि अन्य बाह्य उपयोगकर्ताओं के लिए उपलब्ध होती हैं।


कुछ प्रोग्रामिंग लैंग्वेज स्वामित्व और विवृत के बीच की सीमा पर स्थित हैं; इस प्रकार से उदाहरण के लिए, ओरेकल कार्पोरेशन [[जावा प्रोग्रामिंग भाषा|जावा प्रोग्रामिंग]] लैंग्वेज के कुछ गुणों पर स्वामित्व स्थिति का अनुरोध करता है,<ref>See: [[Oracle America, Inc. v. Google, Inc.]]</ref> और [[माइक्रोसॉफ्ट]] की सी शार्प (प्रोग्रामिंग लैंग्वेज)|सी प्रोग्रामिंग लैंग्वेज, जिसमें सिस्टम के अधिकांश भागों का विवृत कार्यान्वयन है, संवृत वातावरण के रूप में [[सामान्य भाषा रनटाइम|सामान्य लैंग्वेज रनटाइम]] (सीएलआर) भी है।<ref>{{Cite news|url=https://www.computerscience.org/resources/computer-programming-languages/|title=प्रोग्रामिंग भाषाओं के लिए गाइड {{!}} ComputerScience.org|work=ComputerScience.org|access-date=2018-05-13|language=en-US}}</ref>


== प्रयोग करें ==
कई स्वामित्व वाली लैंग्वेजों का व्यापक रूप से उपयोग किया जाता है, उनकी स्वामित्व प्रकृति के अतिरिक्त; उदाहरणों में [[MATLAB|मैटलैब]], [[VBScript|वीबीस्क्रिप्ट]] और [[वोल्फ्राम भाषा|वोल्फ्राम]] लैंग्वेज सम्मिलित हैं। कुछ लैंग्वेज संवृत से विवृत में परिवर्तन कर सकती हैं; इस प्रकार से उदाहरण के लिए, [[Erlang (प्रोग्रामिंग भाषा)|एरलाँग (प्रोग्रामिंग लैंग्वेज)]] मूल रूप से एरिक्सन की आंतरिक प्रोग्रामिंग लैंग्वेज थी।<ref>{{Cite web|url=https://www.ibm.com/developerworks/library/os-erlang1/index.html|title=मूल बातें|date=2011-05-10|website=ibm.com|language=en|access-date=2018-05-13}}</ref>
मुख्य रूप से कंप्यूटिंग क्षेत्र में हजारों विभिन्न प्रोग्रामिंग भाषाएं बनाई गई हैं।<ref>{{cite web|access-date=1 June 2009|url=http://hopl.murdoch.edu.au/|title=HOPL: प्रोग्रामिंग भाषाओं का एक इंटरैक्टिव रोस्टर|publisher=[[Murdoch University]]|location=Australia|quote=यह साइट 8512 भाषाओं को सूचीबद्ध करती है।|url-status=dead|archive-url=https://web.archive.org/web/20110220044217/http://hopl.murdoch.edu.au/|archive-date=20 February 2011}}</ref>
== प्रयोग ==
व्यक्तिगत सॉफ़्टवेयर प्रोजेक्ट आमतौर पर पाँच प्रोग्रामिंग भाषाओं या अधिक का उपयोग करते हैं।<ref>{{cite conference|first1=Philip|conference=सॉफ्टवेयर इंजीनियरिंग में मूल्यांकन और मूल्यांकन पर 19वें अंतर्राष्ट्रीय सम्मेलन की कार्यवाही– EASE '15|last1=Mayer|first2=Alexander|last2=Bauer|title=सॉफ्टवेयर इंजीनियरिंग में मूल्यांकन और मूल्यांकन पर 19वें अंतर्राष्ट्रीय सम्मेलन की कार्यवाही|publisher=ACM|year=2015|location=New York, NY, USA|isbn=978-1-4503-3350-4|pages=4:1–4:10|doi=10.1145/2745802.2745805|quote=परिणाम: हमने पाया (ए) स्पष्ट रूप से प्रभावी मुख्य सामान्य प्रयोजन भाषा और 5 अक्सर उपयोग किए जाने वाले डीएसएल प्रकारों के साथ प्रति परियोजना 5 भाषाओं की एक औसत संख्या, (बी) आकार का एक महत्वपूर्ण प्रभाव, कमिट की संख्या और मुख्य भाषा भाषाओं की संख्या के साथ-साथ उम्र और योगदानकर्ताओं की संख्या का कोई महत्वपूर्ण प्रभाव नहीं है, और (सी) एक्सएमएल, शैल/मेक, और एचटीएमएल/सीएसएस के आसपास समूहित तीन भाषा पारिस्थितिक तंत्र। निष्कर्ष: मल्टी-लैंग्वेज प्रोग्रामिंग ओपन-सोर्स प्रोजेक्ट्स में आम लगती है और यह एक ऐसा कारक है जिसे टूलिंग में और ऐसे सॉफ्टवेयर सिस्टम के विकास और रखरखाव का आकलन करते समय निपटाया जाना चाहिए।|chapter=An empirical analysis of the utilization of multiple programming languages in open source projects|doi-access=free}}</ref>
मुख्य रूप से कंप्यूटिंग क्षेत्र में हजारों विभिन्न प्रोग्रामिंग लैंग्वेज बनाई गई हैं।<ref>{{cite web|access-date=1 June 2009|url=http://hopl.murdoch.edu.au/|title=HOPL: प्रोग्रामिंग भाषाओं का एक इंटरैक्टिव रोस्टर|publisher=[[Murdoch University]]|location=Australia|quote=यह साइट 8512 भाषाओं को सूचीबद्ध करती है।|url-status=dead|archive-url=https://web.archive.org/web/20110220044217/http://hopl.murdoch.edu.au/|archive-date=20 February 2011}}</ref> व्यक्तिगत सॉफ़्टवेयर प्रोजेक्ट सामान्यतः पाँच प्रोग्रामिंग लैंग्वेजों या अधिक का उपयोग करते हैं।<ref>{{cite conference|first1=Philip|conference=सॉफ्टवेयर इंजीनियरिंग में मूल्यांकन और मूल्यांकन पर 19वें अंतर्राष्ट्रीय सम्मेलन की कार्यवाही– EASE '15|last1=Mayer|first2=Alexander|last2=Bauer|title=सॉफ्टवेयर इंजीनियरिंग में मूल्यांकन और मूल्यांकन पर 19वें अंतर्राष्ट्रीय सम्मेलन की कार्यवाही|publisher=ACM|year=2015|location=New York, NY, USA|isbn=978-1-4503-3350-4|pages=4:1–4:10|doi=10.1145/2745802.2745805|quote=परिणाम: हमने पाया (ए) स्पष्ट रूप से प्रभावी मुख्य सामान्य प्रयोजन भाषा और 5 अक्सर उपयोग किए जाने वाले डीएसएल प्रकारों के साथ प्रति परियोजना 5 भाषाओं की एक औसत संख्या, (बी) आकार का एक महत्वपूर्ण प्रभाव, कमिट की संख्या और मुख्य भाषा भाषाओं की संख्या के साथ-साथ उम्र और योगदानकर्ताओं की संख्या का कोई महत्वपूर्ण प्रभाव नहीं है, और (सी) एक्सएमएल, शैल/मेक, और एचटीएमएल/सीएसएस के आसपास समूहित तीन भाषा पारिस्थितिक तंत्र। निष्कर्ष: मल्टी-लैंग्वेज प्रोग्रामिंग ओपन-सोर्स प्रोजेक्ट्स में आम लगती है और यह एक ऐसा कारक है जिसे टूलिंग में और ऐसे सॉफ्टवेयर सिस्टम के विकास और रखरखाव का आकलन करते समय निपटाया जाना चाहिए।|chapter=An empirical analysis of the utilization of multiple programming languages in open source projects|doi-access=free}}</ref>
प्रोग्रामिंग लैंग्वेज मानव अभिव्यक्ति के अधिकांश अन्य रूपों से भिन्न होती हैं, जिसमें उन्हें अधिक सटीकता और पूर्णता की आवश्यकता होती है। अन्य लोगों के साथ संवाद करने के लिए एक प्राकृतिक भाषा का उपयोग करते समय, मानव लेखक और वक्ता अस्पष्ट हो सकते हैं और छोटी-छोटी गलतियाँ कर सकते हैं, और फिर भी उनके इरादे को समझने की उम्मीद करते हैं। हालाँकि, आलंकारिक रूप से बोलना, कंप्यूटर ठीक वही करते हैं जो उन्हें करने के लिए कहा जाता है, और यह नहीं समझ सकते कि प्रोग्रामर किस कोड को लिखना चाहता है। भाषा की परिभाषा, एक प्रोग्राम और प्रोग्राम के इनपुट के संयोजन को उस प्रोग्राम के नियंत्रण के डोमेन के भीतर प्रोग्राम के निष्पादन के दौरान होने वाले बाहरी व्यवहार को पूरी तरह से निर्दिष्ट करना चाहिए। दूसरी ओर, एक एल्गोरिथ्म के बारे में विचारों को [[स्यूडोकोड]] का उपयोग करके निष्पादन के लिए आवश्यक सटीकता के बिना मनुष्यों को संप्रेषित किया जा सकता है, जो एक प्रोग्रामिंग भाषा में लिखे गए कोड के साथ प्राकृतिक भाषा को इंटरलीव करता है।


एक प्रोग्रामिंग भाषा डेटा के टुकड़ों को परिभाषित करने के लिए एक संरचित तंत्र प्रदान करती है, और उस डेटा पर स्वचालित रूप से किए जा सकने वाले संचालन या परिवर्तन। एक प्रोग्रामर संगणना में शामिल अवधारणाओं का प्रतिनिधित्व करने के लिए भाषा में मौजूद अमूर्तता (कंप्यूटर विज्ञान) का उपयोग करता है। इन अवधारणाओं को उपलब्ध सबसे सरल तत्वों के संग्रह के रूप में प्रस्तुत किया जाता है (जिन्हें भाषा आदिम कहा जाता है)।<ref>{{cite web|url=http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-10.html|title=कंप्यूटर प्रोग्राम की संरचना और व्याख्या|author=Abelson, Sussman, and Sussman|access-date=3 March 2009|url-status=dead|archive-url=https://web.archive.org/web/20090226050622/http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-10.html|archive-date=26 February 2009}}</ref> [[कंप्यूटर प्रोग्रामिंग]] वह प्रक्रिया है जिसके द्वारा प्रोग्रामर नए प्रोग्राम बनाने के लिए इन प्रिमिटिव्स को जोड़ते हैं, या मौजूदा लोगों को नए उपयोगों या बदलते परिवेश के अनुकूल बनाते हैं।
प्रोग्रामिंग लैंग्वेज मानव अभिव्यक्ति के अधिकांश अन्य रूपों से भिन्न होती हैं, जिसमें उन्हें अधिक यथार्थता और पूर्णता की आवश्यकता होती है। अन्य लोगों के साथ इंटरैक्ट करने के लिए प्राकृतिक लैंग्वेज का उपयोग करते समय, मानव लेखक और वक्ता अस्पष्ट हो सकते हैं और छोटी-छोटी त्रुटियाँ कर सकते हैं, और फिर भी उनके उद्देश्य को समझने की अपेक्षा करते हैं। यद्यपि, आलंकारिक रूप से बोलना, कंप्यूटर ठीक वही करते हैं जो उन्हें करने के लिए कहा जाता है, और यह नहीं समझ सकते कि प्रोग्रामर किस कोड को लिखना चाहता है। लैंग्वेज की परिभाषा, प्रोग्राम और प्रोग्राम के इनपुट के संयोजन को उस प्रोग्राम के नियंत्रण के डोमेन के भीतर प्रोग्राम के निष्पादन के समय होने वाले बाह्य व्यवहार को पूर्ण रूप से निर्दिष्ट करना चाहिए। दूसरी ओर, एल्गोरिदम के विषय में विचारों को [[स्यूडोकोड]] का उपयोग करके निष्पादन के लिए आवश्यक यथार्थता के बिना मनुष्यों को संप्रेषित किया जा सकता है, जो प्रोग्रामिंग लैंग्वेज में लिखे गए कोड के साथ प्राकृतिक लैंग्वेज को इंटरलीव करता है।


एक कंप्यूटर के लिए प्रोग्राम मानव संपर्क के बिना एक [[बैच प्रसंस्करण]] में निष्पादन (कंप्यूटिंग) हो सकता है, या एक उपयोगकर्ता एक दुभाषिया (कंप्यूटिंग) के एक सत्र (कंप्यूटिंग) में [[कमांड (कंप्यूटिंग)]] टाइप कर सकता है। इस मामले में आदेश केवल प्रोग्राम होते हैं, जिनके निष्पादन को एक साथ जोड़ा जाता है। जब कोई भाषा किसी दुभाषिया (जैसे कि एक [[यूनिक्स खोल]] या अन्य [[कमांड लाइन इंटरफेस]]) के माध्यम से अपने आदेशों को संकलित किए बिना चला सकती है, तो इसे स्क्रिप्टिंग भाषा कहा जाता है।<ref>{{cite web
एक प्रोग्रामिंग लैंग्वेज डेटा के भागों को परिभाषित करने के लिए संरचित सिस्टम प्रदान करती है, और उस डेटा पर स्वचालित रूप से किए जा सकने वाले ऑपरेशन या परिवर्तन है। प्रोग्रामर संगणना में सम्मिलित अवधारणाओं का प्रतिनिधित्व करने के लिए लैंग्वेज में स्थित अमूर्तता (कंप्यूटर विज्ञान) का उपयोग करता है। इन अवधारणाओं को उपलब्ध सबसे सरल अवयवों के संग्रह के रूप में प्रस्तुत किया जाता है (जिन्हें लैंग्वेज आदिम कहा जाता है)।<ref>{{cite web|url=http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-10.html|title=कंप्यूटर प्रोग्राम की संरचना और व्याख्या|author=Abelson, Sussman, and Sussman|access-date=3 March 2009|url-status=dead|archive-url=https://web.archive.org/web/20090226050622/http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-10.html|archive-date=26 February 2009}}</ref> [[कंप्यूटर प्रोग्रामिंग]] वह प्रक्रिया है जिसके द्वारा प्रोग्रामर नवीन प्रोग्राम बनाने के लिए इन प्रिमिटिव्स को जोड़ते हैं, या वर्तमान लोगों को नवीन उपयोगों या बदलते परिवेश के अनुकूल बनाते हैं।
 
एक कंप्यूटर के लिए प्रोग्राम मानव संपर्क के बिना [[बैच प्रसंस्करण]] में निष्पादन (कंप्यूटिंग) हो सकता है, या उपयोगकर्ता इंटरप्रेटर (कंप्यूटिंग) के सत्र (कंप्यूटिंग) में [[कमांड (कंप्यूटिंग)]] टाइप कर सकता है। इस स्थिति में क्रम एक मात्र ऐसे प्रोग्राम होते हैं, जिनके निष्पादन को साथ जोड़ा जाता है। जब कोई लैंग्वेज किसी इंटरप्रेटर (जैसे कि [[यूनिक्स खोल|यूनिक्स सेल]] या अन्य [[कमांड लाइन इंटरफेस]]) के माध्यम से अपने क्रमों को संकलित किए बिना चला सकती है, तो इसे स्क्रिप्टिंग लैंग्वेज कहा जाता है।<ref>{{cite web
  |url        = http://www.mactech.com/articles/mactech/Vol.15/15.09/ScriptingLanguages/index.html
  |url        = http://www.mactech.com/articles/mactech/Vol.15/15.09/ScriptingLanguages/index.html
  |title      = Scripting Languages
  |title      = Scripting Languages
Line 227: Line 215:
  |archive-url  = https://web.archive.org/web/20171202235828/http://www.mactech.com/articles/mactech/Vol.15/15.09/ScriptingLanguages/index.html
  |archive-url  = https://web.archive.org/web/20171202235828/http://www.mactech.com/articles/mactech/Vol.15/15.09/ScriptingLanguages/index.html
  |archive-date = 2 December 2017}}</ref>
  |archive-date = 2 December 2017}}</ref>
=== लैंग्वेज के प्रयोग का मापन ===
{{Main|प्रोग्रामिंग लैंग्वेज की लोकप्रियता को मापना}}


 
यह निर्धारित करना कि सबसे व्यापक रूप से उपयोग की जाने वाली प्रोग्रामिंग लैंग्वेज कौन सी है, क्योंकि उपयोग की परिभाषा संदर्भ के अनुसार भिन्न होती है। लैंग्वेज अधिक संख्या में प्रोग्रामर घंटों पर अधिकृत कर सकती है, अलग में कोड की अधिक पंक्तियां होती हैं, और तीसरी सबसे अधिक सीपीयू समय का उपभोग कर सकती है। कुछ लैंग्वेज विशेष प्रकार के अनुप्रयोगों के लिए बहुत लोकप्रिय हैं। इस प्रकार से उदाहरण के लिए, कोबोल कॉर्पोरेट डेटा केंद्र में अभी भी स्ट्रोंग है, प्रायः बड़े [[मेनफ़्रेम कंप्यूटर]] पर;<ref>{{cite web
=== भाषा के प्रयोग का मापन ===
{{Main|Measuring programming language popularity}}
यह निर्धारित करना कि सबसे व्यापक रूप से उपयोग की जाने वाली प्रोग्रामिंग भाषा कौन सी है, क्योंकि उपयोग की परिभाषा संदर्भ के अनुसार भिन्न होती है। एक भाषा अधिक संख्या में प्रोग्रामर घंटों पर कब्जा कर सकती है, एक अलग में कोड की अधिक पंक्तियां होती हैं, और तीसरी सबसे अधिक CPU समय का उपभोग कर सकती है। कुछ भाषाएँ विशेष प्रकार के अनुप्रयोगों के लिए बहुत लोकप्रिय हैं। उदाहरण के लिए, COBOL कॉर्पोरेट डेटा सेंटर में अभी भी मजबूत है, अक्सर बड़े [[मेनफ़्रेम कंप्यूटर]] पर;<ref>{{cite web
  |url        = http://www.computerworld.com.au/article/319269/cobol_turns_50/
  |url        = http://www.computerworld.com.au/article/319269/cobol_turns_50/
  |title      = COBOL turns 50
  |title      = COBOL turns 50
Line 249: Line 236:
  |url-status    = live
  |url-status    = live
  |archive-url  = https://web.archive.org/web/20131019171802/http://www.developer.com/lang/other/7-myths-of-cobol-debunked.html
  |archive-url  = https://web.archive.org/web/20131019171802/http://www.developer.com/lang/other/7-myths-of-cobol-debunked.html
  |archive-date = 19 October 2013}}</ref> फोरट्रान वैज्ञानिक और इंजीनियरिंग अनुप्रयोगों में; एयरोस्पेस, परिवहन, सैन्य, वास्तविक समय और एम्बेडेड अनुप्रयोगों में एडा (प्रोग्रामिंग भाषा); और सी (प्रोग्रामिंग भाषा) एम्बेडेड अनुप्रयोगों और ऑपरेटिंग सिस्टम में। कई अलग-अलग प्रकार के अनुप्रयोगों को लिखने के लिए नियमित रूप से अन्य भाषाओं का उपयोग किया जाता है।
  |archive-date = 19 October 2013}}</ref> फोरट्रान वैज्ञानिक और इंजीनियरिंग अनुप्रयोगों में; एयरोस्पेस, परिवहन, सैन्य, वास्तविक समय और एम्बेडेड अनुप्रयोगों में एडा (प्रोग्रामिंग लैंग्वेज); और सी (प्रोग्रामिंग लैंग्वेज) एम्बेडेड अनुप्रयोगों और ऑपरेटिंग सिस्टम आदि में हैं। कई अलग-अलग प्रकार के अनुप्रयोगों को लिखने के लिए नियमित रूप से अन्य लैंग्वेजों का उपयोग किया जाता है।
 
लैंग्वेज की लोकप्रियता को मापने के विभिन्न विधि, जो मापा जाता है उस पर अलग पूर्वाग्रह के लिए प्रत्येक विषय प्रस्तावित किया गया है:
* लैंग्वेज का उल्लेख करने वाले नौकरी विज्ञापनों की संख्या की गणनीय करना<ref>{{cite web |author=Nicholas Enticknap |url=http://www.computerweekly.com/Articles/2007/09/11/226631/sslcomputer-weekly-it-salary-survey-finance-boom-drives-it-job.htm |title=एसएसएल/कंप्यूटर साप्ताहिक आईटी वेतन सर्वेक्षण: वित्तीय उछाल से आईटी रोजगार में वृद्धि होती है|work=Computer Weekly |access-date=2013-06-14 |url-status=live |archive-url=https://web.archive.org/web/20111026035734/http://www.computerweekly.com/Articles/2007/09/11/226631/SSLComputer-Weekly-IT-salary-survey-finance-boom-drives-IT-job.htm |archive-date=26 October 2011}}</ref>
* बेची गई पुस्तकों की संख्या जो लैंग्वेज सिखाती या उसका वर्णन करती हैं<ref>{{cite web|url=http://radar.oreilly.com/archives/2006/08/programming_language_trends_1.html|title=पुस्तक बिक्री द्वारा प्रोग्रामिंग भाषाओं की गणना करना|publisher=Radar.oreilly.com|date=2 August 2006|url-status=dead|archive-url=https://web.archive.org/web/20080517023127/http://radar.oreilly.com/archives/2006/08/programming_language_trends_1.html|archive-date=17 May 2008}}</ref>
* लैंग्वेज में लिखे गए कोड की वर्तमान पंक्तियों की संख्या का अनुमान{{spaced ndash}} जो प्रायः सार्वजनिक खोजों में नहीं मिलने वाली लैंग्वेजों को कम आंकते हैं<ref>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</ref>
* वेब सर्च इंजन का उपयोग करते हुए पाए गए लैंग्वेज संदर्भों की संख्या (अर्थात, लैंग्वेज के नाम के लिए)।


भाषा की लोकप्रियता को मापने के विभिन्न तरीके, जो मापा जाता है उस पर एक अलग पूर्वाग्रह के लिए प्रत्येक विषय प्रस्तावित किया गया है:
विभिन्न इंटरनेट साइटों से सूचना का संयोजन और औसत, stackify.com ने दस सबसे लोकप्रिय प्रोग्रामिंग लैंग्वेजों (समग्र लोकप्रियता के अवरोही क्रम में) की सूचना दी: जैसे कि जावा (प्रोग्रामिंग लैंग्वेज), सी (प्रोग्रामिंग लैंग्वेज), सी ++, पायथन (प्रोग्रामिंग लैंग्वेज), सी शार्प (प्रोग्रामिंग लैंग्वेज), जावास्क्रिप्ट, विज़ुअल बेसिक .NET, R (प्रोग्रामिंग लैंग्वेज), [[PHP]], और मैटलैब आदि।<ref>{{cite web |url=https://stackify.com/popular-programming-languages-2018/ |title=2018 की सबसे लोकप्रिय और प्रभावशाली प्रोग्रामिंग भाषाएँ|publisher=stackify.com |date=2017-12-18 |access-date=2018-08-29}}</ref>
* भाषा का उल्लेख करने वाले नौकरी विज्ञापनों की संख्या की गिनती करना<ref>{{cite web |author=Nicholas Enticknap |url=http://www.computerweekly.com/Articles/2007/09/11/226631/sslcomputer-weekly-it-salary-survey-finance-boom-drives-it-job.htm |title=एसएसएल/कंप्यूटर साप्ताहिक आईटी वेतन सर्वेक्षण: वित्तीय उछाल से आईटी रोजगार में वृद्धि होती है|work=Computer Weekly |access-date=2013-06-14 |url-status=live |archive-url=https://web.archive.org/web/20111026035734/http://www.computerweekly.com/Articles/2007/09/11/226631/SSLComputer-Weekly-IT-salary-survey-finance-boom-drives-IT-job.htm |archive-date=26 October 2011}}</ref>
== उपभाषा, चुनाव और कार्यान्वयन ==
* बेची गई किताबों की संख्या जो भाषा सिखाती या उसका वर्णन करती हैं<ref>{{cite web|url=http://radar.oreilly.com/archives/2006/08/programming_language_trends_1.html|title=पुस्तक बिक्री द्वारा प्रोग्रामिंग भाषाओं की गणना करना|publisher=Radar.oreilly.com|date=2 August 2006|url-status=dead|archive-url=https://web.archive.org/web/20080517023127/http://radar.oreilly.com/archives/2006/08/programming_language_trends_1.html|archive-date=17 May 2008}}</ref>
प्रोग्रामिंग लैंग्वेज या डेटा एक्सचेंज लैंग्वेज की [[बोली|उपभाषा]] (अपेक्षाकृत छोटी) भिन्नता या लैंग्वेज का विस्तार है जो इसकी आंतरिक प्रकृति को नहीं बदलता है। स्कीम (प्रोग्रामिंग लैंग्वेज) और फोर्थ (प्रोग्रामिंग लैंग्वेज) जैसी लैंग्वेजों के साथ, मानकों को कार्यान्वयनकर्ताओं द्वारा अपर्याप्त, अपर्याप्त या अनुचित माना जा सकता है, इसलिए प्रायः वे मानक से विचलित हो जाएंगे, जिससे नवीन उपभाषा बन जाएगी। अन्य स्थितियों में, [[डोमेन-विशिष्ट भाषा|डोमेन-विशिष्ट]] लैंग्वेज में उपयोग के लिए उपभाषा बनाई जाती है, प्रायः उपसमूह। [[सामान्य लिस्प]] संसार में, मूल [[एस-अभिव्यक्ति]] सिंटैक्स और लिस्प-जैसे सिमेंटिक्स का उपयोग करने वाली अधिकांश लैंग्वेजों को लिस्प उपभाषा माना जाता है, यद्यपि वे अत्याधिक भिन्न होते हैं, जैसा कि कहते हैं, [[रैकेट (प्रोग्रामिंग भाषा)|रैकेट (प्रोग्रामिंग लैंग्वेज)]] और [[क्लोजर]]। चूंकि लैंग्वेज में कई उपभाषा होना सामान्य बात है, अनुभवहीन प्रोग्रामर के लिए उचित डॉक्यूमेंट ढूंढना अत्यधिक जटिलहो सकता है। [[बुनियादी प्रोग्रामिंग भाषा|बेसिक प्रोग्रामिंग]] लैंग्वेज में बेसिक उपभाषा की सूची है।
* भाषा में लिखे गए कोड की मौजूदा पंक्तियों की संख्या का अनुमान{{spaced ndash}} जो अक्सर सार्वजनिक खोजों में नहीं मिलने वाली भाषाओं को कम आंकते हैं<ref>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</ref>
* वेब सर्च इंजन का उपयोग करते हुए पाए गए भाषा संदर्भों की संख्या (अर्थात, भाषा के नाम के लिए)।


विभिन्न इंटरनेट साइटों से जानकारी का संयोजन और औसत, stackify.com ने दस सबसे लोकप्रिय प्रोग्रामिंग भाषाओं (समग्र लोकप्रियता के अवरोही क्रम में) की सूचना दी: जावा (प्रोग्रामिंग भाषा), सी (प्रोग्रामिंग भाषा), सी ++, पायथन (प्रोग्रामिंग भाषा), सी शार्प (प्रोग्रामिंग भाषा)|सी#, जावास्क्रिप्ट, विज़ुअल बेसिक .NET|VB .NET, R (प्रोग्रामिंग भाषा), [[PHP]], और MATLAB।<ref>{{cite web |url=https://stackify.com/popular-programming-languages-2018/ |title=2018 की सबसे लोकप्रिय और प्रभावशाली प्रोग्रामिंग भाषाएँ|publisher=stackify.com |date=2017-12-18 |access-date=2018-08-29}}</ref>
== वर्गीकरण ==
{{details|प्रोग्रामिंग लैंग्वेजों की श्रेणीबद्ध सूची}}


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


== बोलियां, स्वाद और कार्यान्वयन ==
कार्य इस तथ्य से और जटिल है कि लैंग्वेजों को कई अक्षों के साथ वर्गीकृत किया जा सकता है। इस प्रकार से उदाहरण के लिए, जावा ऑब्जेक्ट-ओरिएंटेड लैंग्वेज है (क्योंकि यह ऑब्जेक्ट-ओरिएंटेड संगठन को प्रोत्साहित करती है) और समवर्ती लैंग्वेज है (क्योंकि इसमें समानांतर में एकाधिक थ्रेड (कंप्यूटर विज्ञान) चलाने के लिए अंतर्निहित निर्माण सम्मिलित हैं)। पायथन (प्रोग्रामिंग लैंग्वेज) ऑब्जेक्ट-ओरिएंटेड स्क्रिप्टिंग लैंग्वेज है।<ref>{{Cite web |title=धाराप्रवाह पायथन दूसरा संस्करण|url=https://www.thoughtworks.com/insights/books/fluent-python-2nd-edition |access-date=2022-10-11 |website=Thoughtworks |language=en}}</ref>
प्रोग्रामिंग भाषा या डेटा एक्सचेंज भाषा की एक [[बोली]] (अपेक्षाकृत छोटी) भिन्नता या भाषा का विस्तार है जो इसकी आंतरिक प्रकृति को नहीं बदलता है। स्कीम (प्रोग्रामिंग लैंग्वेज) और फोर्थ (प्रोग्रामिंग लैंग्वेज) जैसी भाषाओं के साथ, मानकों को कार्यान्वयनकर्ताओं द्वारा अपर्याप्त, अपर्याप्त या नाजायज माना जा सकता है, इसलिए अक्सर वे मानक से विचलित हो जाएंगे, जिससे एक नई बोली बन जाएगी। अन्य मामलों में, एक [[डोमेन-विशिष्ट भाषा]] में उपयोग के लिए बोली बनाई जाती है, अक्सर एक सबसेट। [[सामान्य लिस्प]] दुनिया में, मूल [[एस-अभिव्यक्ति]] सिंटैक्स और लिस्प-जैसे सिमेंटिक्स का उपयोग करने वाली अधिकांश भाषाओं को लिस्प बोली माना जाता है, हालांकि वे बेतहाशा भिन्न होते हैं, जैसा कि कहते हैं, [[रैकेट (प्रोग्रामिंग भाषा)]] और [[क्लोजर]]। चूंकि एक भाषा में कई बोलियां होना आम बात है, एक अनुभवहीन प्रोग्रामर के लिए सही दस्तावेज ढूंढना काफी मुश्किल हो सकता है। [[बुनियादी प्रोग्रामिंग भाषा]] में बेसिक बोलियों की सूची है।


== वर्गीकरण ==
व्यापक स्ट्रोक में, प्रोग्रामिंग लैंग्वेजों को [[प्रोग्रामिंग प्रतिमान]] और उपयोग के इच्छित डोमेन द्वारा वर्गीकृत किया जाता है, जिसमें सामान्य-उद्देश्य वाली प्रोग्रामिंग लैंग्वेज [[डोमेन-विशिष्ट प्रोग्रामिंग भाषा|डोमेन-विशिष्ट प्रोग्रामिंग]] लैंग्वेजों से अलग होती हैं। परंपरागत रूप से, प्रोग्रामिंग लैंग्वेजों को अनिवार्य वाक्यों के संदर्भ में अभिकलन का वर्णन करने के रूप में माना जाता है, अर्थात क्रम जारी करना। इन्हें सामान्यतः [[अनिवार्य प्रोग्रामिंग]] लैंग्वेज कहा जाता है। प्रोग्रामिंग लैंग्वेजों में अनुसंधान का बड़ा टारगेट निर्देश के समूह के रूप में प्रोग्राम और वांछित उत्तर के विषय में प्रोग्राम के रूप में अंतर को अस्पष्ट करना है, जो कि [[घोषणात्मक प्रोग्रामिंग]] की मुख्य विशेषता है।<ref>Carl A. Gunter, ''Semantics of Programming Languages: Structures and Techniques'', MIT Press, 1992, {{ISBN|0-262-57095-5}}, p. 1</ref> अधिक परिष्कृत प्रतिमानों में [[प्रक्रियात्मक प्रोग्रामिंग]], ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग, कार्यात्मक प्रोग्रामिंग और तर्क प्रोग्रामिंग सम्मिलित हैं; कुछ लैंग्वेज प्रतिमान या बहु-प्रतिमान के संकर हैं। असेंबली लैंग्वेज अंतर्निहित मशीन आर्किटेक्चर के प्रत्यक्ष मॉडल के रूप में इतना प्रतिमान नहीं है। उद्देश्य से, प्रोग्रामिंग लैंग्वेजों को सामान्य उद्देश्य, सिस्टम प्रोग्रामिंग लैंग्वेज, स्क्रिप्टिंग लैंग्वेज, डोमेन-विशिष्ट लैंग्वेज, या समवर्ती/वितरित लैंग्वेज (या इनमें से संयोजन) माना जा सकता है।<ref>{{cite web|url=http://tunes.org/wiki/programming_20languages.html|title=ट्यून्स: प्रोग्रामिंग लैंग्वेज|url-status=live|archive-url=https://web.archive.org/web/20071020203251/http://tunes.org/wiki/programming_20languages.html|archive-date=20 October 2007}}</ref> कुछ सामान्य उद्देश्य वाली लैंग्वेजों को बड़े पैमाने पर शैक्षिक टारगेटों के साथ डिजाइन किया गया था।<ref>{{cite book|last=Wirth|first=Niklaus|title=प्रोग्रामिंग भाषाओं के इतिहास पर दूसरा ACM SIGPLAN सम्मेलन - HOPL-II|author-link=Niklaus Wirth|chapter=Recollections about the development of Pascal|journal=Proc. 2nd ACM SIGPLAN Conference on History of Programming Languages|volume=28|issue=3|pages=333–342|year=1993|url=http://portal.acm.org/citation.cfm?id=155378|doi=10.1145/154766.155378|isbn=978-0-89791-570-0|citeseerx=10.1.1.475.6989|s2cid=9783524}}</ref>
{{details|Categorical list of programming languages}}
प्रोग्रामिंग भाषाओं के लिए कोई व्यापक वर्गीकरण योजना नहीं है। किसी दी गई प्रोग्रामिंग भाषा में आमतौर पर एक पूर्वज भाषा नहीं होती है। उस समय संचलन में नए विचारों के साथ कई पूर्ववर्ती भाषाओं के तत्वों के संयोजन से आमतौर पर भाषाएँ उत्पन्न होती हैं। एक भाषा में उत्पन्न होने वाले विचार संबंधित भाषाओं के एक परिवार में फैलेंगे, और फिर एक पूरी तरह से अलग परिवार में प्रकट होने के लिए पारिवारिक अंतराल में अचानक छलांग लगा देंगे।


कार्य इस तथ्य से और जटिल है कि भाषाओं को कई अक्षों के साथ वर्गीकृत किया जा सकता है। उदाहरण के लिए, जावा एक वस्तु-उन्मुख भाषा है (क्योंकि यह वस्तु-उन्मुख संगठन को प्रोत्साहित करती है) और एक समवर्ती भाषा है (क्योंकि इसमें समानांतर में एकाधिक थ्रेड (कंप्यूटर विज्ञान) चलाने के लिए अंतर्निहित निर्माण शामिल हैं)। पायथन (प्रोग्रामिंग लैंग्वेज) एक ऑब्जेक्ट-ओरिएंटेड स्क्रिप्टिंग लैंग्वेज है।<ref>{{Cite web |title=धाराप्रवाह पायथन दूसरा संस्करण|url=https://www.thoughtworks.com/insights/books/fluent-python-2nd-edition |access-date=2022-10-11 |website=Thoughtworks |language=en}}</ref>
प्रोग्रामिंग लैंग्वेज को प्रोग्रामिंग प्रतिमान से असंबंधित कारकों द्वारा भी वर्गीकृत किया जा सकता है। इस प्रकार से उदाहरण के लिए, अधिकांश प्रोग्रामिंग लैंग्वेज अंग्रेजी लैंग्वेज के कीवर्ड का उपयोग करती हैं, जबकि [[गैर-अंग्रेज़ी-आधारित प्रोग्रामिंग भाषाएँ|गैर-अंग्रेज़ी-आधारित प्रोग्रामिंग लैंग्वेज]]। अन्य लैंग्वेजों को [[गूढ़ प्रोग्रामिंग भाषा|गूढ़ प्रोग्रामिंग]] लैंग्वेज के रूप में वर्गीकृत किया जा सकता है या नहीं।
व्यापक स्ट्रोक में, प्रोग्रामिंग भाषाओं को [[प्रोग्रामिंग प्रतिमान]] और उपयोग के इच्छित डोमेन द्वारा वर्गीकृत किया जाता है, जिसमें सामान्य-उद्देश्य वाली प्रोग्रामिंग भाषाएं [[डोमेन-विशिष्ट प्रोग्रामिंग भाषा]]ओं से अलग होती हैं। परंपरागत रूप से, प्रोग्रामिंग भाषाओं को अनिवार्य वाक्यों के संदर्भ में अभिकलन का वर्णन करने के रूप में माना जाता है, अर्थात आदेश जारी करना। इन्हें आम तौर पर [[अनिवार्य प्रोग्रामिंग]] भाषा कहा जाता है। प्रोग्रामिंग भाषाओं में अनुसंधान का एक बड़ा लक्ष्य निर्देश के एक सेट के रूप में एक कार्यक्रम और वांछित उत्तर के बारे में एक कार्यक्रम के रूप में अंतर को धुंधला करना है, जो कि [[घोषणात्मक प्रोग्रामिंग]] की मुख्य विशेषता है।<ref>Carl A. Gunter, ''Semantics of Programming Languages: Structures and Techniques'', MIT Press, 1992, {{ISBN|0-262-57095-5}}, p. 1</ref> अधिक परिष्कृत प्रतिमानों में [[प्रक्रियात्मक प्रोग्रामिंग]], वस्तु-उन्मुख प्रोग्रामिंग, कार्यात्मक प्रोग्रामिंग और तर्क प्रोग्रामिंग शामिल हैं; कुछ भाषाएँ प्रतिमान या बहु-प्रतिमान के संकर हैं। एक असेंबली भाषा एक अंतर्निहित मशीन आर्किटेक्चर के प्रत्यक्ष मॉडल के रूप में इतना प्रतिमान नहीं है। उद्देश्य से, प्रोग्रामिंग भाषाओं को सामान्य उद्देश्य, सिस्टम प्रोग्रामिंग भाषाएँ, स्क्रिप्टिंग भाषाएँ, डोमेन-विशिष्ट भाषाएँ, या समवर्ती/वितरित भाषाएँ (या इनमें से एक संयोजन) माना जा सकता है।<ref>{{cite web|url=http://tunes.org/wiki/programming_20languages.html|title=ट्यून्स: प्रोग्रामिंग लैंग्वेज|url-status=live|archive-url=https://web.archive.org/web/20071020203251/http://tunes.org/wiki/programming_20languages.html|archive-date=20 October 2007}}</ref> कुछ सामान्य उद्देश्य वाली भाषाओं को बड़े पैमाने पर शैक्षिक लक्ष्यों के साथ डिजाइन किया गया था।<ref>{{cite book|last=Wirth|first=Niklaus|title=प्रोग्रामिंग भाषाओं के इतिहास पर दूसरा ACM SIGPLAN सम्मेलन - HOPL-II|author-link=Niklaus Wirth|chapter=Recollections about the development of Pascal|journal=Proc. 2nd ACM SIGPLAN Conference on History of Programming Languages|volume=28|issue=3|pages=333–342|year=1993|url=http://portal.acm.org/citation.cfm?id=155378|doi=10.1145/154766.155378|isbn=978-0-89791-570-0|citeseerx=10.1.1.475.6989|s2cid=9783524}}</ref>
प्रोग्रामिंग भाषा को प्रोग्रामिंग प्रतिमान से असंबंधित कारकों द्वारा भी वर्गीकृत किया जा सकता है। उदाहरण के लिए, अधिकांश प्रोग्रामिंग भाषाएँ अंग्रेजी भाषा के कीवर्ड का उपयोग करती हैं, जबकि [[गैर-अंग्रेज़ी-आधारित प्रोग्रामिंग भाषाएँ]]। अन्य भाषाओं को [[गूढ़ प्रोग्रामिंग भाषा]] के रूप में वर्गीकृत किया जा सकता है या नहीं।


== यह भी देखें ==
== यह भी देखें ==
Line 275: Line 263:


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


*सोर्स कोड
*सोर्स कोड
*सिंटेक्स (प्रोग्रामिंग भाषाएं)
*सिंटेक्स (प्रोग्रामिंग लैंग्वेज)
*शब्दार्थ (कंप्यूटर विज्ञान)
*सिमेंटिक (कंप्यूटर विज्ञान)
*संदर्भ कार्यान्वयन
*संदर्भ कार्यान्वयन
*अंतरराष्ट्रीय मानकीकरण संगठन
*अंतरराष्ट्रीय मानकीकरण संगठन
*गणना का सिद्धांत
*गणना का सिद्धांत
*मार्कअप भाषाएँ
*मार्कअप लैंग्वेज
*बहाव को काबू करें
*बहाव को काबू करें
*अमूर्त (कंप्यूटर विज्ञान)
*अमूर्त (कंप्यूटर विज्ञान)
*निर्देश सेट वास्तुकला
*निर्देश समूह वास्तुकला
*उच्च स्तरीय प्रोग्रामिंग भाषा
*उच्च स्तरीय प्रोग्रामिंग लैंग्वेज
*सभा की भाषा
*सभा की लैंग्वेज
*लघु कोड (कंप्यूटर भाषा)
*लघु कोड (कंप्यूटर लैंग्वेज)
*उच्च स्तरीय भाषा
*उच्च स्तरीय लैंग्वेज
*उच्च प्रदर्शन कंप्यूटिंग
*उच्च निष्पादन कंप्यूटिंग
*शीर्ष 500
*शीर्ष 500
*छोटी बात
*छोटी बात
*वस्तु उन्मुख कार्यकर्म
*ऑब्जेक्ट ओरिएंटेड कार्यकर्म
*टाइप सिस्टम
*टाइप सिस्टम
*एसीएम का संचार
*एसीएम का संचार
*प्रतिनिधिमंडल (प्रोग्रामिंग)
*प्रतिनिधिमंडल (प्रोग्रामिंग)
*चौथी पीढ़ी की प्रोग्रामिंग भाषा
*चौथी पीढ़ी की प्रोग्रामिंग लैंग्वेज
*पहलू आधारित प्रोग्रामिंग
*एस्पेक्ट आधारित प्रोग्रामिंग
*पायथन (प्रोग्रामिंग भाषा)
*पायथन (प्रोग्रामिंग लैंग्वेज)
*संदर्भ मुक्त व्याकरण
*संदर्भ मुक्त व्याकरण
*अच्छे प्रकार से निर्मित
*अच्छे प्रकार से निर्मित
Line 373: Line 361:
*शाब्दिक स्ट्रिंग
*शाब्दिक स्ट्रिंग
*घोषणा (कंप्यूटर विज्ञान)
*घोषणा (कंप्यूटर विज्ञान)
*रन टाइम (कार्यक्रम जीवनचक्र चरण)
*रन टाइम (प्रोग्राम जीवनचक्र चरण)
*दृढ़ता से टाइप की गई प्रोग्रामिंग भाषा
*दृढ़ता से टाइप की गई प्रोग्रामिंग लैंग्वेज
*अनाम समारोह
*अनाम समारोह
*भाषा का अंकन
*लैंग्वेज का अंकन
*ओरेकल कॉर्पोरेशन
*ओरेकल कॉर्पोरेशन
*सत्र (कंप्यूटर विज्ञान)
*सत्र (कंप्यूटर विज्ञान)
*आर (प्रोग्रामिंग भाषा)
*आर (प्रोग्रामिंग लैंग्वेज)
*डेटा विनिमय भाषा
*डेटा विनिमय लैंग्वेज
*बुनियादी बोलियों की सूची
*बेसिक उपभाषा की सूची
*धागा (कंप्यूटर विज्ञान)
*थ्रेड (कंप्यूटर विज्ञान)
*सामान्य प्रयोजन प्रोग्रामिंग भाषा
*सामान्य प्रयोजन प्रोग्रामिंग लैंग्वेज
*भाषा-उन्मुख प्रोग्रामिंग
*लैंग्वेज-ओरिएंटेड प्रोग्रामिंग
*अधिकांश लोकप्रिय वेबसाइटों में उपयोग की जाने वाली प्रोग्रामिंग भाषाएँ
*अधिकांश लोकप्रिय वेबसाइटों में उपयोग की जाने वाली प्रोग्रामिंग लैंग्वेज
*प्रोग्रामिंग भाषाओं की तुलना (मूल निर्देश)
*प्रोग्रामिंग लैंग्वेजों की तुलना (मूल निर्देश)
==बाहरी संबंध==
==बाह्य संबंध==
{{Sister project links|wikt=programming language|commons=Category:Programming languages|v=Programming languages|q=Programming languages|s=no|b=Subject:Computer programming languages|d=Q9143|mw=no|m=no|species=no|n=Category:Computing|voy=no}}
{{Sister project links|wikt=programming language|commons=Category:Programming languages|v=Programming languages|q=Programming languages|s=no|b=Subject:Computer programming languages|d=Q9143|mw=no|m=no|species=no|n=Category:Computing|voy=no}}


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

बाह्य संबंध