गतिशील प्रोग्रामिंग भाषा
This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these template messages)
(Learn how and when to remove this template message)
|
कंप्यूटर विज्ञान में, एक गतिशील प्रोग्रामिंग भाषा उच्च-स्तरीय प्रोग्रामिंग भाषाओं का एक वर्ग है, जो रनटाइम (प्रोग्राम जीवनचक्र चरण) में कई सामान्य प्रोग्रामिंग व्यवहारों को निष्पादित करती है, जो स्टेटिक प्रोग्राम विश्लेषण संकलक के दौरान करते हैं। इन व्यवहारों में नए स्रोत कोड को जोड़कर, वस्तु (कंप्यूटर विज्ञान) और परिभाषाओं का विस्तार करके, या प्रकार प्रणाली को संशोधित करके कार्यक्रम का विस्तार शामिल हो सकता है। यद्यपि समान व्यवहार लगभग किसी भी भाषा में अनुकरण किया जा सकता है, कठिनाई, जटिलता और प्रदर्शन लागत की अलग-अलग डिग्री के साथ, गतिशील भाषाएं उनका उपयोग करने के लिए प्रत्यक्ष उपकरण प्रदान करती हैं। इनमें से कई विशेषताओं को पहले लिस्प (प्रोग्रामिंग भाषा) प्रोग्रामिंग भाषा में मूल सुविधाओं के रूप में लागू किया गया था।
अधिकांश गतिशील भाषाएँ भी गतिशील टाइपिंग हैं, लेकिन सभी नहीं हैं। गतिशील भाषाओं को अक्सर (लेकिन हमेशा नहीं) स्क्रिप्टिंग भाषाओं के रूप में संदर्भित किया जाता है, हालांकि यह शब्द अपने सबसे छोटे अर्थों में किसी दिए गए रन-टाइम वातावरण के लिए विशिष्ट भाषाओं को संदर्भित करता है।
कार्यान्वयन
This section needs expansion. You can help by adding to it. (October 2009) |
इवल
कुछ गतिशील भाषाएँ एक स्पष्ट कार्य प्रदान करती हैं। यह फ़ंक्शन भाषा में कोड युक्त एक स्ट्रिंग या सार वाक्य रचना का पेड़ लेता है और इसे निष्पादित करता है। यदि यह कोड किसी व्यंजक का प्रतिनिधित्व करता है, तो परिणामी मान दिया जाता है। एरिक मीजेर (कंप्यूटर वैज्ञानिक) और पीटर ड्रैटन साझा पुस्तकालयों द्वारा प्रस्तावित गतिशील लोडिंग से eval द्वारा प्रस्तावित रनटाइम कोड पीढ़ी को अलग करते हैं, और चेतावनी देते हैं कि कई मामलों में eval का उपयोग केवल उच्च-क्रम के कार्यों को लागू करने के लिए किया जाता है (कार्यों को तार के रूप में पारित करके) या अक्रमांकन।[1]
ऑब्जेक्ट रनटाइम परिवर्तन
एक प्रकार या वस्तु प्रणाली को आमतौर पर गतिशील भाषा में रनटाइम के दौरान संशोधित किया जा सकता है। इसका अर्थ रनटाइम परिभाषा से या मौजूदा प्रकार या वस्तुओं के मिश्रण के आधार पर नई वस्तुओं को उत्पन्न करना हो सकता है। यह इनहेरिटेंस (कंप्यूटर साइंस) या टाइप ट्री को बदलने का भी उल्लेख कर सकता है, और इस तरह मौजूदा प्रकारों के व्यवहार को बदल सकता है (विशेषकर मेथड (कंप्यूटर साइंस) के आह्वान के संबंध में)।
अनुमान टाइप करें
चूंकि कई गतिशील भाषाएं गतिशील प्रकार की प्रणाली के साथ आती हैं, आंतरिक व्याख्या के मूल्यों के आधार पर रनटाइम अनुमान एक सामान्य कार्य को चिह्नित करता है। जैसा कि व्याख्या के दौरान मूल्य प्रकार बदल सकते हैं, यह परमाणु संचालन करने पर नियमित रूप से उपयोग किया जाता है।
परिवर्तनीय स्मृति आवंटन
स्टेटिक प्रोग्रामिंग लैंग्वेज (संभवतः अप्रत्यक्ष रूप से) के लिए डेवलपर्स को संकलन से पहले उपयोग की गई मेमोरी के आकार को परिभाषित करने की आवश्यकता होती है (जब तक कि पॉइंटर लॉजिक के साथ काम नहीं किया जाता)। ऑब्जेक्ट रनटाइम परिवर्तन के अनुरूप, गतिशील भाषाओं को कार्यक्रम के व्यक्तिगत संचालन के आधार पर स्मृति को (पुनः) आवंटित करने की आवश्यकता होती है।
प्रतिबिंब
परावर्तन (कंप्यूटर विज्ञान) कई गतिशील भाषाओं में आम है, और आम तौर पर जेनेरिक या टाइप बहुरूपता डेटा के प्रकार और मेटाडेटा का आत्मनिरीक्षण (कंप्यूटर विज्ञान) शामिल होता है। हालाँकि, इसमें डेटा के रूप में प्रोग्राम के कोड का पूर्ण मूल्यांकन और संशोधन भी शामिल हो सकता है, जैसे कि लिस्प s-भाव का विश्लेषण करने में प्रदान करता है।
मैक्रोज़
सीमित संख्या में गतिशील प्रोग्रामिंग भाषाएं ऐसी विशेषताएं प्रदान करती हैं जो कोड आत्मनिरीक्षण (वर्गों, कार्यों और कीवर्ड की जांच करने की क्षमता यह जानने के लिए कि वे क्या हैं, वे क्या करते हैं और वे क्या जानते हैं) और मैक्रो (कंप्यूटर विज्ञान) नामक एक सुविधा में विकसित होते हैं। अधिकांश प्रोग्रामर आज जो मैक्रो शब्द से अवगत हैं, उन्हें सी (प्रोग्रामिंग भाषा) या सी ++ में सामना करना पड़ा है, जहां वे एक स्थिर विशेषता हैं जो भाषा के एक छोटे से उपसमुच्चय में बनाई गई हैं, और पाठ पर केवल स्ट्रिंग प्रतिस्थापन के लिए सक्षम हैं कार्यक्रम। गतिशील भाषाओं में, हालांकि, वे संकलक के आंतरिक कामकाज तक पहुंच प्रदान करते हैं, और दुभाषिया, वर्चुअल मशीन, या रनटाइम तक पूर्ण पहुंच प्रदान करते हैं, जिससे भाषा जैसी संरचनाओं की परिभाषा की अनुमति मिलती है जो कोड को अनुकूलित कर सकते हैं या सिंटैक्स या व्याकरण को संशोधित कर सकते हैं। भाषा।
सभा की भाषा, सी (प्रोग्रामिंग लैंग्वेज), सी ++, शुरुआती जावा (प्रोग्रामिंग भाषा), और फोरट्रान आमतौर पर इस श्रेणी में नहीं आते हैं।[clarification needed]
उदाहरण कोड
निम्नलिखित उदाहरण सामान्य लिस्प और उसके कॉमन लिस्प ऑब्जेक्ट सिस्टम (सीएलओएस) भाषा का उपयोग करते हुए गतिशील विशेषताएं दिखाते हैं।
रनटाइम और लेट बाइंडिंग पर कोड की गणना
उदाहरण दिखाता है कि गणना किए गए स्रोत कोड से रनटाइम पर फ़ंक्शन को कैसे संशोधित किया जा सकता है
<वाक्यविन्यास प्रकाश लैंग = लिस्प>
- स्रोत कोड को एक चर में डेटा के रूप में संग्रहीत किया जाता है
CL-USER > (डिफपैरामीटर *सर्वश्रेष्ठ-अनुमान-सूत्र* '(लैम्ब्डा (x) (* x x 2.5)))
- सर्वश्रेष्ठ-अनुमान-सूत्र*
- एक फ़ंक्शन कोड से बनाया गया है और रनटाइम पर संकलित किया गया है, फ़ंक्शन बेस्ट-अनुमान नाम के तहत उपलब्ध है
CL-USER > (संकलित करें 'सर्वश्रेष्ठ-अनुमान *सर्वश्रेष्ठ-अनुमान-सूत्र*)
- <फंक्शन 15 40600152F4>
- समारोह कहा जा सकता है
CL-USER> (उत्तम-अनुमान 10.3) 265.225
- रनटाइम पर स्रोत कोड में सुधार किया जा सकता है
CL-USER > (सेटफ *सर्वश्रेष्ठ-अनुमान-सूत्र* `(लैम्ब्डा (x) ,(सूची 'sqrt (तीसरा *सर्वश्रेष्ठ-अनुमान-सूत्र*)))) (लैम्ब्डा (एक्स) (एसक्यूआरटी (* एक्स एक्स 2.5)))
- समारोह का एक नया संस्करण संकलित किया जा रहा है
CL-USER > (संकलित करें 'सर्वश्रेष्ठ-अनुमान *सर्वश्रेष्ठ-अनुमान-सूत्र*)
- <फंक्शन 16 406000085C>
- अगली कॉल नए फ़ंक्शन को कॉल करेगी, लेट बाइंडिंग की एक विशेषता
CL-USER> (उत्तम-अनुमान 10.3) 16.28573 </वाक्यविन्यास हाइलाइट>
ऑब्जेक्ट रनटाइम परिवर्तन
यह उदाहरण दिखाता है कि कैसे एक मौजूदा उदाहरण को एक नया स्लॉट शामिल करने के लिए बदला जा सकता है जब इसकी कक्षा बदलती है और एक मौजूदा विधि को एक नए संस्करण से बदला जा सकता है।
<वाक्यविन्यास प्रकाश लैंग = लिस्प>
- एक व्यक्ति वर्ग। व्यक्ति का एक नाम होता है।
सीएल-उपयोगकर्ता> (डिफक्लास व्यक्ति () ((नाम: initarg: नाम)))
- <मानक-श्रेणी के व्यक्ति 4020081FB3>
- वर्ग व्यक्ति की वस्तुओं के लिए एक कस्टम मुद्रण विधि
सीएल-उपयोगकर्ता> (डिफमेथोड प्रिंट-ऑब्जेक्ट ((पी व्यक्ति) स्ट्रीम)
(प्रिंट-अपठनीय-ऑब्जेक्ट (पी स्ट्रीम: टाइप टी) (प्रारूप स्ट्रीम ~a (स्लॉट-मान p 'नाम))))
- <मानक-विधि प्रिंट-वस्तु शून्य (व्यक्ति टी) 4020066E5B>
- एक उदाहरण व्यक्ति उदाहरण
CL-USER > (सेटफ *व्यक्ति-1* (मेक-इंस्टेंस 'व्यक्ति: नाम ईवा लुएटर))
- <व्यक्ति ईवा लुएटर>
- वर्ग के व्यक्ति को दूसरा स्लॉट मिलता है। इसके बाद स्लॉट का नाम और उम्र होती है।
CL-USER > (defclass person () ((नाम :initarg :name) (आयु :initarg :age :initform :unknown)))
- <मानक-श्रेणी के व्यक्ति 4220333E23>
- वस्तु को प्रिंट करने की विधि को अद्यतन करना
सीएल-उपयोगकर्ता> (डिफमेथोड प्रिंट-ऑब्जेक्ट ((पी व्यक्ति) स्ट्रीम)
(प्रिंट-अपठनीय-ऑब्जेक्ट (पी स्ट्रीम: टाइप टी) (प्रारूप धारा ~ एक उम्र: ~ (स्लॉट-वैल्यू पी 'नाम) (स्लॉट-वैल्यू पी' उम्र)))
- <मानक-विधि प्रिंट-वस्तु शून्य (व्यक्ति टी) 402022ADE3>
- मौजूदा ऑब्जेक्ट अब बदल गया है, इसमें एक अतिरिक्त स्लॉट और एक नया प्रिंट तरीका है
सीएल-यूजर > *व्यक्ति-1*
- <व्यक्ति ईवा लुएटर उम्र: अज्ञात>
- हम उदाहरण के लिए नए आयु स्लॉट सेट कर सकते हैं
सीएल-यूज़र> (सेटफ़ (स्लॉट-वैल्यू *व्यक्ति-1* 'उम्र) 25) 25
- वस्तु को अद्यतन किया गया है
सीएल-यूजर > *व्यक्ति-1*
- <व्यक्ति ईवा लुएटर उम्र: 25>
</वाक्यविन्यास हाइलाइट>
उदाहरणों के वर्ग के आधार पर रनटाइम पर कोड का कोडांतरण
अगले उदाहरण में, कक्षा के व्यक्ति को एक नया सुपरक्लास मिलता है। प्रिंट पद्धति को इस तरह से पुनर्परिभाषित किया जाता है कि यह प्रभावी पद्धति में कई विधियों को जोड़ती है। तर्क के वर्ग और रनटाइम पर उपलब्ध और लागू विधियों के आधार पर प्रभावी विधि को इकट्ठा किया जाता है।
<वाक्यविन्यास प्रकाश लैंग = लिस्प>
- वर्ग व्यक्ति
सीएल-उपयोगकर्ता> (डिफक्लास व्यक्ति () ((नाम: initarg: नाम)))
- <मानक-श्रेणी के व्यक्ति 4220333E23>
- एक व्यक्ति सिर्फ अपना नाम प्रिंट करता है
सीएल-उपयोगकर्ता> (डिफमेथोड प्रिंट-ऑब्जेक्ट ((पी व्यक्ति) स्ट्रीम)
(प्रिंट-अपठनीय-ऑब्जेक्ट (पी स्ट्रीम: टाइप टी) (प्रारूप स्ट्रीम ~a (स्लॉट-मान p 'नाम))))
- <मानक-विधि प्रिंट-वस्तु शून्य (व्यक्ति टी) 40200605AB>
- एक व्यक्ति उदाहरण
CL-USER > (डिफपैरामीटर * व्यक्ति -1 * (मेक-इंस्टेंस 'व्यक्ति: नाम ईवा लुएटर))
- व्यक्ति-1*
- एक व्यक्ति उदाहरण प्रदर्शित करना
सीएल-यूजर > *व्यक्ति-1*
- <व्यक्ति ईवा लुएटर>
- अब एक्स्टेंसिबल होने के लिए प्रिंट पद्धति को फिर से परिभाषित करना
- आसपास की विधि प्रिंट विधि के लिए संदर्भ बनाती है और यह अगली विधि को कॉल करती है
सीएल-उपयोगकर्ता> (डिफमेथोड प्रिंट-ऑब्जेक्ट: चारों ओर ((पी व्यक्ति) स्ट्रीम)
(प्रिंट-अपठनीय-ऑब्जेक्ट (पी स्ट्रीम: टाइप टी) (कॉल-नेक्स्ट-मेथड)))
- <मानक-विधि प्रिंट-ऑब्जेक्ट (:अराउंड) (व्यक्ति टी) 4020263743>
- प्राथमिक विधि नाम प्रिंट करती है
सीएल-उपयोगकर्ता> (डिफमेथोड प्रिंट-ऑब्जेक्ट ((पी व्यक्ति) स्ट्रीम)
(प्रारूप स्ट्रीम ~a (स्लॉट-मान p 'नाम)))
- <मानक-विधि प्रिंट-वस्तु शून्य (व्यक्ति टी) 40202646BB>
- एक नया वर्ग आईडी-मिक्सिन एक आईडी प्रदान करता है
सीएल-उपयोगकर्ता> (डीफक्लास आईडी-मिक्सिन () ((आईडी: initarg: आईडी)))
- <मानक-वर्ग आईडी-मिक्सिन 422034A7AB>
- प्रिंट विधि केवल आईडी स्लॉट के मान को प्रिंट करती है
CL-USER> (डिफमेथोड प्रिंट-ऑब्जेक्ट: के बाद ((ऑब्जेक्ट आईडी-मिक्सिन) स्ट्रीम)
(प्रारूप स्ट्रीम आईडी: ~a (स्लॉट-वैल्यू ऑब्जेक्ट 'आईडी)))
- <मानक-विधि प्रिंट-ऑब्जेक्ट (:बाद) (आईडी-मिक्सिन टी) 4020278E33>
- अब हम मिक्सिन आईडी-मिक्सिन को शामिल करने के लिए क्लास पर्सन को फिर से परिभाषित करते हैं
सीएल-यूजर 241> (डीफक्लास व्यक्ति (आईडी-मिक्सिन) ((नाम: initarg: नाम)))
- <मानक-श्रेणी के व्यक्ति 4220333E23>
- मौजूदा उदाहरण *व्यक्ति-1* के पास अब एक नया स्लॉट है और हम इसे 42 पर सेट करते हैं
सीएल-यूजर 242 > (सेटफ (स्लॉट-वैल्यू *पर्सन-1* 'आईडी) 42) 42
- वस्तु को फिर से प्रदर्शित करना। प्रिंट-ऑब्जेक्ट फ़ंक्शन में अब एक प्रभावी विधि है, जो तीन विधियों को कॉल करती है
- एक आस-पास विधि, प्राथमिक विधि और बाद की विधि।
सीएल-यूजर 243 > *व्यक्ति-1*
- <व्यक्ति ईवा लुएटर आईडी: 42>
</वाक्यविन्यास हाइलाइट>
उदाहरण
लोकप्रिय गतिशील प्रोग्रामिंग भाषाओं में जावास्क्रिप्ट, पायथन (प्रोग्रामिंग भाषा), रूबी (प्रोग्रामिंग भाषा), PHP, लुआ (प्रोग्रामिंग भाषा) और पर्ल शामिल हैं। निम्नलिखित को आमतौर पर गतिशील भाषा माना जाता है:
- ActionScript
- बीनशेल[2]
- सी शार्प (प्रोग्रामिंग भाषा) | सी # (प्रतिबिंब का उपयोग करके)
- क्लोजर
- कोबोलस्क्रिप्ट
- कोल्डफ्यूजन मार्कअप लैंग्वेज
- सामान्य लिस्प और अधिकांश अन्य लिस्प (प्रोग्रामिंग भाषा)
- डायलन (प्रोग्रामिंग भाषा)
- ई प्रोग्रामिंग भाषा
- अमृत (प्रोग्रामिंग भाषा)
- एरलांग (प्रोग्रामिंग भाषा)
- फोर्थ (प्रोग्रामिंग भाषा)
- झींगे
- जीडीस्क्रिप्ट
- ग्रूवी (प्रोग्रामिंग भाषा)[3]
- जावा (प्रोग्रामिंग भाषा) | जावा (प्रतिबिंब का उपयोग करके)
- जावास्क्रिप्ट
- जूलिया (प्रोग्रामिंग भाषा)
- लुआ (प्रोग्रामिंग भाषा)
- MATLAB / GNU ऑक्टेव
- उद्देश्य सी
- पर्ल
- पीएचपी
- पावरशेल
- प्रोलॉग
- पायथन (प्रोग्रामिंग भाषा)
- आर (प्रोग्रामिंग भाषा)
- राकू (प्रोग्रामिंग भाषा)
- रिबोल
- रूबी (प्रोग्रामिंग भाषा)
- गपशप
- उत्तम टक्कर खानेवाली
- टीसीएल
- वीबीस्क्रिप्ट
- वोल्फ्राम भाषा
यह भी देखें
संदर्भ
- ↑ Meijer, Erik and Peter Drayton (2005), Static Typing Where Possible, Dynamic Typing When Needed: The End of the Cold War Between Programming Languages (PDF), Microsoft Corporation, CiteSeerX 10.1.1.69.5966
- ↑ Chapter 24. Dynamic language support. Static.springsource.org. Retrieved on 2013-07-17.
- ↑ < "Groovy - Home". Archived from the original on 2014-03-02. Retrieved 2014-03-02.
अग्रिम पठन
- Tratt, Laurence (2009). Dynamically Typed Languages. Advances in Computers. Vol. 77. pp. 149–184. doi:10.1016/s0065-2458(09)01205-4. ISBN 9780123748126.
बाहरी संबंध
(Many use the term "scripting languages".)
- Prechelt, Lutz (August 18, 2002). "Are Scripting Languages Any Good? A Validation of Perl, Python, Rexx, and Tcl against C, C++, and Java" (PDF). Advances in Computers. 57: 205–270. doi:10.1016/S0065-2458(03)57005-X. ISBN 9780120121571. ISSN 0065-2458. Retrieved 2020-07-27.
- Bezroukov, Nikolai (2013). "A Slightly Skeptical View on Scripting Languages". Softpanorama (2.1 ed.). Retrieved 2020-07-27.
- Wall, Larry (December 6, 2007). Programming is Hard, Let's Go Scripting... (Speech). State of the Onion 11. Perl.com. Retrieved 2020-07-27.
- Roth, Gregor (November 20, 2007). "Scripting on the Java platform". JavaWorld. Retrieved 2020-07-27.
- Ousterhout, John K. (March 1998). "Scripting: Higher-Level Programming for the 21st Century" (PDF). Computer. Vol. 31, no. 3. pp. 23–30. doi:10.1109/2.660187. ISSN 0018-9162. Retrieved 2020-07-27.
- "ActiveState Announces Focus on Dynamic Languages". ActiveState. July 26, 2004. Retrieved 2020-07-27.
- Ascher, David (July 27, 2004). "Dynamic Languages — ready for the next challenges, by design" (PDF). Whitepapers. ActiveState. Archived from the original (PDF) on 2008-11-18.
- Ascher, David (July 27, 2004). "Dynamic Languages — ready for the next challenges, by design". Whitepapers. ActiveState. Archived from the original on 2008-12-08.
- Templates that generate short descriptions
- Articles using small message boxes
- Wikipedia articles needing clarification from September 2016
- Collapse templates
- Navigational boxes
- Navigational boxes without horizontal lists
- Sidebars with styles needing conversion
- Templates generating microformats
- Templates that are not mobile friendly
- Wikipedia metatemplates
- मूल्यांकन रणनीति
- डायनेमिक प्रोग्रामिंग लैंग्वेज
- Machine Translated Page
- Created On 17/02/2023