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

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

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

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

प्रोग्रामिंग लैंग्वेज थ्योरी के इतिहास में तब से कुछ अन्य प्रमुख घटनाएं:

1950 के दशक

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

1960 के दशक

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

1970 के दशक

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

1980 के दशक

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

1990 के दशक

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

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

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

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

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

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

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

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

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

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

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

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

यह भी देखें

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

अग्रिम पठन

 * 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.