प्रोग्रामिंग भाषा सिद्धांत

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

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

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

प्रोग्रामिंग भाषा सिद्धांत के इतिहास की कुछ अन्य प्रमुख घटनाएं:

1950 के दशक

 * नोम चौमस्की ने भाषाविज्ञान के क्षेत्र में चॉम्स्की पदानुक्रम विकसित किया, एक खोज जिसने प्रोग्रामिंग भाषा सिद्धांत और कंप्यूटर विज्ञान की अन्य शाखाओं को सीधे प्रभावित किया है।

1960 के दशक

 * सिमुला भाषा ओले-जोहान डाहल और क्रिस्टन न्यागार्ड द्वारा विकसित की गई थी; इसे व्यापक रूप से ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग भाषा का पहला उदाहरण माना जाता है; सिमुला ने कोरटाइन्स की अवधारणा भी ज्ञात की थी।
 * 1964 में, पीटर लैंडिन ने पाया की चर्च के लैम्ब्डा अवकलन का उपयोग प्रोग्रामिंग भाषाओं को निर्मित करने के लिए किया जा सकता है। उन्होंने SECD मशीन की खोज की जो लैम्ब्डा भावों की व्याख्या करती है।
 * 1965 में, लैंडिन ने जे ऑपरेटर का परिचय दिया, जो साधारणतया निरंतरता का एक रूप है।
 * 1966 में, लैंडिन ने अपने लेख द नेक्स्ट 700 प्रोग्रामिंग लैंग्वेज में ISWIM, एक अमूर्त कंप्यूटर प्रोग्रामिंग भाषा का परिचय दिया। हास्केल (प्रोग्रामिंग भाषा) प्रोग्रामिंग भाषा के लिए अग्रणी भाषाओं के निर्माण में यह प्रभावशाली है।
 * 1966 में, कर्राडो बोहम ने प्रोग्रामिंग भाषा CUCH (करी-चर्च) की शुरुआत की थी।
 * 1967 में, क्रिस्टोफर स्ट्रेची ने प्रोग्रामिंग भाषा में आधारभूत सिद्धांत इन लेक्चर नोट्स के अपने प्रभावशाली सेट को प्रकाशित किया, जिसमें टर्मिनोलॉजी R-मान, p-मान, पैरामीट्रिक पॉलीमॉरफिस्म, तथा एडी हॉक पॉलीमॉरफिस्म मूल्यों (कंप्यूटर विज्ञान) का परिचय दिया गया था।
 * 1969 में, जे. रोजर हिंडले ने द प्रिंसिपल टाइप-स्कीम ऑफ़ ए ऑब्जेक्ट इन कॉम्बिनेटरी लॉजिक प्रकाशित किया, जिसे बाद में हिंडले-मिलनर टाइप इंटरफेरेंस एल्गोरिथम में सामान्यीकृत किया गया।
 * 1969 में, टोनी होरे ने होरे विचार का परिचय दिया, जो स्वयंसिद्ध शब्दार्थ का एक रूप है।
 * 1969 में, विलियम एल्विन हावर्ड ने एक उच्च-स्तरीय प्रूफ सिस्टम ज्ञात किया, जिसे प्राकृतिक डिडक्शन के रूप में संदर्भित किया जाता है, जिसका सीधे इसके अंतर्ज्ञानवादी संस्करण में गणना के प्रणाली के लिखे गए संस्करण के रूप में व्याख्या किया जा सकता है जिसे लैम्ब्डा अवकलन के रूप में जाना जाता है। यह बाद में करी-हावर्ड सामंजस्य के रूप में जाना जाने लगा।

1970 के दशक

 * 1970 में, दाना स्कॉट ने पहली बार अपने कार्य को सांकेतिक शब्दार्थ पर प्रकाशित किया।
 * 1972 में, तर्क प्रोग्रामिंग और प्रोलॉग विकसित किए गए, जिससे कंप्यूटर प्रोग्राम को गणितीय तर्क के रूप में व्यक्त किया जा सके।
 * अब एलन के के नेतृत्व में ज़ेरॉक्स PARC में वैज्ञानिकों की एक टीम ने स्मॉलटॉक विकसित किया, जो एक ऑब्जेक्ट-ओरिएंटेड भाषा है जो व्यापक रूप से अपने नवीन विकास पर्यावरण के लिए जानी जाती है।
 * 1974 में, जॉन सी. रेनॉल्ड्स ने सिस्टम एफ की खोज की। यह 1971 में गणितीय तर्कशास्त्री जीन-यवेस गिरार्ड द्वारा पहले ही खोजा जा चुका था।
 * 1975 से, गेराल्ड जे सुस्मान और गाइ स्टील ने स्कीम प्रोग्रामिंग भाषा विकसित की, एक लिस्प बोली जिसमें लेक्सिकल स्कूपिंग, एक एकीकृत नाम स्थान, और प्रथम श्रेणी की निरंतरता के साथ ही एक्टर प्रणाली के तत्व सम्मलित है।
 * 1977 के ट्यूरिंग अवार्ड व्याख्यान में बैकस ने औद्योगिक भाषाओं की वर्तमान स्थिति का विरोध किया और प्रोग्रामिंग भाषाओं की एक नई श्रेणी का प्रस्ताव रखा, जिसे अब फंक्शन-लेवल प्रोग्रामिंग भाषाओं के रूप में जाना जाता है।
 * 1977 में, गॉर्डन प्लॉटकिन ने प्रोग्रामिंग संगणनीय कार्य, एक अब्स्त्रक्त प्रकार की कार्यात्मक भाषा का निर्माण किया।
 * 1978 में, रॉबिन मिलनर ने ML प्रोग्रामिंग भाषा के लिए हिंडले-मिलनर टाइप इनफेरेंस एल्गोरिथम प्रदान किया। टाइप सिद्धांत प्रोग्रामिंग भाषाओं के लिए एक अनुशासन के रूप में लागू हो गई, इस एप्लिकेशन ने वर्षों से टाइप सिद्धांत में बहुत अधिक प्रगति की है।

1980 के दशक

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

1990 के दशक

 * ग्रेगोर किकज़ालेस, जिम डेस रिविएरेस और डैनियल जी. बोब्रो ने मेटाऑब्जेक्ट प्रोटोकॉल की कला नामक पुस्तक प्रकाशित की थी।
 * यूजीनियो मोगी और फिलिप वाडलर ने कार्यात्मक प्रोग्रामिंग भाषाओं में लिखे गए कार्यक्रमों की संरचना के लिए कार्यात्मक प्रोग्रामिंग में मोनाड्स के उपयोग की शुरुआत की थी।

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

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

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

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

तुलनात्मक प्रोग्रामिंग भाषा विश्लेषण
तुलनात्मक प्रोग्रामिंग भाषा विश्लेषण प्रोग्रामिंग भाषाओं को उनकी विशेषताओं के आधार पर विभिन्न प्रकारों में वर्गीकृत करता हैं; प्रोग्रामिंग भाषाओं की व्यापक श्रेणियों को प्रायः प्रोग्रामिंग प्रतिमानको के रूप में जाना जाता है।

सामान्य और मेटाप्रोग्रामिंग
मेटाप्रोग्रामिंग उच्च-क्रम के कार्यक्रमों की पीढ़ी है, जो निष्पादित होने पर, परिणामस्वरूप प्रोग्राम (संभवतः एक अलग भाषा में, या मूल भाषा के एक उपसमूह में) उत्पन्न करते हैं।

डोमेन-विशिष्ट भाषाए
डोमेन-विशिष्ट भाषाएँ डोमेन के किसी विशेष भाग की समस्याओं को कुशलतापूर्वक हल करने के लिए निर्मित भाषाएँ हैं।

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

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

पत्रिकाएं, प्रकाशन और सम्मेलन
प्रोग्रामिंग भाषाओं में अनुसंधान प्रस्तुत करने के लिए सम्मेलन प्राथमिक स्थल हैं। सबसे प्रसिद्ध सम्मेलनों में प्रोग्रामिंग भाषाओं के सिद्धांतों पर संगोष्ठी (POPL), प्रोग्रामिंग भाषा डिजाइन और कार्यान्वयन पर सम्मेलन (PLDI), कार्यात्मक प्रोग्रामिंग पर अंतर्राष्ट्रीय सम्मेलन (ICFP),ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग का अंतर्राष्ट्रीय सम्मलेन (OOPSLA) | प्रोग्रामिंग भाषाओं और ऑपरेटिंग प्रणालियों (ASPLOS) के लिए वास्तुकला सहयोग पर अंतर्राष्ट्रीय सम्मेलन सम्मलित हैं।

PLT अनुसंधान प्रकाशित करने वाली उल्लेखनीय पत्रिकाओं में प्रोग्रामिंग भाषा एवं प्रणाली (TOPLAS), जर्नल ऑफ फंक्शनल प्रोग्रामिंग (JFP), जर्नल ऑफ फंक्शनल एंड लॉजिक प्रोग्रामिंग, और उच्च-क्रम और प्रतीकात्मक संगणना पर ACM सहभागिता सम्मलित हैं।

यह भी देखें

 * SIG योजना
 * प्रोग्रामिंग भाषाओं की समयरेखा
 * बहुत उच्च स्तरीय प्रोग्रामिंग भाषा

अग्रिम पठन

 * Abadi, Martín and Cardelli, Luca. A Theory of Objects. Springer-Verlag.
 * Michael J. C. Gordon. Programming Language Theory and Its Implementation. Prentice Hall.
 * Gunter, Carl and Mitchell, John C. (eds.). Theoretical Aspects of Object Oriented Programming Languages: Types, Semantics, and Language Design. MIT Press.
 * Harper, Robert. Practical Foundations for Programming Languages. Draft version.
 * Knuth, Donald E. (2003). Selected Papers on Computer Languages. Stanford, California: Center for the Study of Language and Information.
 * Mitchell, John C. Foundations for Programming Languages.
 * Mitchell, John C. Introduction to Programming Language Theory.
 * O'Hearn, Peter. W. and Tennent, Robert. D. (1997). Algol-like Languages. Progress in Theoretical Computer Science. Birkhauser, Boston.
 * Pierce, Benjamin C. (2002). Types and Programming Languages. MIT Press.
 * Pierce, Benjamin C. Advanced Topics in Types and Programming Languages.
 * Pierce, Benjamin C. et al. (2010). Software Foundations.

बाहरी संबंध

 * Lambda the Ultimate, a community weblog for professional discussion and repository of documents on programming language theory.
 * Great Works in Programming Languages. Collected by Benjamin C. Pierce (University of Pennsylvania).
 * Classic Papers in Programming Languages and Logic. Collected by Karl Crary (Carnegie Mellon University).
 * Programming Language Research. Directory by Mark Leone.
 * λ-Calculus: Then & Now by Dana S. Scott for the ACM Turing Centenary Celebration
 * Grand Challenges in Programming Languages. Panel session at POPL 2009.