भाषा प्रतिमान
प्रोग्रामिंग प्रतिमान वे मूलभूत शैलियाँ हैं जो यह व्यवस्थित करती हैं कि गणना को कैसे व्यक्त किया जाता है, अनिवार्य स्थिति उत्परिवर्तन से लेकर कार्यात्मक, तर्क और घोषणात्मक मॉडल तक।
Definition
एक प्रोग्रामिंग प्रतिमान एक भाषा के भीतर गणना को व्यवस्थित करने के लिए अवधारणाओं और संरचनात्मक सिद्धांतों का एक सुसंगत सेट है, जो यह परिभाषित करता है कि प्रोग्राम की मूल इकाइयाँ क्या हैं (कथन, अभिव्यक्तियाँ, वस्तुएँ, संबंध) और वे कैसे संयोजित होती हैं।
Scope
यह क्षेत्र प्रोग्रामिंग भाषाओं के प्रमुख प्रतिमानों और उन्हें रेखांकित करने वाले कम्प्यूटेशनल मॉडलों को शामिल करता है: परिवर्तनीय स्थिति और संदेश पासिंग पर निर्मित अनिवार्य और वस्तु-उन्मुख प्रोग्रामिंग; अभिव्यक्ति मूल्यांकन और उच्च-क्रम कार्यों पर निर्मित कार्यात्मक प्रोग्रामिंग; संबंधों और खोज पर निर्मित तर्क और बाधा प्रोग्रामिंग; और मेटाप्रोग्रामिंग, जहाँ प्रोग्राम प्रोग्रामों में हेरफेर करते हैं। यह इस बात पर प्रकाश डालता है कि प्रतिमान भाषा डिज़ाइन को कैसे आकार देते हैं, वे किन व्यापार-बंदों को समाहित करते हैं, और आधुनिक बहु-प्रतिमान भाषाएँ उन्हें कैसे जोड़ती हैं।
Sub-topics
Core questions
- एक प्रतिमान को दूसरे से क्या अलग करता है, और क्या ये भेद तीखे हैं या जोर के मामले हैं?
- प्रतिमान कार्यक्रम की शुद्धता, मॉड्यूलरिटी और तर्क को कैसे प्रभावित करते हैं?
- क्या अनिवार्य और घोषणात्मक शैलियों को एकीकृत किया जा सकता है, और उन्हें मिलाने से क्या प्राप्त होता है या क्या खो जाता है?
- अंतर्निहित कम्प्यूटेशनल मॉडल (वॉन न्यूमैन मशीन, लैम्ब्डा कैलकुलस, रिज़ॉल्यूशन) एक प्रतिमान को कैसे प्रभावित करता है?
Key theories
- कार्यक्रमों के बीजगणित के रूप में कार्यात्मक प्रोग्रामिंग
- बैकस ने तर्क दिया कि कार्यात्मक, कॉम्बिनेटर-आधारित प्रोग्रामिंग कार्यक्रमों को तर्क और परिवर्तन के लिए समीकरण कानूनों का एक बीजगणित देकर भाषाओं को वॉन न्यूमैन बॉटलनेक से मुक्त करती है।
- एल्गोरिथम = तर्क + नियंत्रण
- कोवाल्स्की द्वारा एक समस्या के तार्किक विनिर्देश को उसे हल करने के लिए उपयोग की जाने वाली नियंत्रण रणनीति से अलग करना घोषणात्मक/तर्क प्रतिमान को आधार देता है और यह स्पष्ट करता है कि यह प्रक्रियात्मक कोड से कैसे भिन्न है।
- बहु-प्रतिमान कर्नेल-भाषा ढाँचा
- वैन रॉय और हरिदी प्रतिमानों को एक छोटी कर्नेल भाषा के वृद्धिशील विस्तार के रूप में प्रस्तुत करते हैं, यह दिखाते हुए कि स्थिति, समवर्तीता और आलस्य जैसी अवधारणाओं को प्रत्येक प्रतिमान को पुनः प्राप्त करने के लिए कैसे जोड़ा या हटाया जा सकता है।
Clinical relevance
प्रतिमान के चुनाव के सॉफ्टवेयर इंजीनियरिंग के लिए व्यावहारिक परिणाम होते हैं: कार्यात्मक और घोषणात्मक शैलियाँ समीकरण तर्क, परीक्षण क्षमता और समानांतरकरण में सहायता करती हैं, जबकि वस्तु-उन्मुख अपघटन बड़े पैमाने पर मॉड्यूलरिटी का समर्थन करता है। आधुनिक भाषाएँ तेजी से प्रतिमानों का मिश्रण कर रही हैं, इसलिए उनके व्यापार-बंदों को समझना भाषा के चयन और मुहावरेदार डिज़ाइन को सूचित करता है।
History
अनिवार्य प्रोग्रामिंग संग्रहीत-प्रोग्राम वॉन न्यूमैन वास्तुकला और फोर्ट्रान और एल्गोल जैसी शुरुआती भाषाओं से निकली है। लिस्प (1958) ने लैम्ब्डा कैलकुलस में निहित कार्यात्मक विचारों को पेश किया। 1970 के दशक में तर्क प्रोग्रामिंग (प्रोलॉग) और संरचित और फिर वस्तु-उन्मुख प्रोग्रामिंग (सिमुला, स्मॉलटॉक) का उदय हुआ। बैकस के 1977 के ट्यूरिंग अवार्ड व्याख्यान ने अनिवार्य शैली की कार्यात्मक आलोचना को क्रिस्टलीकृत किया, और बाद के दशकों में तेजी से बहु-प्रतिमान भाषाएँ सामने आईं।
Debates
- प्राथमिक संगठनात्मक सिद्धांत के रूप में अनिवार्य बनाम घोषणात्मक
- एक लंबे समय से चली आ रही बहस अनिवार्य कोड की प्रत्यक्षता और प्रदर्शन नियंत्रण को घोषणात्मक और कार्यात्मक शैलियों के तर्क और संयोज्यता लाभों के खिलाफ तौलती है; अधिकांश आधुनिक भाषाएँ दोनों का समर्थन करके इसे हल करती हैं।
Key figures
- John Backus
- Robert Kowalski
- Peter Van Roy
- Harold Abelson
- Gerald Jay Sussman
Related topics
Seminal works
- backus1978
- kowalski1979
- vanroy2004
- abelson1996
Frequently asked questions
- क्या वस्तु-उन्मुख प्रोग्रामिंग अनिवार्य प्रोग्रामिंग से एक अलग प्रतिमान है?
- वस्तु-उन्मुख प्रोग्रामिंग को आमतौर पर अनिवार्य प्रतिमान पर स्तरित एक संरचनात्मक अनुशासन के रूप में माना जाता है: यह परिवर्तनीय स्थिति को संलग्न व्यवहार वाली वस्तुओं में व्यवस्थित करता है, लेकिन फिर भी स्थिति परिवर्तन और अनुक्रमण पर निर्भर करता है।
- क्या प्रतिमान परस्पर अनन्य हैं?
- नहीं। कई व्यापक रूप से उपयोग की जाने वाली भाषाएँ बहु-प्रतिमान हैं, जो कार्यात्मक, वस्तु-उन्मुख और अनिवार्य विशेषताओं को जोड़ती हैं ताकि प्रोग्रामर प्रति कार्य के लिए सबसे उपयुक्त शैली चुन सकें।