विस्तारयोग्य प्रोग्रामिंग: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
 
(15 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>
'''विस्तारयोग्य प्रोग्रामिंग''' [[कंप्यूटर विज्ञान]], में कंप्यूटर प्रोग्रामिंग की एक शैली का वर्णन करने के लिए प्रयोग किया जाने वाला एक शब्द है जो [[प्रोग्रामिंग भाषा]], [[ संकलक |संकलक]] तथा [[रन-टाइम सिस्टम]] को विस्तारित करने वाले तंत्रों पर केंद्रित है। प्रोग्रामिंग की इस कवची का समर्थन करने वाली विस्तारयोग्य प्रोग्रामिंग भाषा, 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"/>अनिवार्य रूप से एक पोस्टमार्टम था।[[ चौथी प्रोग्रामिंग भाषा | फॉर्थ प्रोग्रामिंग भाषा]] इस अपेक्षा में एक अपवाद थी, लेकिन यह मुख्य रूप से अनदेखी रह गई।
विस्तारयोग्य प्रोग्रामिंग भाषा आंदोलन से संबंधित पहला लेख सामान्यतः<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 के सम्मेलन में, [[ शुरुआत |सिमुला]] को एक विस्तारयोग्य प्रोग्रामिंग भाषा के रूप में प्रस्तुत किया गया था।


<blockquote>कोई भी प्रोग्रामिंग भाषा जिसमें प्रोग्राम और डेटा अनिवार्य रूप से विनिमेय हैं, को एक विस्तारणीय [sic] भाषा के रूप में माना जा सकता है। ... इसे इस तथ्य से बहुत आसानी से देखा जा सकता है कि लिस्प का उपयोग वर्षों से विस्तारणीय भाषा के रूप में किया जाता रहा है।<ref name="Harrison1969">Harrison, M.C., in "Panel on the Concept of Extensibility", pp. 53–54 of the 1969 symposium.</ref></ब्लॉककोट>
स्टैंडिश ने भाषा विस्तार के तीन वर्गों का वर्णन किया है, जिसे उन्होंने [[ संक्षिप्त व्याख्या |पैराफ्रेज़]], ऑर्थोफ्रेज और मेटाफ्रेज कहा है।


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>
* ऑर्थोफ्रेज एक ऐसी भाषा में सुविधाएँ जोड़ता है जिसे आधार भाषा का उपयोग करके प्राप्त नहीं किया जा सकता है, जैसे कि आधार भाषा में i/o सिस्टम को जोड़ना, जिसमें पहले कोई i/o आदिम नहीं था। एक्सटेंशन को कुछ दी गई आधार भाषा के सापेक्ष ऑर्थोफ्रेज के रूप में समझा जाना चाहिए, क्योंकि आधार भाषा के संदर्भ में परिभाषित नहीं की गई विशेषता को किसी अन्य भाषा के संदर्भ में परिभाषित किया जाना चाहिए। ऑर्थोफ्रेज [[प्लग-इन (कंप्यूटिंग)]] | प्लग-इन की आधुनिक धारणा से मेल खाता है।
* रूपक पूर्व-मौजूदा अभिव्यक्तियों के लिए प्रयुक्त व्याख्या नियमों को संशोधित करता है। यह [[प्रतिबिंब (कंप्यूटर विज्ञान)]] की आधुनिक धारणा के अनुरूप है।


=== ऐतिहासिक आंदोलन की मृत्यु ===
स्टैंडिश ने एक्स्टेंसिबिलिटी आंदोलन की विफलता को लगातार एक्सटेंशन प्रोग्रामिंग की कठिनाई के लिए जिम्मेदार ठहराया। एक साधारण प्रोग्रामर एक आधार भाषा के चारों ओर मैक्रोज़ का एक खोल बना सकता है, लेकिन अगर मैक्रोज़ का दूसरा खोल उसके चारों ओर बनाया जाना था, तो प्रोग्रामर को आधार भाषा और पहले खोल दोनों से परिचित होना होगा; एक तीसरे खोल को आधार और पहले और दूसरे दोनों गोले के साथ परिचित होने की आवश्यकता होगी; और इसी तरह। (ध्यान दें कि प्रोग्रामर को निचले स्तर के विवरण से बचाना एब्स्ट्रैक्शन (कंप्यूटर विज्ञान) आंदोलन का इरादा है जो एक्स्टेंसिबिलिटी आंदोलन को दबा देता है।)
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>


== आधुनिक आंदोलन ==
आधुनिक संदर्भ में, विस्तारयोग्य प्रोग्रामिंग का समर्थन करने वाली एक सिस्टम निम्नलिखित विशेषताओं का समर्थन प्रदान करेगी:


== आधुनिक आंदोलन ==
=== विस्तारयोग्य वाक्य रचना ===
आधुनिक अर्थ में, एक सिस्टम जो एक्स्टेंसिबल प्रोग्रामिंग का समर्थन करता है, नीचे वर्णित सभी सुविधाएँ प्रदान करेगा{{Citation needed|reason=Reliable source needed for this definition|date=October 2017}}.
{{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> [[ लाल (प्रोग्रामिंग भाषा) | रेड]], [[ रिबोल | रिबोल]] और [[ फेलिक्स (प्रोग्रामिंग भाषा) | फेलिक्स]] आदि भाषा सम्मिलित है । कुछ मौलिक और स्वाभाविक भाषा सुविधाओं को अपरिवर्तनीय होने की मान्यता है, परंतु सिस्टम को केवल उन भाषा सुविधाओं पर निर्भर नहीं होना चाहिए। नई सुविधाओं को जोड़ना संभव होना चाहिए।
{{category see also|Extensible syntax programming languages}}
इसका सीधा सा मतलब है कि संकलित की जाने वाली स्रोत भाषा बंद, निश्चित या स्थिर नहीं होनी चाहिए। स्रोत भाषा(ओं) में नए कीवर्ड्स, अवधारणाओं और संरचनाओं को जोड़ना संभव होना चाहिए। उपयोगकर्ता परिभाषित सिंटैक्स के साथ निर्माण को जोड़ने की अनुमति देने वाली भाषाओं में [[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++ (सॉफ़्टवेयर टूल)|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
* सीड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: Machine Translated Page]]
[[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] रेड, रिबोल और फेलिक्स आदि भाषा सम्मिलित है । कुछ मौलिक और स्वाभाविक भाषा सुविधाओं को अपरिवर्तनीय होने की मान्यता है, परंतु सिस्टम को केवल उन भाषा सुविधाओं पर निर्भर नहीं होना चाहिए। नई सुविधाओं को जोड़ना संभव होना चाहिए।

विस्तारयोग्य संकलक

विस्तारयोग्य प्रोग्रामिंग में, संकलक एक एककट्ठ निर्माणकारी प्रोग्राम नहीं होता है जो स्रोत कोड इनपुट को बाइनरी कार्यात्मक आउटपुट में परिवर्तित करता है। संकलक स्वयं इस बिंदु तक विस्तारयोग्य होना चाहिए कि यह वास्तव में प्लगइन्स का एक संग्रह है जो किसी भी वस्तु में स्रोत भाषा इनपुट के अनुवाद में सहायता करता है। उदाहरण के लिए, एक विस्तारयोग्य संकलक ऑब्जेक्ट कोड, कोड प्रलेखन, पुनः स्वरूपित स्रोत कोड, या किसी अन्य वांछित आउटपुट की पीढ़ी का समर्थन करता है। संकलक के संरचना को अपने उपयोगकर्ताओं को संकलन प्रक्रिया के अंदर आने और संकलन प्रक्रिया में प्रत्येक उचित चरण पर वैकल्पिक प्रसंस्करण कार्य प्रदान करने की अनुमति देता है।

स्रोत कोड को किसी ऐसी वस्तु में अनुवाद करने के कार्य के लिए जिसे कंप्यूटर पर निष्पादित किया जा सकता है, एक विस्तारयोग्य संकलक को निम्नलिखित बाते समर्थित करनी चाहिए:

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

विस्तारयोग्य रनटाइम

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

फ़ॉर्म से अलग की गई सामग्री

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

स्रोत भाषा दोषमार्जन समर्थन

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

उदाहरण

यह भी देखें

संदर्भ

  1. 1.0 1.1 1.2 Standish, Thomas A., "Extensibility in Programming Language Design", SIGPLAN Notices 10 no. 7 (July 1975), pp. 18–21.
  2. Gregory V. Wilson, "Extensible Programming for the 21st Century", ACM Queue 2 no. 9 (Dec/Jan 2004–2005).
  3. Sammet, Jean E., Programming Languages: History and Fundamentals, Prentice-Hall, 1969, section III.7.2
  4. McIlroy, M.D., "Macro Instruction Extensions of Compiler Languages", Communications of the ACM 3 no. 4 (April 1960), pp. 214–220.
  5. 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.
  6. Christensen, C. and Shaw, C.J., eds., Proceedings of the Extensible Languages Symposium, SIGPLAN Notices 4 no. 8 (August 1969).
  7. Schuman, S.A., ed., Proceedings of the International Symposium on Extensible Languages, SIGPLAN Notices 6 no. 12 (December 1971).
  8. Harrison, M.C., in "Panel on the Concept of Extensibility", pp. 53–54 of the 1969 symposium.
  9. 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.
  10. Gabriel, Richard P., ed., "Draft Report on Requirements for a Common Prototyping System", SIGPLAN Notices 24 no. 3 (March 1989), pp. 93ff.
  11. "Syntax extensions and notation scopes — Coq 8.17.0 documentation". coq.inria.fr. Retrieved 2023-05-25.
  12. Zingaro, Daniel, "Modern Extensible Languages", SQRL Report 47 McMaster University (October 2007), page 16.


बाहरी संबंध

सामान्य

  1. एसीएम कतार में ग्रेग विल्सन का लेख
  2. Slashdot चर्चा
  3. आधुनिक विस्तारयोग्य भाषा - डेनियल जिप्सी का एक पेपर

उपकरण

  1. मेटाएल - January/000019.html एक विस्तारयोग्य प्रोग्रामिंग संकलक इंजन कार्यान्वयन
  2. XPS - विस्तारयोग्य प्रोग्रामिंग सिस्टम (विकास में)
  3. [1] — JetBrains मेटाप्रोग्रामिंग सिस्टम

=== विस्तारयोग्य सिंटैक्स === के साथ प्रोग्रामिंग भाषाएं

  1. OpenZz
  2. xtc — एक्सटेन्सिबल सी
  3. English-script
  4. Nemerle Macros
  5. बू सिंटैक्टिक मैक्रोज़
  6. स्टैनफोर्ड यूनिवर्सिटी इंटरमीडिएट फॉर्मेट संकलक
  7. Seed7 - एक्सटेंसिबल प्रोग्रामिंग भाषा
  8. Katahdin - सिंटैक्स और शब्दार्थ के साथ एक प्रोग्रामिंग भाषा जो रनटाइम पर परिवर्तनशील होती है
  9. π - एक्सटेंसिबल सिंटैक्स के साथ एक अन्य प्रोग्रामिंग भाषा, जिसे अर्ली पार्सर का उपयोग करके लागू किया गया है


श्रेणी:विस्तारयोग्य सिंटैक्स प्रोग्रामिंग भाषा श्रेणी:प्रोग्रामिंग प्रतिमान