विस्तारयोग्य प्रोग्रामिंग: Difference between revisions
No edit summary |
|||
(17 intermediate revisions by 5 users not shown) | |||
Line 1: | Line 1: | ||
''' | '''विस्तारयोग्य प्रोग्रामिंग''' [[कंप्यूटर विज्ञान]], में कंप्यूटर प्रोग्रामिंग की एक शैली का वर्णन करने के लिए प्रयोग किया जाने वाला एक शब्द है जो [[प्रोग्रामिंग भाषा]], [[ संकलक |संकलक]] तथा [[रन-टाइम सिस्टम]] को विस्तारित करने वाले तंत्रों पर केंद्रित है। प्रोग्रामिंग की इस कवची का समर्थन करने वाली विस्तारयोग्य प्रोग्रामिंग भाषा, 1960 के दशक में कार्य का एक सक्रिय क्षेत्र थी, परंतु 1970 के दशक में यह आंदोलन उपेक्षित हो गया।<ref name="Standish1975"/> विस्तारयोग्य प्रोग्रामिंग 21वीं शताब्दी में नए सिरे से रुचि का विषय बन गया है। <ref name="Wilson2005">Gregory V. Wilson, "[http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.453.3676&rep=rep1&type=pdf Extensible Programming for the 21st Century]", ''ACM Queue'' 2 no. 9 (Dec/Jan 2004–2005).</ref> | ||
== ऐतिहासिक आंदोलन == | == ऐतिहासिक आंदोलन == | ||
विस्तारयोग्य प्रोग्रामिंग भाषा आंदोलन से संबंधित | विस्तारयोग्य प्रोग्रामिंग भाषा आंदोलन से संबंधित पहला लेख सामान्यतः<ref name="Standish1975">Standish, Thomas A., "[https://pdfs.semanticscholar.org/7f11/082b409647e8d50dadd3a369a10278b5890f.pdf Extensibility in Programming Language Design]", ''SIGPLAN Notices'' 10 no. 7 (July 1975), pp. 18–21.</ref><ref name="Sammet1969">Sammet, Jean E., ''Programming Languages: History and Fundamentals'', Prentice-Hall, 1969, section III.7.2</ref> डगलस मैक्लरॉय से जुड़ा है जिसमें उच्च-स्तरीय प्रोग्रामिंग भाषाओं के लिए [[मैक्रो (कंप्यूटर विज्ञान)|मैक्रोस]] पर चर्चा की गई है।<ref name="McIlroy1960">McIlroy, M.D., "[https://dl.acm.org/citation.cfm?id=367223 Macro Instruction Extensions of Compiler Languages]", ''Communications of the ACM'' 3 no. 4 (April 1960), pp. 214–220.</ref> विस्तारयोग्यता के सिद्धांत का एक और प्रारंभिक वर्णन "[[ संकलक-संकलक |संकलक-संकलक]]" पर ब्रुकर और मोरिस के 1960 के लेख में मिलता है।<ref name="Brooker&Morris1962">Brooker, R.A. and Morris, D., "[https://dl.acm.org/citation.cfm?id=321106 A General Translation Program for Phrase Structure Languages]", ''Journal of the ACM'' 9 no. 1 (January 1962), pp. 1–10. The paper was received in 1960.</ref> 1969 और 1971 में आंदोलन के शिखर को दो अकादमिक संगोष्ठियों द्वारा चिह्नित किया गया था।<ref name="Christensen&Shaw1969">Christensen, C. and Shaw, C.J., eds., Proceedings of the Extensible Languages Symposium, ''SIGPLAN Notices'' 4 no. 8 (August 1969).</ref><ref name="Schuman1971">Schuman, S.A., ed., Proceedings of the International Symposium on Extensible Languages, ''SIGPLAN Notices'' 6 no. 12 (December 1971).</ref> 1975 तक, थॉमस ए. स्टैंडिश द्वारा आंदोलन पर उनका लिखा सर्वेक्षण लेख<ref name="Standish1975"/>अनिवार्य रूप से एक पोस्टमार्टम था।[[ चौथी प्रोग्रामिंग भाषा | फॉर्थ प्रोग्रामिंग भाषा]] इस अपेक्षा में एक अपवाद थी, परंतु यह मुख्य रूप से अनदेखी रह गई। | ||
=== ऐतिहासिक आंदोलन का चरित्र === | === ऐतिहासिक आंदोलन का चरित्र === | ||
सामान्यतः योजित, एक विस्तारयोग्य प्रोग्रामिंग भाषा में एक मूल भाषा होती थी जो प्राथमिक कम्प्यूटिंग सुविधाएँ प्रदान करती थी, और एक मेटा-भाषा होती थी जो मूल भाषा को संशोधित करने की क्षमता रखती थी। उस समय किसी प्रोग्राम में मेटा-भाषा की संशोधन और संशोधित मूल भाषा में कोड सम्मिलित होता था। | |||
आंदोलन में उपयोग की जाने वाली सबसे प्रमुख भाषा-विस्तार तकनीक स्थूल परिभाषा थी। व्याकरण संशोधन भी आंदोलन के साथ निकटता से जुड़ा हुआ था, जिसके परिणामस्वरूप [[अनुकूली व्याकरण]] का विकास हुआ। लिस्प | आंदोलन में उपयोग की जाने वाली सबसे प्रमुख भाषा-विस्तार तकनीक स्थूल परिभाषा थी। व्याकरण संशोधन भी आंदोलन के साथ निकटता से जुड़ा हुआ था, जिसके परिणामस्वरूप [[अनुकूली व्याकरण]] का विकास हुआ। लिस्प प्रोग्रामिंग [[मेटा भाषा]] समुदाय, विस्तारयोग्य भाषा समुदाय से अलग रही, जिसके कारण को किसी प्रोग्राम द्वारा निम्नलिखित रूप में संदर्भित किया है।<blockquote>किसी भी प्रोग्रामिंग भाषा में, जिसमें प्रोग्राम और डेटा मूल रूप से एक-दूसरे के समान होते हैं, को विस्तारयोग्य भाषा के रूप में माना जा सकता है। यह बहुत सरलता से देखा जा सकता है कि लिस्प वर्षों से विस्तारयोग्य भाषा के रूप में उपयोग की गई है।<ref name="Harrison1969">Harrison, M.C., in "Panel on the Concept of Extensibility", pp. 53–54 of the 1969 symposium.</ref></blockquote>1969 के सम्मेलन में, [[ शुरुआत |सिमुला]] को एक विस्तारयोग्य प्रोग्रामिंग भाषा के रूप में प्रस्तुत किया गया था। | ||
स्टैंडिश ने भाषा विस्तार के तीन वर्गों का वर्णन किया है, जिसे उन्होंने [[ संक्षिप्त व्याख्या |पैराफ्रेज़]], ऑर्थोफ्रेज और मेटाफ्रेज कहा है। | |||
* पैराफ्रेज़ एक सुविधा की परिभाषा करता है जिसमें दिखाया जाता है कि इसे पहले परिभाषित (या परिभाषित होने वाले) कुछ के साथ आदान-प्रदान किया जा सकता है। उन्होंने मैक्रो परिभाषाएँ, साधारण प्रक्रिया परिभाषा, व्याकरणिक विस्तार, डेटा परिभाषा, ऑपरेटर परिभाषा और नियंत्रण संरचना के विस्तार को उदाहरण के रूप में दिया है। | |||
* ऑर्थोफ्रेज़ भाषा में कई ऐसी विशेषताएँ जो मूल भाषा का उपयोग करके प्राप्त नहीं की जा सकती थीं, उन्हें जोड़ती है, जैसे कि किसी मूल भाषा में पहले से कोई आई/ओ उपकरण नहीं है, इसे जोड़कर आई/ओ उपकरण को जोड़ा जा सकता है। विस्तारों को किसी निर्दिष्ट मूल भाषा के संदर्भ में ऑर्थोफ्रेज़ के रूप में समझा जाना चाहिए, क्योंकि मूल भाषा के आधार पर परिभाषित नहीं होने वाली विशेषता को किसी अन्य भाषा के आधार पर परिभाषित किया जा सकता है। ऑर्थोफ्रेज़ आधुनिक प्लग-इन्स की आधुनिक धारणा के समान है। | |||
* मेटाफ्रेज़ मूल अभिव्याक्ति के लिए उपयोग की जाने वाली व्याख्या नियमों को संशोधित करती है। यह आधुनिक [[प्रतिबिंब (कंप्यूटर विज्ञान)|प्रतिबिंबन]] की आधुनिक धारणा के समान होती है। | |||
स्टैंडिश ने भाषा | === ऐतिहासिक आंदोलन का अंत === | ||
स्टैंडिश ने एक्स्टेंसिबिलिटी आंदोलन की विफलता को लगातार एक्सटेंशन प्रोग्रामिंग की कठिनाई के लिए उत्तरदायी ठहराया। एक साधारित प्रोग्रामर एक मूल भाषा के आसपास मैक्रोस की एकल कवच बना सकता है, लेकिन यदि इसके चारों ओर एक दूसरी मैक्रोस कवच बनानी होती है, तो प्रोग्रामर को मूल भाषा और पहली कवच दोनों के अत्यंत परिचित होना चाहिए; तीसरी कवच को मूल भाषा, पहली और दूसरी कवच दोनों की परिचय की आवश्यकता होगी; और इसी तरह आगे जाते हुए हर एक नई कवच के लिए प्रोग्रामर को मूल भाषा और सभी पहले तक की कवचों की अवगतता होनी चाहिए। ध्यान दें कि निम्न स्तरीय विवरणों से प्रोग्रामर को छिपाना एक अवधारणा आंदोलन का उद्देश्य है जो विस्तारयोग्यता आंदोलन का स्थान लेता है। | |||
यद्यपि 1975 तक, जबकि सिमुला को पहले ही विस्तारयोग्य रूप में प्रस्तुत किया गया था, स्टैंडिश का सर्वेक्षण अभ्यास वास्तविक रूप में नवीनतम अभिकल्प-आधारित प्रौद्योगिकियों को शामिल नहीं करता प्रतीत होता है। यद्यपि तकनीकी रूप से उन्होंने विस्तारयोग्यता की अत्यधिक सामान्य परिभाषा का उपयोग किया था जिसमें तकनीकी रूप से उन्हें शामिल किया जा सकता था। एक 1978 की प्रोग्रामिंग अभिसरण का इतिहास, कंप्यूटर के आविष्कार से (तब) वर्तमान दिन तक, मैक्रोस का कोई उल्लेख नहीं किया गया था, और इसमें कभी भी विस्तारयोग्यता आंदोलन के बारे में कोई संकेत नहीं दिया गया था।<ref name="Guarino1978">Guarino, L.R., "[http://www.dtic.mil/get-tr-doc/pdf?AD=ADA059394 The Evolution of Abstraction in Programming Languages]{{dead link|date=June 2022|bot=medic}}{{cbignore|bot=medic}}", ''CMU-CS-78-120'', Department of Computer Science, Carnegie-Mellon University, Pennsylvania, 22 May 1978.</ref> 1980 के दशक के अंत तक, छद्म नाम सिंटैक्टिक एब्स्ट्रक्शन द्वारा मैक्रोज़ को अस्थायी रूप से अमूर्त आंदोलन से अवगत कराया गया था।<ref name="Gabriel1989">Gabriel, Richard P., ed., "[https://dl.acm.org/citation.cfm?id=66092 Draft Report on Requirements for a Common Prototyping System]", ''SIGPLAN Notices'' 24 no. 3 (March 1989), pp. 93ff.</ref> | |||
== आधुनिक आंदोलन == | |||
आधुनिक संदर्भ में, विस्तारयोग्य प्रोग्रामिंग का समर्थन करने वाली एक सिस्टम निम्नलिखित विशेषताओं का समर्थन प्रदान करेगी: | |||
== | === विस्तारयोग्य वाक्य रचना === | ||
{{category see also|विस्तारयोग्य संयोजन प्रोग्रामिंग भाषाएं}} | |||
इसका सीधा तात्पर्य यह है कि संकलित की जाने वाली स्रोत भाषा विवृत्त, निश्चित या स्थिर नहीं होनी चाहिए। स्रोत भाषा(ओं) में नए कीवर्ड्स, अवधारणाओं और संरचनाओं को जोड़ना संभव होना चाहिए। उपयोगकर्ता परिभाषित सिंटैक्स के साथ सरचनाओ को जोड़ने की अनुमति देने वाली भाषाओं में [[Coq]]<ref>{{Cite web |title=Syntax extensions and notation scopes — Coq 8.17.0 documentation |url=https://coq.inria.fr/refman/user-extensions/syntax-extensions.html |access-date=2023-05-25 |website=coq.inria.fr}}</ref> [[रैकेट (प्रोग्रामिंग भाषा)|रैकेट]] , [[Camlp4]], OpenC++ , [[Seed7]],<ref name="Zingaro2007">Zingaro, Daniel, "[http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.69.2848&rep=rep1&type=pdf Modern Extensible Languages]", SQRL Report 47 McMaster University (October 2007), page 16.</ref> [[ लाल (प्रोग्रामिंग भाषा) | रेड]], [[ रिबोल | रिबोल]] और [[ फेलिक्स (प्रोग्रामिंग भाषा) | फेलिक्स]] आदि भाषा सम्मिलित है । कुछ मौलिक और स्वाभाविक भाषा सुविधाओं को अपरिवर्तनीय होने की मान्यता है, परंतु सिस्टम को केवल उन भाषा सुविधाओं पर निर्भर नहीं होना चाहिए। नई सुविधाओं को जोड़ना संभव होना चाहिए। | |||
इसका सीधा | |||
=== | === विस्तारयोग्य संकलक === | ||
विस्तारयोग्य प्रोग्रामिंग में, संकलक एक एककट्ठ निर्माणकारी प्रोग्राम नहीं होता है जो स्रोत कोड इनपुट को बाइनरी कार्यात्मक आउटपुट में परिवर्तित करता है। संकलक स्वयं इस बिंदु तक विस्तारयोग्य होना चाहिए कि यह वास्तव में प्लगइन्स का एक संग्रह है जो किसी भी वस्तु में स्रोत भाषा इनपुट के अनुवाद में सहायता करता है। उदाहरण के लिए, एक विस्तारयोग्य संकलक ऑब्जेक्ट कोड, कोड प्रलेखन, पुनः स्वरूपित स्रोत कोड, या किसी अन्य वांछित आउटपुट की पीढ़ी का समर्थन करता है। संकलक के संरचना को अपने उपयोगकर्ताओं को संकलन प्रक्रिया के अंदर आने और संकलन प्रक्रिया में प्रत्येक उचित चरण पर वैकल्पिक प्रसंस्करण कार्य प्रदान करने की अनुमति देता है। | |||
स्रोत कोड को किसी ऐसी | स्रोत कोड को किसी ऐसी वस्तु में अनुवाद करने के कार्य के लिए जिसे कंप्यूटर पर निष्पादित किया जा सकता है, एक विस्तारयोग्य संकलक को निम्नलिखित बाते समर्थित करनी चाहिए: | ||
* | * यह समर्थन करना चाहिए कि कंपाइलर को अपने सभी कार्यों के लिए प्लग-इन या घटक संरचना का उपयोग करना चाहिए। | ||
* निर्धारित | * यह निर्धारित करना चाहिए कि कंपाइल किया जा रहा भाषा या भाषा विविधता कौन सी है और संबंधित प्लग-इन का पता लगाना चाहिए जो उस भाषा को पहचानने और मान्यता प्रदान करने के लिए उपयुक्त है। | ||
* | * यादृच्छिक स्रोत भाषाओं को वाक्यात्मक और संरचनात्मक रूप से मान्य करने के लिए औपचारिक भाषा विनिर्देशों का उपयोग करना चाहिए। | ||
* | * यह सुनिश्चित करना चाहिए कि कंपाइलर संबंधित मान्यता प्रदान करने वाले प्लग-इन को आह्वान करके किसी भी स्रोत भाषा की सांदर्भिक मान्यता की पुष्टि में सहायता करे। | ||
* उपयोगकर्ताओं को विभिन्न प्रकार के कोड जनरेटर से चयन करने की अनुमति दें | * उपयोगकर्ताओं को विभिन्न प्रकार के कोड जनरेटर से चयन करने की अनुमति दें जिससे परिणामी निष्पादन योग्य कूट को विभिन्न प्रोसेसर, ऑपरेटिंग सिस्टम, वर्चुअल यंत्र या अन्य निष्पादन वातावरण के लिए लक्षित किया जा सके। | ||
*त्रुटि | *त्रुटि उत्पन्न करने और उसके विस्तार के लिए सुविधाएं प्रदान करें। | ||
* [[सार वाक्य रचना का पेड़]] (एएसटी) में नए प्रकार के नोड्स की अनुमति | * [[सार वाक्य रचना का पेड़|सार वाक्य रचना]] ट्री (एएसटी) में नए प्रकार के नोड्स की अनुमति दें। | ||
* एएसटी के नोड्स में नए | * एएसटी के नोड्स में नए मानों की अनुमति दें। | ||
* नोड्स के बीच नए प्रकार के | * नोड्स के बीच नए प्रकार के शीर्षों की अनुमति दें। | ||
* कुछ बाहरी पास द्वारा | * कुछ बाहरी पास द्वारा निविष्ट एएसटी, या उसके भागों के परिवर्तन का समर्थन करें। | ||
* कुछ बाहरी पास द्वारा | * कुछ बाहरी पास द्वारा निविष्ट एएसटी, या उसके भागों के दूसरे रूप में अनुवाद का समर्थन करें। | ||
* आंतरिक और | * आंतरिक और बाह्य पास के बीच सूचना के प्रवाह में सहायता करें क्योंकि वे एएसटी को नए एएसटी या अन्य अभ्यावेदन में रूपांतरित और अनुवादित करते हैं। | ||
=== | === विस्तारयोग्य रनटाइम === | ||
रनटाइम पर, | रनटाइम पर, विस्तारयोग्य प्रोग्रामिंग सिस्टम को भाषाओं के संचालन समुच्चय को विस्तारित करने की अनुमति देता है। उदाहरण के लिए, यदि सिस्टम एक [[ बाइट कोड |बाइट कोड]] दुभाषिया का उपयोग करता है, तो उसे नए बाइट-कोड मानों को परिभाषित करने की अनुमति प्राप्त करनी पड़ेगी। विस्तारयोग्य वाक्य रचना के साथ, मौलिक या आंतरिक संचालन के कुछ समुच्चयों के लिए यह स्वीकार्य है जो अपरिवर्तनीय हैं। यद्यपि, उन आंतरिक परिचालनों को अधिभारित करना या बढ़ाना संभव होना चाहिए जिससे नए या अतिरिक्त कोड का समर्थन किया जा सके। | ||
=== फ़ॉर्म से अलग की गई सामग्री === | === फ़ॉर्म से अलग की गई सामग्री === | ||
विस्तारयोग्य प्रोग्रामिंग सिस्टम को प्रोग्राम के प्रसंस्कृत किए जाने वाले डेटा के रूप में मान्यता प्रदान करता है। वे कार्यक्रम पूर्णतः किसी भी प्रकार की प्रारूपण सूचना से रहित होते हैं। उपयोगकर्ताओं के लिए प्रोग्राम का दृश्य प्रदर्शन और संपादन एक अनुवाद कार्य होता है, जो विस्तारयोग्य संकलक द्वारा समर्थित है। यह प्रोग्राम डेटा को देखने या संपादित करने के लिए अधिक उपयुक्त रूपों में अनुवादित करता है। स्वाभाविक रूप से, यह दो तरफा अनुवाद होता है। यह महत्वपूर्ण है क्योंकि विभिन्न विधियों से विस्तारयोग्य प्रोग्राम को सरलता से प्रसंस्कृत करना संभव होता है। स्रोत भाषा इनपुट के केवल संपादन, देखने और यंत्र कोड में अनुवाद के लिए यह अस्वीकार्य है। प्रोग्रामों के यादृच्छिक प्रसंस्करण को स्रोत निविष्ट को कैसे प्रसंस्कृत (स्वरूपित, संग्रहीत, प्रदर्शित, संपादित, आदि) किया जाना चाहिए। | |||
=== स्रोत भाषा | === स्रोत भाषा दोषमार्जन समर्थन === | ||
विस्तारयोग्य प्रोग्रामिंग सिस्टम को उन स्थानों पर प्रोग्राम के दोषमार्जन का समर्थन करना चाहिए, जहां प्रोग्राम निष्पादन के लिए उसे विस्तारित या परिवर्तित करने की आवश्यकता होती है। विशेष रूप से, यह नहीं माना जा सकता है कि रनटाइम डेटा प्रदर्शित करने का एकमात्र तरीका संरचनाओं या सरणियों में है। डिबगर, या अधिक सही ढंग से 'प्रोग्राम इंस्पेक्टर' को स्रोत भाषा के लिए उपयुक्त रूपों में रनटाइम डेटा के प्रदर्शन की अनुमति देनी चाहिए। उदाहरण के लिए, यदि भाषा किसी व्यवसाय प्रक्रिया या [[कार्य प्रवाह]] के लिए डेटा संरचना का समर्थन करती है, तो डीबगर के लिए उस डेटा संरचना को [[फिशबोन चार्ट|फिशबोन]] सारणी या प्लगइन द्वारा प्रदान किए गए अन्य रूप में प्रदर्शित करना संभव होना चाहिए। | |||
== उदाहरण == | == उदाहरण == | ||
Line 63: | Line 60: | ||
* फेलिक्स | * फेलिक्स | ||
* [[नेमर्ले]] | * [[नेमर्ले]] | ||
* | * सीड7 | ||
* रिबोल | * रिबोल | ||
** | ** रेड | ||
* [[रूबी (प्रोग्रामिंग भाषा)]] | * [[रूबी (प्रोग्रामिंग भाषा)|रूबी]] | ||
* [[आईएमपी (प्रोग्रामिंग भाषा)]] | * [[आईएमपी (प्रोग्रामिंग भाषा)|आईएमपी]] | ||
* ओपन सी ++ | * ओपन सी ++ | ||
* [[एक्सएल (प्रोग्रामिंग भाषा)]] | * [[एक्सएल (प्रोग्रामिंग भाषा)|एक्सएल]] | ||
* [[एक्सएमएल]] | * [[एक्सएमएल]] | ||
* [[फोर्थ (प्रोग्रामिंग भाषा)]] | * [[फोर्थ (प्रोग्रामिंग भाषा)|फोर्थ]] | ||
* लिस्प | * लिस्प | ||
** रैकेट | ** रैकेट | ||
** [[योजना (प्रोग्रामिंग भाषा)]] | ** [[योजना (प्रोग्रामिंग भाषा)|स्कीम]] | ||
* [[लुआ (प्रोग्रामिंग भाषा)]] | * [[लुआ (प्रोग्रामिंग भाषा)|लुआ]] | ||
* पीएल/आई | * पीएल/आई | ||
* [[गपशप]] | * [[गपशप|स्मॉलटॉक]] | ||
== यह भी देखें == | == यह भी देखें == | ||
* अनुकूली व्याकरण | * अनुकूली व्याकरण | ||
* [[अवधारणा प्रोग्रामिंग]] | * [[अवधारणा प्रोग्रामिंग]] | ||
* [[ बोली लगाना ]] | * [[ बोली लगाना | बोली लगाना]] | ||
* [[व्याकरण उन्मुख प्रोग्रामिंग]] | * [[व्याकरण उन्मुख प्रोग्रामिंग]] | ||
* भाषा उन्मुख प्रोग्रामिंग | * भाषा उन्मुख प्रोग्रामिंग | ||
Line 99: | Line 96: | ||
# [https://web.archive.org/web/20050209071400/http://www.acmqueue.com/modules.php?name=Content&pa=showpage&pid=247&page=1 एसीएम कतार में ग्रेग विल्सन का लेख] | # [https://web.archive.org/web/20050209071400/http://www.acmqueue.com/modules.php?name=Content&pa=showpage&pid=247&page=1 एसीएम कतार में ग्रेग विल्सन का लेख] | ||
# [http://developers.slashdot.org/article.pl?sid=05/01/18/2157249&from=rss Slashdot चर्चा] | # [http://developers.slashdot.org/article.pl?sid=05/01/18/2157249&from=rss Slashdot चर्चा] | ||
# [http://www.cas.mcmaster.ca/sqrl/papers/SQRLreport47.pdf आधुनिक | # [http://www.cas.mcmaster.ca/sqrl/papers/SQRLreport47.pdf आधुनिक विस्तारयोग्य भाषा] - [[डेनियल जिप्सी]] का एक पेपर | ||
=== उपकरण === | === उपकरण === | ||
# [http://www.meta-language.net/ मेटाएल] - [https://web.archive.org/web/20050220100913/http://pyre.third-bit.com/pipermail/extprog/2005- January/000019.html एक | # [http://www.meta-language.net/ मेटाएल] - [https://web.archive.org/web/20050220100913/http://pyre.third-bit.com/pipermail/extprog/2005- January/000019.html एक विस्तारयोग्य प्रोग्रामिंग संकलक इंजन कार्यान्वयन] | ||
# [http://sourceforge.net/projects/extprosys/ XPS] - | # [http://sourceforge.net/projects/extprosys/ XPS] - विस्तारयोग्य प्रोग्रामिंग सिस्टम (विकास में) | ||
# [http://www.jetbrains.com/mps/MPS] — JetBrains मेटाप्रोग्रामिंग सिस्टम | # [http://www.jetbrains.com/mps/MPS] — JetBrains मेटाप्रोग्रामिंग सिस्टम | ||
=== | === विस्तारयोग्य सिंटैक्स === के साथ प्रोग्रामिंग भाषाएं | ||
# [http://openzz.sourceforge.net/ OpenZz] | # [http://openzz.sourceforge.net/ OpenZz] | ||
# [http://cs.nyu.edu/rgrimm/xtc/ xtc — एक्सटेन्सिबल सी] | # [http://cs.nyu.edu/rgrimm/xtc/ xtc — एक्सटेन्सिबल सी] | ||
Line 112: | Line 109: | ||
# [https://web.archive.org/web/20050622032429/http://nemerle.org/Macros Nemerle Macros] | # [https://web.archive.org/web/20050622032429/http://nemerle.org/Macros Nemerle Macros] | ||
# [https://web.archive.org/web/20050817205802/http://boo.codehaus.org/Syntactic+Macros बू सिंटैक्टिक मैक्रोज़] | # [https://web.archive.org/web/20050817205802/http://boo.codehaus.org/Syntactic+Macros बू सिंटैक्टिक मैक्रोज़] | ||
# [https://web.archive.org/web/20061022071450/http://suif.stanford.edu/ स्टैनफोर्ड यूनिवर्सिटी इंटरमीडिएट फॉर्मेट | # [https://web.archive.org/web/20061022071450/http://suif.stanford.edu/ स्टैनफोर्ड यूनिवर्सिटी इंटरमीडिएट फॉर्मेट संकलक] | ||
# [http://seed7.sourceforge.net/ Seed7 - एक्सटेंसिबल प्रोग्रामिंग भाषा] | # [http://seed7.sourceforge.net/ Seed7 - एक्सटेंसिबल प्रोग्रामिंग भाषा] | ||
# [https://github.com/chrisseaton/katahdin Katahdin] - सिंटैक्स और शब्दार्थ के साथ एक प्रोग्रामिंग भाषा जो रनटाइम पर परिवर्तनशील होती है | # [https://github.com/chrisseaton/katahdin Katahdin] - सिंटैक्स और शब्दार्थ के साथ एक प्रोग्रामिंग भाषा जो रनटाइम पर परिवर्तनशील होती है | ||
Line 121: | Line 118: | ||
{{DEFAULTSORT:Extensible Programming}} | {{DEFAULTSORT:Extensible Programming}} | ||
श्रेणी: | श्रेणी:विस्तारयोग्य सिंटैक्स प्रोग्रामिंग भाषा | ||
श्रेणी:प्रोग्रामिंग प्रतिमान | श्रेणी:प्रोग्रामिंग प्रतिमान | ||
[[Category:All articles with dead external links]] | |||
[[Category: | [[Category:Articles with dead external links from June 2022]] | ||
[[Category:Created On 14/06/2023]] | [[Category:Collapse templates|Extensible Programming]] | ||
[[Category:Created On 14/06/2023|Extensible Programming]] | |||
[[Category:Machine Translated Page|Extensible Programming]] | |||
[[Category:Navigational boxes| ]] | |||
[[Category:Navigational boxes without horizontal lists|Extensible Programming]] | |||
[[Category:Pages with script errors|Extensible Programming]] | |||
[[Category:Sidebars with styles needing conversion|Extensible Programming]] | |||
[[Category:Template documentation pages|Documentation/doc]] | |||
[[Category:Templates Vigyan Ready]] | |||
[[Category:Templates generating microformats|Extensible Programming]] | |||
[[Category:Templates that are not mobile friendly|Extensible Programming]] | |||
[[Category:Templates using TemplateData|Extensible Programming]] | |||
[[Category:Wikipedia metatemplates|Extensible Programming]] |
Latest revision as of 11:58, 31 October 2023
विस्तारयोग्य प्रोग्रामिंग कंप्यूटर विज्ञान, में कंप्यूटर प्रोग्रामिंग की एक शैली का वर्णन करने के लिए प्रयोग किया जाने वाला एक शब्द है जो प्रोग्रामिंग भाषा, संकलक तथा रन-टाइम सिस्टम को विस्तारित करने वाले तंत्रों पर केंद्रित है। प्रोग्रामिंग की इस कवची का समर्थन करने वाली विस्तारयोग्य प्रोग्रामिंग भाषा, 1960 के दशक में कार्य का एक सक्रिय क्षेत्र थी, परंतु 1970 के दशक में यह आंदोलन उपेक्षित हो गया।[1] विस्तारयोग्य प्रोग्रामिंग 21वीं शताब्दी में नए सिरे से रुचि का विषय बन गया है। [2]
ऐतिहासिक आंदोलन
विस्तारयोग्य प्रोग्रामिंग भाषा आंदोलन से संबंधित पहला लेख सामान्यतः[1][3] डगलस मैक्लरॉय से जुड़ा है जिसमें उच्च-स्तरीय प्रोग्रामिंग भाषाओं के लिए मैक्रोस पर चर्चा की गई है।[4] विस्तारयोग्यता के सिद्धांत का एक और प्रारंभिक वर्णन "संकलक-संकलक" पर ब्रुकर और मोरिस के 1960 के लेख में मिलता है।[5] 1969 और 1971 में आंदोलन के शिखर को दो अकादमिक संगोष्ठियों द्वारा चिह्नित किया गया था।[6][7] 1975 तक, थॉमस ए. स्टैंडिश द्वारा आंदोलन पर उनका लिखा सर्वेक्षण लेख[1]अनिवार्य रूप से एक पोस्टमार्टम था। फॉर्थ प्रोग्रामिंग भाषा इस अपेक्षा में एक अपवाद थी, परंतु यह मुख्य रूप से अनदेखी रह गई।
ऐतिहासिक आंदोलन का चरित्र
सामान्यतः योजित, एक विस्तारयोग्य प्रोग्रामिंग भाषा में एक मूल भाषा होती थी जो प्राथमिक कम्प्यूटिंग सुविधाएँ प्रदान करती थी, और एक मेटा-भाषा होती थी जो मूल भाषा को संशोधित करने की क्षमता रखती थी। उस समय किसी प्रोग्राम में मेटा-भाषा की संशोधन और संशोधित मूल भाषा में कोड सम्मिलित होता था।
आंदोलन में उपयोग की जाने वाली सबसे प्रमुख भाषा-विस्तार तकनीक स्थूल परिभाषा थी। व्याकरण संशोधन भी आंदोलन के साथ निकटता से जुड़ा हुआ था, जिसके परिणामस्वरूप अनुकूली व्याकरण का विकास हुआ। लिस्प प्रोग्रामिंग मेटा भाषा समुदाय, विस्तारयोग्य भाषा समुदाय से अलग रही, जिसके कारण को किसी प्रोग्राम द्वारा निम्नलिखित रूप में संदर्भित किया है।
किसी भी प्रोग्रामिंग भाषा में, जिसमें प्रोग्राम और डेटा मूल रूप से एक-दूसरे के समान होते हैं, को विस्तारयोग्य भाषा के रूप में माना जा सकता है। यह बहुत सरलता से देखा जा सकता है कि लिस्प वर्षों से विस्तारयोग्य भाषा के रूप में उपयोग की गई है।[8]
1969 के सम्मेलन में, सिमुला को एक विस्तारयोग्य प्रोग्रामिंग भाषा के रूप में प्रस्तुत किया गया था।
स्टैंडिश ने भाषा विस्तार के तीन वर्गों का वर्णन किया है, जिसे उन्होंने पैराफ्रेज़, ऑर्थोफ्रेज और मेटाफ्रेज कहा है।
- पैराफ्रेज़ एक सुविधा की परिभाषा करता है जिसमें दिखाया जाता है कि इसे पहले परिभाषित (या परिभाषित होने वाले) कुछ के साथ आदान-प्रदान किया जा सकता है। उन्होंने मैक्रो परिभाषाएँ, साधारण प्रक्रिया परिभाषा, व्याकरणिक विस्तार, डेटा परिभाषा, ऑपरेटर परिभाषा और नियंत्रण संरचना के विस्तार को उदाहरण के रूप में दिया है।
- ऑर्थोफ्रेज़ भाषा में कई ऐसी विशेषताएँ जो मूल भाषा का उपयोग करके प्राप्त नहीं की जा सकती थीं, उन्हें जोड़ती है, जैसे कि किसी मूल भाषा में पहले से कोई आई/ओ उपकरण नहीं है, इसे जोड़कर आई/ओ उपकरण को जोड़ा जा सकता है। विस्तारों को किसी निर्दिष्ट मूल भाषा के संदर्भ में ऑर्थोफ्रेज़ के रूप में समझा जाना चाहिए, क्योंकि मूल भाषा के आधार पर परिभाषित नहीं होने वाली विशेषता को किसी अन्य भाषा के आधार पर परिभाषित किया जा सकता है। ऑर्थोफ्रेज़ आधुनिक प्लग-इन्स की आधुनिक धारणा के समान है।
- मेटाफ्रेज़ मूल अभिव्याक्ति के लिए उपयोग की जाने वाली व्याख्या नियमों को संशोधित करती है। यह आधुनिक प्रतिबिंबन की आधुनिक धारणा के समान होती है।
ऐतिहासिक आंदोलन का अंत
स्टैंडिश ने एक्स्टेंसिबिलिटी आंदोलन की विफलता को लगातार एक्सटेंशन प्रोग्रामिंग की कठिनाई के लिए उत्तरदायी ठहराया। एक साधारित प्रोग्रामर एक मूल भाषा के आसपास मैक्रोस की एकल कवच बना सकता है, लेकिन यदि इसके चारों ओर एक दूसरी मैक्रोस कवच बनानी होती है, तो प्रोग्रामर को मूल भाषा और पहली कवच दोनों के अत्यंत परिचित होना चाहिए; तीसरी कवच को मूल भाषा, पहली और दूसरी कवच दोनों की परिचय की आवश्यकता होगी; और इसी तरह आगे जाते हुए हर एक नई कवच के लिए प्रोग्रामर को मूल भाषा और सभी पहले तक की कवचों की अवगतता होनी चाहिए। ध्यान दें कि निम्न स्तरीय विवरणों से प्रोग्रामर को छिपाना एक अवधारणा आंदोलन का उद्देश्य है जो विस्तारयोग्यता आंदोलन का स्थान लेता है।
यद्यपि 1975 तक, जबकि सिमुला को पहले ही विस्तारयोग्य रूप में प्रस्तुत किया गया था, स्टैंडिश का सर्वेक्षण अभ्यास वास्तविक रूप में नवीनतम अभिकल्प-आधारित प्रौद्योगिकियों को शामिल नहीं करता प्रतीत होता है। यद्यपि तकनीकी रूप से उन्होंने विस्तारयोग्यता की अत्यधिक सामान्य परिभाषा का उपयोग किया था जिसमें तकनीकी रूप से उन्हें शामिल किया जा सकता था। एक 1978 की प्रोग्रामिंग अभिसरण का इतिहास, कंप्यूटर के आविष्कार से (तब) वर्तमान दिन तक, मैक्रोस का कोई उल्लेख नहीं किया गया था, और इसमें कभी भी विस्तारयोग्यता आंदोलन के बारे में कोई संकेत नहीं दिया गया था।[9] 1980 के दशक के अंत तक, छद्म नाम सिंटैक्टिक एब्स्ट्रक्शन द्वारा मैक्रोज़ को अस्थायी रूप से अमूर्त आंदोलन से अवगत कराया गया था।[10]
आधुनिक आंदोलन
आधुनिक संदर्भ में, विस्तारयोग्य प्रोग्रामिंग का समर्थन करने वाली एक सिस्टम निम्नलिखित विशेषताओं का समर्थन प्रदान करेगी:
विस्तारयोग्य वाक्य रचना
इसका सीधा तात्पर्य यह है कि संकलित की जाने वाली स्रोत भाषा विवृत्त, निश्चित या स्थिर नहीं होनी चाहिए। स्रोत भाषा(ओं) में नए कीवर्ड्स, अवधारणाओं और संरचनाओं को जोड़ना संभव होना चाहिए। उपयोगकर्ता परिभाषित सिंटैक्स के साथ सरचनाओ को जोड़ने की अनुमति देने वाली भाषाओं में Coq[11] रैकेट , Camlp4, OpenC++ , Seed7,[12] रेड, रिबोल और फेलिक्स आदि भाषा सम्मिलित है । कुछ मौलिक और स्वाभाविक भाषा सुविधाओं को अपरिवर्तनीय होने की मान्यता है, परंतु सिस्टम को केवल उन भाषा सुविधाओं पर निर्भर नहीं होना चाहिए। नई सुविधाओं को जोड़ना संभव होना चाहिए।
विस्तारयोग्य संकलक
विस्तारयोग्य प्रोग्रामिंग में, संकलक एक एककट्ठ निर्माणकारी प्रोग्राम नहीं होता है जो स्रोत कोड इनपुट को बाइनरी कार्यात्मक आउटपुट में परिवर्तित करता है। संकलक स्वयं इस बिंदु तक विस्तारयोग्य होना चाहिए कि यह वास्तव में प्लगइन्स का एक संग्रह है जो किसी भी वस्तु में स्रोत भाषा इनपुट के अनुवाद में सहायता करता है। उदाहरण के लिए, एक विस्तारयोग्य संकलक ऑब्जेक्ट कोड, कोड प्रलेखन, पुनः स्वरूपित स्रोत कोड, या किसी अन्य वांछित आउटपुट की पीढ़ी का समर्थन करता है। संकलक के संरचना को अपने उपयोगकर्ताओं को संकलन प्रक्रिया के अंदर आने और संकलन प्रक्रिया में प्रत्येक उचित चरण पर वैकल्पिक प्रसंस्करण कार्य प्रदान करने की अनुमति देता है।
स्रोत कोड को किसी ऐसी वस्तु में अनुवाद करने के कार्य के लिए जिसे कंप्यूटर पर निष्पादित किया जा सकता है, एक विस्तारयोग्य संकलक को निम्नलिखित बाते समर्थित करनी चाहिए:
- यह समर्थन करना चाहिए कि कंपाइलर को अपने सभी कार्यों के लिए प्लग-इन या घटक संरचना का उपयोग करना चाहिए।
- यह निर्धारित करना चाहिए कि कंपाइल किया जा रहा भाषा या भाषा विविधता कौन सी है और संबंधित प्लग-इन का पता लगाना चाहिए जो उस भाषा को पहचानने और मान्यता प्रदान करने के लिए उपयुक्त है।
- यादृच्छिक स्रोत भाषाओं को वाक्यात्मक और संरचनात्मक रूप से मान्य करने के लिए औपचारिक भाषा विनिर्देशों का उपयोग करना चाहिए।
- यह सुनिश्चित करना चाहिए कि कंपाइलर संबंधित मान्यता प्रदान करने वाले प्लग-इन को आह्वान करके किसी भी स्रोत भाषा की सांदर्भिक मान्यता की पुष्टि में सहायता करे।
- उपयोगकर्ताओं को विभिन्न प्रकार के कोड जनरेटर से चयन करने की अनुमति दें जिससे परिणामी निष्पादन योग्य कूट को विभिन्न प्रोसेसर, ऑपरेटिंग सिस्टम, वर्चुअल यंत्र या अन्य निष्पादन वातावरण के लिए लक्षित किया जा सके।
- त्रुटि उत्पन्न करने और उसके विस्तार के लिए सुविधाएं प्रदान करें।
- सार वाक्य रचना ट्री (एएसटी) में नए प्रकार के नोड्स की अनुमति दें।
- एएसटी के नोड्स में नए मानों की अनुमति दें।
- नोड्स के बीच नए प्रकार के शीर्षों की अनुमति दें।
- कुछ बाहरी पास द्वारा निविष्ट एएसटी, या उसके भागों के परिवर्तन का समर्थन करें।
- कुछ बाहरी पास द्वारा निविष्ट एएसटी, या उसके भागों के दूसरे रूप में अनुवाद का समर्थन करें।
- आंतरिक और बाह्य पास के बीच सूचना के प्रवाह में सहायता करें क्योंकि वे एएसटी को नए एएसटी या अन्य अभ्यावेदन में रूपांतरित और अनुवादित करते हैं।
विस्तारयोग्य रनटाइम
रनटाइम पर, विस्तारयोग्य प्रोग्रामिंग सिस्टम को भाषाओं के संचालन समुच्चय को विस्तारित करने की अनुमति देता है। उदाहरण के लिए, यदि सिस्टम एक बाइट कोड दुभाषिया का उपयोग करता है, तो उसे नए बाइट-कोड मानों को परिभाषित करने की अनुमति प्राप्त करनी पड़ेगी। विस्तारयोग्य वाक्य रचना के साथ, मौलिक या आंतरिक संचालन के कुछ समुच्चयों के लिए यह स्वीकार्य है जो अपरिवर्तनीय हैं। यद्यपि, उन आंतरिक परिचालनों को अधिभारित करना या बढ़ाना संभव होना चाहिए जिससे नए या अतिरिक्त कोड का समर्थन किया जा सके।
फ़ॉर्म से अलग की गई सामग्री
विस्तारयोग्य प्रोग्रामिंग सिस्टम को प्रोग्राम के प्रसंस्कृत किए जाने वाले डेटा के रूप में मान्यता प्रदान करता है। वे कार्यक्रम पूर्णतः किसी भी प्रकार की प्रारूपण सूचना से रहित होते हैं। उपयोगकर्ताओं के लिए प्रोग्राम का दृश्य प्रदर्शन और संपादन एक अनुवाद कार्य होता है, जो विस्तारयोग्य संकलक द्वारा समर्थित है। यह प्रोग्राम डेटा को देखने या संपादित करने के लिए अधिक उपयुक्त रूपों में अनुवादित करता है। स्वाभाविक रूप से, यह दो तरफा अनुवाद होता है। यह महत्वपूर्ण है क्योंकि विभिन्न विधियों से विस्तारयोग्य प्रोग्राम को सरलता से प्रसंस्कृत करना संभव होता है। स्रोत भाषा इनपुट के केवल संपादन, देखने और यंत्र कोड में अनुवाद के लिए यह अस्वीकार्य है। प्रोग्रामों के यादृच्छिक प्रसंस्करण को स्रोत निविष्ट को कैसे प्रसंस्कृत (स्वरूपित, संग्रहीत, प्रदर्शित, संपादित, आदि) किया जाना चाहिए।
स्रोत भाषा दोषमार्जन समर्थन
विस्तारयोग्य प्रोग्रामिंग सिस्टम को उन स्थानों पर प्रोग्राम के दोषमार्जन का समर्थन करना चाहिए, जहां प्रोग्राम निष्पादन के लिए उसे विस्तारित या परिवर्तित करने की आवश्यकता होती है। विशेष रूप से, यह नहीं माना जा सकता है कि रनटाइम डेटा प्रदर्शित करने का एकमात्र तरीका संरचनाओं या सरणियों में है। डिबगर, या अधिक सही ढंग से 'प्रोग्राम इंस्पेक्टर' को स्रोत भाषा के लिए उपयुक्त रूपों में रनटाइम डेटा के प्रदर्शन की अनुमति देनी चाहिए। उदाहरण के लिए, यदि भाषा किसी व्यवसाय प्रक्रिया या कार्य प्रवाह के लिए डेटा संरचना का समर्थन करती है, तो डीबगर के लिए उस डेटा संरचना को फिशबोन सारणी या प्लगइन द्वारा प्रदान किए गए अन्य रूप में प्रदर्शित करना संभव होना चाहिए।
उदाहरण
- कैमलप4
- फेलिक्स
- नेमर्ले
- सीड7
- रिबोल
- रेड
- रूबी
- आईएमपी
- ओपन सी ++
- एक्सएल
- एक्सएमएल
- फोर्थ
- लिस्प
- रैकेट
- स्कीम
- लुआ
- पीएल/आई
- स्मॉलटॉक
यह भी देखें
- अनुकूली व्याकरण
- अवधारणा प्रोग्रामिंग
- बोली लगाना
- व्याकरण उन्मुख प्रोग्रामिंग
- भाषा उन्मुख प्रोग्रामिंग
- समजातीयता
संदर्भ
- ↑ 1.0 1.1 1.2 Standish, Thomas A., "Extensibility in Programming Language Design", SIGPLAN Notices 10 no. 7 (July 1975), pp. 18–21.
- ↑ Gregory V. Wilson, "Extensible Programming for the 21st Century", ACM Queue 2 no. 9 (Dec/Jan 2004–2005).
- ↑ Sammet, Jean E., Programming Languages: History and Fundamentals, Prentice-Hall, 1969, section III.7.2
- ↑ McIlroy, M.D., "Macro Instruction Extensions of Compiler Languages", Communications of the ACM 3 no. 4 (April 1960), pp. 214–220.
- ↑ Brooker, R.A. and Morris, D., "A General Translation Program for Phrase Structure Languages", Journal of the ACM 9 no. 1 (January 1962), pp. 1–10. The paper was received in 1960.
- ↑ Christensen, C. and Shaw, C.J., eds., Proceedings of the Extensible Languages Symposium, SIGPLAN Notices 4 no. 8 (August 1969).
- ↑ Schuman, S.A., ed., Proceedings of the International Symposium on Extensible Languages, SIGPLAN Notices 6 no. 12 (December 1971).
- ↑ Harrison, M.C., in "Panel on the Concept of Extensibility", pp. 53–54 of the 1969 symposium.
- ↑ Guarino, L.R., "The Evolution of Abstraction in Programming Languages[dead link]", CMU-CS-78-120, Department of Computer Science, Carnegie-Mellon University, Pennsylvania, 22 May 1978.
- ↑ Gabriel, Richard P., ed., "Draft Report on Requirements for a Common Prototyping System", SIGPLAN Notices 24 no. 3 (March 1989), pp. 93ff.
- ↑ "Syntax extensions and notation scopes — Coq 8.17.0 documentation". coq.inria.fr. Retrieved 2023-05-25.
- ↑ Zingaro, Daniel, "Modern Extensible Languages", SQRL Report 47 McMaster University (October 2007), page 16.
बाहरी संबंध
सामान्य
- एसीएम कतार में ग्रेग विल्सन का लेख
- Slashdot चर्चा
- आधुनिक विस्तारयोग्य भाषा - डेनियल जिप्सी का एक पेपर
उपकरण
- मेटाएल - January/000019.html एक विस्तारयोग्य प्रोग्रामिंग संकलक इंजन कार्यान्वयन
- XPS - विस्तारयोग्य प्रोग्रामिंग सिस्टम (विकास में)
- [1] — JetBrains मेटाप्रोग्रामिंग सिस्टम
=== विस्तारयोग्य सिंटैक्स === के साथ प्रोग्रामिंग भाषाएं
- OpenZz
- xtc — एक्सटेन्सिबल सी
- English-script
- Nemerle Macros
- बू सिंटैक्टिक मैक्रोज़
- स्टैनफोर्ड यूनिवर्सिटी इंटरमीडिएट फॉर्मेट संकलक
- Seed7 - एक्सटेंसिबल प्रोग्रामिंग भाषा
- Katahdin - सिंटैक्स और शब्दार्थ के साथ एक प्रोग्रामिंग भाषा जो रनटाइम पर परिवर्तनशील होती है
- π - एक्सटेंसिबल सिंटैक्स के साथ एक अन्य प्रोग्रामिंग भाषा, जिसे अर्ली पार्सर का उपयोग करके लागू किया गया है
श्रेणी:विस्तारयोग्य सिंटैक्स प्रोग्रामिंग भाषा श्रेणी:प्रोग्रामिंग प्रतिमान