इवल: Difference between revisions

From Vigyanwiki
(Created page with "{{short description|Function in a programming language, which evaluates a string}} {{redirects|Evaluation (computer science)|other uses|Evaluation (disambiguation)}} {{lowerca...")
 
No edit summary
 
(23 intermediate revisions by 4 users not shown)
Line 1: Line 1:
{{short description|Function in a programming language, which evaluates a string}}
{{short description|Function in a programming language, which evaluates a string}}
{{redirects|Evaluation (computer science)|other uses|Evaluation (disambiguation)}}
{{lowercase}}
{{lowercase}}
कुछ [[प्रोग्रामिंग भाषा]]ओं में,<code>eval</code>, अंग्रेजी विक्षनरी के लिए संक्षिप्त: मूल्यांकन, एक [[सबरूटीन]] है जो एक स्ट्रिंग का मूल्यांकन करता है जैसे कि यह भाषा में एक [[अभिव्यक्ति (प्रोग्रामिंग)]] थी, और एक वापसी मूल्य देता है; दूसरों में, यह कोड की कई पंक्तियों को निष्पादित करता है जैसे कि उन्हें लाइन सहित शामिल करने के बजाय शामिल किया गया हो <code>eval</code>. को इनपुट <code>eval</code> आवश्यक रूप से एक स्ट्रिंग नहीं है; यह कोड का संरचित प्रतिनिधित्व हो सकता है, जैसे कि [[सार वाक्य रचना का पेड़]] (जैसे [[लिस्प (प्रोग्रामिंग भाषा)]] फॉर्म), या विशेष प्रकार जैसे कि <code>code</code> (पायथन के रूप में)[[बयान (कंप्यूटर विज्ञान)]] के लिए एनालॉग Exec (सिस्टम कॉल) है, जो एक स्ट्रिंग (या अन्य प्रारूप में कोड) को निष्पादित करता है जैसे कि यह एक स्टेटमेंट था; कुछ भाषाओं में, जैसे कि पायथन, दोनों मौजूद हैं, जबकि अन्य भाषाओं में दोनों में से केवल एक <code>eval</code> या <code>exec</code> है।
कुछ [[Index.php?title=Index.php?title=प्रोग्रामिंग भाषाओं|प्रोग्रामिंग भाषाओं]] में eval, अंग्रेजी मूल्यांकन के लिए संक्षिप्त, एक [[Index.php?title=ऐसा कार्य|ऐसा कार्य]] है जो एक स्ट्रिंग का मूल्यांकन करता है जैसे कि यह भाषा में एक [[Index.php?title=अभिव्यक्ति|अभिव्यक्ति]] थी, और एक परिणाम देता है; दूसरों में, यह <code>code</code> की कई पंक्तियों को निष्पादित करता है जैसे कि उन्हें eval सहित लाइन के अतिरिक्त सम्मलित किया गया हो। eval के लिए इनपुट आवश्यक रूप से एक स्ट्रिंग नहीं है; यह <code>code</code> का संरचित प्रतिनिधित्व हो सकता है, जैसे कि [[Index.php?title=सार सिंटैक्स ट्री|सार सिंटैक्स ट्री]] (जैसे [[Index.php?title=लिस्प फॉर्म),|लिस्प फॉर्म),]] या विशेष प्रकार जैसे कि<code>code</code>(पायथन के रूप में) [[Index.php?title=विवरण|विवरण]] के लिए अनुरूप निष्पादन है, जो एक स्ट्रिंग (या अन्य प्रारूप में <code>code</code>) को निष्पादित करता है जैसे कि एक विवरण जो कुछ भाषाओं में उपस्थित हैं, जबकि अन्य भाषाओं में दोनों में से केवल एक <code>eval</code> या <code>exec</code> है।


इवल और [[आवेदन करना]] [[मेटा-सर्कुलर मूल्यांकनकर्ता]]ओं के उदाहरण हैं, एक भाषा के दुभाषिए जिन्हें भाषा के भीतर ही लागू किया जा सकता है।{{citation needed|date=November 2021}}
eval और [[Index.php?title=अप्लाई|अप्लाई]] [[Index.php?title=मेटा-सर्कुलर मूल्यांकनकर्ताओं|मेटा-सर्कुलर मूल्यांकनकर्ताओं]] के उदाहरण हैं, एक भाषा के व्याख्याकार जिन्हें भाषा के अन्दर ही लागू किया जा सकता है। {{citation needed|date=November 2021}}




== सुरक्षा जोखिम ==
== सुरक्षा जोखिम ==
का उपयोग करते हुए <code>eval</code> एक अविश्वसनीय स्रोत से डेटा के साथ सुरक्षा कमजोरियों का परिचय हो सकता है। उदाहरण के लिए, यह मानते हुए कि <code>get_data()</code> फ़ंक्शन इंटरनेट से डेटा प्राप्त करता है, यह [[पायथन (प्रोग्रामिंग भाषा)]] कोड असुरक्षित है:
अविश्वसनीय स्रोत से डेटा के साथ eval का उपयोग करने से सुरक्षा में भेद्यता आ सकती है। उदाहरण के लिए, यह मानते हुए कि <code>get_data()</code> फ़ंक्शन इंटरनेट से डेटा प्राप्त करता है, यह [[Index.php?title=पायथन|पायथन]] <code>code</code> असुरक्षित है:
<वाक्यविन्यास लैंग = अजगर>
 
सत्र ['प्रमाणीकृत'] = झूठा
session['authenticated'] = False
डेटा = get_data ()
 
फू = eval (डेटा)
data = get_data()
</वाक्यविन्यास हाइलाइट>
 
foo = eval(data)


स्ट्रिंग के साथ हमलावर [[कोड इंजेक्शन]] <code>"session.update(authenticated=True)"</code> डेटा के रूप में, जो अद्यतन करेगा <code>session</code> शब्दकोश सही होने के लिए एक प्रमाणीकृत कुंजी सेट करने के लिए। इसका उपाय करने के लिए, सभी डेटा जिसका उपयोग किया जाएगा <code>eval</code> बचा जाना चाहिए, या इसे संभावित रूप से हानिकारक कार्यों तक पहुंच के बिना चलाया जाना चाहिए।
एक अटैकर डेटा के रूप में <code>"session.update(authenticated=True)"</code> स्ट्रिंग के साथ प्रोग्राम की आपूर्ति कर सकता है, जो एक प्रामाणिक कुंजी को सही होने के लिए सेट करने के लिए सत्र शब्दकोश को अपडेट करेगा। इसका समाधान करने के लिए, eval के साथ उपयोग किए जाने वाले सभी डेटो से बचा जाना चाहिए, या इसे संभावित रूप से हानिकारक कार्यों तक पहुंचे बिना चलाया जाना चाहिए।


== कार्यान्वयन ==
== कार्यान्वयन ==
[[व्याख्या की गई भाषा]]ओं में, <code>eval</code> लगभग हमेशा सामान्य कोड के समान दुभाषिया के साथ कार्यान्वित किया जाता है। [[संकलित भाषा]]ओं में, प्रोग्राम को संकलित करने के लिए उपयोग किए जाने वाले एक ही कंपाइलर का उपयोग करके प्रोग्राम में एम्बेड किया जा सकता है <code>eval</code> समारोह; अलग दुभाषियों का कभी-कभी उपयोग किया जाता है, हालांकि इसके परिणामस्वरूप [[कोड दोहराव]] होता है।
[[Index.php?title=व्याख्या की गई भाषाओं|व्याख्या की गई भाषाओं]] में, eval लगभग हमेशा उसी दुभाषिया के साथ सामान्य code के रूप में कार्यान्वित किया जाता है। [[Index.php?title=संकलित भाषाओं|संकलित भाषाओं]] में, प्रोग्राम को संकलित करने के लिए उपयोग किए जाने वाले एक ही कंपाइलर को eval फ़ंक्शन का उपयोग करके प्रोग्राम में एम्बेड किया जा सकता है; अलग दुभाषियों का कभी-कभी उपयोग किया जाता है, चूंकि इसके परिणामस्वरूप [[Index.php?title=code दोहराव|code दोहराव]] होता है।


== प्रोग्रामिंग लैंग्वेज ==
== प्रोग्रामिंग लैंग्वेज ==
Line 25: Line 25:


==== [[जावास्क्रिप्ट]] ====
==== [[जावास्क्रिप्ट]] ====
जावास्क्रिप्ट में, <code>eval</code> एक अभिव्यक्ति मूल्यांकनकर्ता और एक बयान निष्पादक के बीच एक संकर है। यह मूल्यांकन की गई अंतिम अभिव्यक्ति का परिणाम देता है।
जावास्क्रिप्ट में,<code>eval</code> एक अभिव्यक्ति मूल्यांकनकर्ता और एक स्टेट्मन्ट निष्पादक के बीच एक संकर है। यह मूल्यांकन की गई अंतिम अभिव्यक्ति का परिणाम देता है।


अभिव्यक्ति मूल्यांकनकर्ता के रूप में उदाहरण:
अभिव्यक्ति मूल्यांकनकर्ता के रूप में उदाहरण:
<वाक्यविन्यास लैंग = जावास्क्रिप्ट>
फू = 2;
चेतावनी (eval ('फू + 2'));
</वाक्यविन्यास हाइलाइट>


एक बयान निष्पादक के रूप में उदाहरण:
foo = 2;
<वाक्यविन्यास लैंग = जावास्क्रिप्ट>
alert(eval('foo + 2'));
फू = 2;
 
eval ('फू = फू + 2; अलर्ट (फू);');
एक स्टेट्मन्ट निष्पादक के रूप में उदाहरण:
</वाक्यविन्यास हाइलाइट>
 
foo = 2;
eval('foo = foo + 2;alert(foo);');


जावास्क्रिप्ट का एक प्रयोग <code>eval</code> [[JSON]] टेक्स्ट को पार्स करना है, शायद [[अजाक्स (प्रोग्रामिंग)]] फ्रेमवर्क के हिस्से के रूप में। हालाँकि, आधुनिक ब्राउज़र प्रदान करते हैं <code>JSON.parse</code> इस कार्य के लिए अधिक सुरक्षित विकल्प के रूप में।
जावास्क्रिप्ट का एक प्रयोग<code>eval</code>[[Index.php?title=जेसन|जेसन]] टेक्स्ट को पार्स करना है, संभवतया [[Index.php?title=अजाक्स|अजाक्स]] ढांचे के भाग के रूप में। चूंकि, आधुनिक ब्राउज़र इस कार्य के लिए अधिक सुरक्षित विकल्प के रूप में जेसन.पार्स प्रदान करते हैं।


==== [[ActionScript]] ====
==== [[Index.php?title=एक्शन स्क्रिप्ट|एक्शन स्क्रिप्ट]] ====


एक्शनस्क्रिप्ट (फ्लैश की प्रोग्रामिंग भाषा) में, <code>eval</code> मनमानी अभिव्यक्तियों का मूल्यांकन करने के लिए उपयोग नहीं किया जा सकता है। फ्लैश 8 प्रलेखन के अनुसार, इसका उपयोग उन भावों तक सीमित है जो पुनर्प्राप्त करने के लिए एक चर, संपत्ति, वस्तु या मूवी क्लिप के नाम का प्रतिनिधित्व करते हैं। यह पैरामीटर या तो स्ट्रिंग या ऑब्जेक्ट इंस्टेंस का सीधा संदर्भ हो सकता है।<ref>{{cite web
एक्शन स्क्रिप्ट (फ्लैश की प्रोग्रामिंग भाषा) में,<code>eval</code>मनमाने अभिव्यक्तियों का मूल्यांकन करने के लिए उपयोग नहीं किया जा सकता है। फ्लैश 8 प्रलेखन के अनुसार, इसका उपयोग उन भावों तक सीमित है जो पुनर्प्राप्त करने के लिए एक चर, संपत्ति, वस्तु या मूवी क्लिप के नाम का प्रतिनिधित्व करते हैं। यह पैरामीटर या तो स्ट्रिंग या ऑब्जेक्ट इंस्टेंस का सीधा संदर्भ हो सकता है।<ref>{{cite web
|url = http://livedocs.macromedia.com/flash/8/index.html
|url = http://livedocs.macromedia.com/flash/8/index.html
|archive-url = https://web.archive.org/web/20061010123451/http://livedocs.macromedia.com/flash/8/index.html
|archive-url = https://web.archive.org/web/20061010123451/http://livedocs.macromedia.com/flash/8/index.html
Line 50: Line 48:
|title = Flash 8 LiveDocs
|title = Flash 8 LiveDocs
|date = 2006-10-10}}</ref>
|date = 2006-10-10}}</ref>
एक्शनस्क्रिप्ट 3 eval का समर्थन नहीं करता है।


एक्शनस्क्रिप्ट 3 इवल लाइब्रेरी<ref>[http://eval.hurlant.com ActionScript 3 Eval Library]</ref> और डी.एवल एपीआई<ref>{{cite web |url=http://www.riaone.com/products/deval/ |title=The D.eval API |archive-url=https://web.archive.org/web/20130314012753/http://www.riaone.com/products/deval/ |archive-date=2013-03-14 |url-status=dead}}</ref> समकक्ष बनाने के लिए विकास परियोजनाएं थीं <code>eval</code> ActionScript 3 में। दोनों समाप्त हो गए हैं, क्योंकि [[Adobe Flash Player]] अपने End-of-life_product|end-of-life पर पहुंच गया है।
एक्शन स्क्रिप्ट 3<code>eval</code>का समर्थन नहीं करता है।
 
एक्शन स्क्रिप्ट 3 eval लाइब्रेरी<ref>[http://eval.hurlant.com ActionScript 3 Eval Library]</ref> और डी.एवल एपीआई<ref>{{cite web |url=http://www.riaone.com/products/deval/ |title=The D.eval API |archive-url=https://web.archive.org/web/20130314012753/http://www.riaone.com/products/deval/ |archive-date=2013-03-14 |url-status=dead}}</ref> समकक्ष बनाने के लिए विकास परियोजनाएं थी<code>eval</code>एक्शन स्क्रिप्ट 3 में। दोनों समाप्त हो गए हैं, चूंकि [[Index.php?title=एडोब फ्लैश प्लेयर|एडोब फ्लैश प्लेयर]] अपने जीवन के अंत तक पहुंच गया है।


=== लिस्प ===
=== लिस्प ===
[[लिस्प प्रोग्रामिंग भाषा]] एक का उपयोग करने के लिए मूल भाषा थी <code>eval</code> 1958 में समारोह। वास्तव में, की परिभाषा <code>eval</code> कार्य ने भाषा दुभाषिया के पहले कार्यान्वयन का नेतृत्व किया।<ref name="mccarthy">[http://www-formal.stanford.edu/jmc/history/lisp/node3.html John McCarthy, "History of Lisp - The Implementation of Lisp"]</ref>
[[Index.php?title=लिस्प|लिस्प]] 1958 में एक eval फ़ंक्शन का उपयोग करने वाली मूल भाषा थी। वास्तव में, eval फ़ंक्शन की परिभाषा के कारण भाषा दुभाषिया का पहला कार्यान्वयन का नेतृत्व किया।<ref name="mccarthy">[http://www-formal.stanford.edu/jmc/history/lisp/node3.html John McCarthy, "History of Lisp - The Implementation of Lisp"]</ref>
से पहले <code>eval</code> फ़ंक्शन को परिभाषित किया गया था, लिस्प फ़ंक्शंस मैन्युअल रूप से [[सभा की भाषा]] स्टेटमेंट्स के लिए संकलित किए गए थे। हालांकि, एक बार <code>eval</code> फ़ंक्शन को मैन्युअल रूप से संकलित किया गया था, तब इसे एक साधारण [[रीड-इवल-प्रिंट लूप]] के हिस्से के रूप में उपयोग किया गया था, जिसने पहले लिस्प दुभाषिया का आधार बनाया था।
eval फ़ंक्शन को परिभाषित करने से पहले, लिस्प फ़ंक्शंस को [[Index.php?title=असेंबली लैंग्वेज|असेंबली लैंग्वेज]] स्टेटमेंट्स में मैन्युअल रूप से संकलित किया गया था। चूंकि, एक बार eval फ़ंक्शन को नियम रूप मे संकलित कर लेने के बाद इसे एक साधारण [[रीड-इवल-प्रिंट लूप]] भाग के रूप में उपयोग किया गया था, जिसने पहले लिस्प दुभाषिया का आधार बनाया था।
 
लिस्प के बाद के संस्करण <code>eval</code> फ़ंक्शन को कंपाइलर्स के रूप में भी कार्यान्वित किया गया है। <code>eval</code> लिस्प में e> फ़ंक्शन एक फॉर्म के मूल्यांकन और तर्क के रूप में निष्पादित होने की अपेक्षा करता है। दिए गए फॉर्म का रिटर्न वैल्यू कॉल का रिटर्न वैल्यू होगा <code>eval</code>.


यह एक उदाहरण लिस्प कोड है:
लिस्प eval फ़ंक्शन के बाद के संस्करणों को भी कंपाइलर के रूप में उपयोग किया गया है। लिस्प में eval फ़ंक्शन एक फॉर्म के मूल्यांकन और तर्क के रूप में निष्पादित होने की अपेक्षा करता है। दिए गए फॉर्म का रिटर्न वैल्यू कॉल टू eval का रिटर्न वैल्यू होगा।यह एक उदाहरण लिस्प code है:


<वाक्यविन्यास प्रकाश लैंग = लिस्प>
<वाक्यविन्यास प्रकाश लैंग = लिस्प>
Line 71: Line 68:
; उदाहरण के लिए ' के साथ उपसर्ग करके एक फॉर्म का:
; उदाहरण के लिए ' के साथ उपसर्ग करके एक फॉर्म का:
(सेट फॉर्म1 '(+ 1 2 3))
(सेट फॉर्म1 '(+ 1 2 3))
; अब फॉर्म 1 में एक फॉर्म होता है जिसका उपयोग eval द्वारा किया जा सकता है
; जब फॉर्म 1 में एक फॉर्म होता है जिसका उपयोग eval द्वारा किया जा सकता है
; उदाहरण:
; उदाहरण:
(ईवल फॉर्म 1)
(eval फॉर्म 1)
; eval मूल्यांकन (+ 1 2 3) और 6 लौटा।
; eval मूल्यांकन (+ 1 2 3) और 6 लौटा।
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>


लिस्प बहुत लचीला होने के लिए जाना जाता है और ऐसा ही है <code>eval</code> समारोह। उदाहरण के लिए, एक स्ट्रिंग की सामग्री का मूल्यांकन करने के लिए, स्ट्रिंग को पहले लिस्प फॉर्म में बदलना होगा <code>read-from-string</code> फ़ंक्शन और फिर परिणामी फॉर्म को पास करना होगा <code>eval</code>:
लिस्प बहुत लचीला होने के लिए जाना जाता है और इसलिए यह eval कार्य है। उदाहरण के लिए, स्ट्रिंग की सामग्री का मूल्यांकन करने के लिए, स्ट्रिंग को रीड-टू-स्ट्रिंग फ़ंक्शन का उपयोग करके पहले लिस्प फॉर्म में परिवर्तित करना होगा और फिर परिणामी फॉर्म को eval पास करना होगा:


<syntaxhighlight lang= lisp >(eval (रीड-फ्रॉम-स्ट्रिंग (format t \ Hello World!!!~%\ ) ))</syntaxhighlight>
<syntaxhighlight lang="lisp">(eval (read-from-string "(format t \"Hello World!!!~%\")"))</syntaxhighlight>


भ्रम का एक प्रमुख बिंदु प्रश्न है, किस संदर्भ में फॉर्म में प्रतीकों का मूल्यांकन किया जाएगा। उपरोक्त उदाहरण में, <code>form1</code> प्रतीक शामिल है <code>+</code>. उदाहरण के उद्देश्य के अनुसार कार्य करने के लिए इस प्रतीक के मूल्यांकन को जोड़ने के लिए फ़ंक्शन प्राप्त करना चाहिए। इस प्रकार लिस्प की कुछ बोलियाँ एक अतिरिक्त पैरामीटर की अनुमति देती हैं <code>eval</code> मूल्यांकन के संदर्भ को निर्दिष्ट करने के लिए (Python's <code>eval</code> कार्य - नीचे देखें)। लिस्प की [[योजना (प्रोग्रामिंग भाषा)]] बोली में एक उदाहरण (आर<sup>5</sup>रुपये और बाद में):
भ्रम का एक प्रमुख बिंदु प्रश्न है, किस संदर्भ में फॉर्म में प्रतीकों का मूल्यांकन किया जाएगा। उपरोक्त उदाहरण में, फॉर्म 1 में प्रतीक + है। उदाहरण के उद्देश्य के अनुसार कार्य करने के लिए इस प्रतीक के मूल्यांकन को जोड़ने के लिए फ़ंक्शन प्राप्त करना चाहिए। इस प्रकार लिस्प की कुछ बोलियाँ मूल्यांकन के संदर्भ को निर्दिष्ट करने के लिए eval के लिए एक अतिरिक्त पैरामीटर की अनुमति देती हैं (पायथन के eval फ़ंक्शन के वैकल्पिक तर्कों के समान - नीचे देखें)। लिस्प (R5RS और बाद में) की योजना बोली में एक उदाहरण:


<वाक्यविन्यास लैंग = योजना>
<वाक्यविन्यास लैंग = योजना>
;; उपरोक्त उदाहरण की तरह कुछ सरल रूप को परिभाषित करें।
;; उपरोक्त उदाहरण की तरह कुछ सरल रूप को परिभाषित करें।
(फॉर्म2 परिभाषित करें '(+ 5 2))
(define form2 '(+ 5 2))
मूल्य: फॉर्म 2
<nowiki>;</nowiki>Value<nowiki>:</nowiki> form2


;; प्रारंभिक संदर्भ में प्रपत्र का मूल्यांकन करें।
;; प्रारंभिक संदर्भ में प्रपत्र का मूल्यांकन करें।
;; मूल्यांकन के लिए एक संदर्भ को स्कीम स्लैंग में पर्यावरण कहा जाता है।
;; मूल्यांकन के लिए एक संदर्भ को स्कीम स्लैंग में पर्यावरण कहा जाता है।
(eval form2 उपयोगकर्ता-प्रारंभिक-पर्यावरण)
(eval form2 user-initial-environment)
मूल्य: 7
<nowiki>;</nowiki>Value<nowiki>:</nowiki> 7


;; प्रारंभिक वातावरण को भ्रमित करें, जिससे + होगा
;; प्रारंभिक वातावरण को भ्रमित करें, जिससे + होगा
;; घटाव समारोह के लिए एक नाम।
;; घटाव समारोह के लिए एक नाम।
(पर्यावरण-परिभाषित उपयोगकर्ता-प्रारंभिक-पर्यावरण '+ -)
(environment-define user-initial-environment '+ -)
मूल्य: +
<nowiki>;</nowiki>Value<nowiki>:</nowiki> +


;; फॉर्म का फिर से मूल्यांकन करें।
;; फॉर्म का फिर से मूल्यांकन करें।
;; ध्यान दें कि लौटाया गया मान बदल गया है।
;; ध्यान दें कि लौटाया गया मान बदल गया है।
(eval form2 उपयोगकर्ता-प्रारंभिक-पर्यावरण)
(eval form2 user-initial-environment)
मूल्य: 3
<nowiki>;</nowiki>Value<nowiki>:</nowiki> 3
</वाक्यविन्यास हाइलाइट>


=== [[पर्ल]] ===
=== [[पर्ल]] ===
पर्ल में, <code>eval</code> कार्य एक अभिव्यक्ति मूल्यांकनकर्ता और एक बयान निष्पादक के बीच एक संकर है। यह मूल्यांकन की गई अंतिम अभिव्यक्ति का परिणाम देता है (सभी कथन पर्ल प्रोग्रामिंग में अभिव्यक्ति हैं), और अंतिम अर्धविराम को छोड़े जाने की अनुमति देता है।
पर्ल में,<code>eval</code> कार्य एक अभिव्यक्ति मूल्यांकनकर्ता और एक विवरण निष्पादक के बीच एक संकर है। यह मूल्यांकन की गई अंतिम अभिव्यक्ति का परिणाम देता है (सभी कथन पर्ल प्रोग्रामिंग में अभिव्यक्ति हैं), और अंतिम अर्धविराम को छोड़े जाने की अनुमति देता है।


अभिव्यक्ति मूल्यांकनकर्ता के रूप में उदाहरण:
अभिव्यक्ति मूल्यांकनकर्ता के रूप में उदाहरण:
<वाक्यविन्यास प्रकाश लैंग = पर्ल>
$ फू = 2;
$foo = 2;
प्रिंट इवल ('$ फू + 2'), \ n;
print eval('$foo + 2'), "\n";
</वाक्यविन्यास हाइलाइट>
एक विवरण निष्पादक के रूप में उदाहरण:
 
एक बयान निष्पादक के रूप में उदाहरण:
$foo = 2;
<वाक्यविन्यास प्रकाश लैंग = पर्ल>
eval('$foo += 2; print "$foo\n";');
$ फू = 2;
eval ('$ फू + = 2; प्रिंट $ फू \ n;');
</वाक्यविन्यास हाइलाइट>


पर्ल के पास भी है <code>eval</code> ब्लॉक, जो इसके अपवाद हैंडलिंग तंत्र के रूप में कार्य करता है (देखें अपवाद हैंडलिंग सिंटैक्स # पर्ल)। यह उपरोक्त उपयोग से भिन्न है <code>eval</code> अंदर उस कोड में तार के साथ <code>eval</code> ब्लॉक की व्याख्या रन-टाइम के बजाय संकलन-समय पर की जाती है, इसलिए इसका अर्थ नहीं है <code>eval</code> इस लेख में प्रयुक्त।
पर्ल में eval ब्लॉक भी हैं, जो इसके अपवाद हैंडलिंग तंत्र के रूप में कार्य करता है (अपवाद हैंडलिंग सिंटैक्स#पर्ल देखें)। यह eval के उपरोक्त उपयोग से अलग है जिसमें eval ब्लॉक के अंदर उस code में रन-टाइम के अतिरिक्त संकलन-समय पर व्याख्या की जाती है, इसलिए यह इस लेख में उपयोग किए गए eval का अर्थ नहीं है।


=== [[पीएचपी]] ===
=== [[पीएचपी]] ===
प्रिंट पीएचपी, <code>eval</code> एक स्ट्रिंग में कोड को लगभग ठीक उसी तरह निष्पादित करता है जैसे कि इसे कॉल करने के बजाय फ़ाइल में रखा गया हो <code>eval()</code>. एकमात्र अपवाद यह है कि कॉल से आने वाली त्रुटियों की सूचना दी जाती है <code>eval()</code>, और रिटर्न स्टेटमेंट फ़ंक्शन का परिणाम बन जाते हैं।
प्रिंट पीएचपी, eval एक स्ट्रिंग में code को लगभग ठीक उसी तरह निष्पादित करता है जैसे कि इसे कॉल करने के अतिरिक्त फ़ाइल में डाल दिया गया हो। एकमात्र अपवाद यह है कि त्रुटियों को एक कॉल से eval () के रूप में रिपोर्ट किया जाता है, और रिटर्न स्टेटमेंट फ़ंक्शन का परिणाम बन जाता है।


कुछ भाषाओं के विपरीत, तर्क <code>eval</code> एक या अधिक पूर्ण कथनों की एक स्ट्रिंग होनी चाहिए, केवल भाव नहीं; हालाँकि, कोई अभिव्यक्ति का रूप प्राप्त कर सकता है <code>eval</code> अभिव्यक्ति को रिटर्न स्टेटमेंट में डालकर, जो कारण बनता है <code>eval</code> उस अभिव्यक्ति का परिणाम वापस करने के लिए।
कुछ भाषाओं के विपरीत, eval का तर्क एक या अधिक पूर्ण कथनों की एक स्ट्रिंग होना चाहिए, केवल भाव नहीं; चूंकि, कोई भी रिटर्न स्टेटमेंट में एक्सप्रेशन डालकर eval का "एक्सप्रेशन" फॉर्म प्राप्त कर सकता है, जिससे eval उस एक्सप्रेशन के परिणाम को वापस कर देता है।


कुछ भाषाओं के विपरीत, PHP's <code>eval</code> एक कार्य के बजाय एक भाषा निर्माण है,<ref>{{cite web|url=http://php.net/eval|website=[[PHP]].net|access-date=2015-09-10|title=PHP: eval - Manual}}</ref> और इसलिए कुछ संदर्भों में उपयोग नहीं किया जा सकता है जहां कार्य हो सकते हैं, जैसे उच्च-क्रम के कार्य।
कुछ भाषाओं के विपरीत, PHP का eval एक फ़ंक्शन के अतिरिक्त एक "भाषा निर्माण" है,<ref>{{cite web|url=http://php.net/eval|website=[[PHP]].net|access-date=2015-09-10|title=PHP: eval - Manual}}</ref> और इसलिए कुछ संदर्भों में इसका उपयोग नहीं किया जा सकता है जहां फ़ंक्शन हो सकते हैं, जैसे उच्च-क्रम के कार्य।


प्रतिध्वनि का उपयोग करने का उदाहरण:
प्रतिध्वनि का उपयोग करने का उदाहरण:
<वाक्यविन्यास लैंग = php>
<?php
<?php
$foo = हैलो, दुनिया!\n ;
$foo = "Hello, world!\n";
eval ('इको $ फू;');
eval('echo "$foo";');
?>
?>
</वाक्यविन्यास हाइलाइट>
 
मान लौटाने का उदाहरण:
मान लौटाने का उदाहरण:
<वाक्यविन्यास लैंग = php>
<?php
<?php
$foo = अलविदा, दुनिया!\n ; // PHP5 में काम नहीं करता
$foo = "Goodbye, world!\n"; //does not work in PHP5
गूंज eval ('वापसी $ फू;');
echo eval('return $foo;');
?>
?>
</वाक्यविन्यास हाइलाइट>


=== लुआ ===
=== लुआ ===
[[लुआ (प्रोग्रामिंग भाषा)]] 5.1 में, <code>loadstring</code> लुआ कोड को एक अज्ञात फ़ंक्शन में संकलित करता है।
[[Index.php?title=लुआ|लुआ]] 5.1 में,<code>लोडस्ट्रिंग</code>लुआ code को एक अज्ञात फ़ंक्शन में संकलित करता है।


अभिव्यक्ति मूल्यांकनकर्ता के रूप में उदाहरण:
अभिव्यक्ति मूल्यांकनकर्ता के रूप में उदाहरण:
<वाक्यविन्यास लैंग = लुआ>
loadstring("print('Hello World!')")()
लोडस्ट्रिंग (प्रिंट ('हैलो वर्ल्ड!')) ()
</वाक्यविन्यास हाइलाइट>


दो चरणों में मूल्यांकन करने का उदाहरण:
दो चरणों में मूल्यांकन करने का उदाहरण:
<वाक्यविन्यास लैंग = लुआ>
= 1
a = 1
f = लोडस्ट्रिंग (एक + 1 लौटाएं) - अभिव्यक्ति को एक अज्ञात फ़ंक्शन में संकलित करें
f = loadstring("return a + 1") -- compile the expression to an anonymous function
प्रिंट (एफ ()) - निष्पादित करें (और परिणाम '2' प्रिंट करें)
print(f()) -- execute (and print the result '2')
</वाक्यविन्यास हाइलाइट>
लुआ 5.2 स्थित लोड फ़ंक्शन के पक्ष में लोडस्ट्रिंग को बहिष्कृत करता है, जिसे स्ट्रिंग्स को स्वीकार करने के लिए संवर्धित किया गया है। इसके अतिरिक्त, यह फ़ंक्शन के वातावरण को सीधे प्रदान करने की अनुमति देता है, चूंकि वातावरण अब बंद हो गया है (कंप्यूटर विज्ञान)।
load("print('Hello ' .. a)", "", "t", { a = "World!", print = print })()


लुआ 5.2 बहिष्कृत करता है <code>loadstring</code> मौजूदा के पक्ष में <code>load</code> समारोह, जो तार स्वीकार करने के लिए संवर्धित किया गया है। इसके अलावा, यह फ़ंक्शन के वातावरण को सीधे प्रदान करने की अनुमति देता है, क्योंकि वातावरण अब बंद हो गया है (कंप्यूटर विज्ञान)।
[[परिशिष्ट भाग]]
<वाक्यविन्यास लैंग = लुआ>
प्रिंट (लोड (प्रिंट ('हैलो' .. ए), टी, {ए = वर्ल्ड!, प्रिंट = प्रिंट}) ())
</वाक्यविन्यास हाइलाइट>


=== [[परिशिष्ट भाग]] ===
पोस्ट स्क्रिप्ट का निष्पादन ऑपरेटर एक ऑपरेंड लेता है - यदि यह एक साधारण शाब्दिक है तो यह इसे स्टैक का प्रयोजन है। यदि कोई पोस्टस्क्रिप्ट अभिव्यक्ति वाली स्ट्रिंग लेता है, तो कोई स्ट्रिंग को निष्पादन योग्य में परिवर्तित कर सकता है जिसे दुभाषिया द्वारा निष्पादित किया जा सकता है, उदाहरण के लिए:
पोस्टस्क्रिप्ट <code>exec</code> ऑपरेटर एक ऑपरेंड लेता है - यदि यह एक साधारण शाब्दिक है तो यह इसे स्टैक पर वापस धकेलता है। यदि कोई पोस्टस्क्रिप्ट अभिव्यक्ति वाली स्ट्रिंग लेता है, तो कोई स्ट्रिंग को निष्पादन योग्य में परिवर्तित कर सकता है जिसे दुभाषिया द्वारा निष्पादित किया जा सकता है, उदाहरण के लिए:


<वाक्यविन्यास लैंग = पोस्टस्क्रिप्ट>
<वाक्यविन्यास लैंग = पोस्टस्क्रिप्ट>
((हैलो वर्ल्ड) =) सीवीएक्स निष्पादन
  ((Hello World) =) cvx exec
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>
पोस्टस्क्रिप्ट अभिव्यक्ति को परिवर्तित करता है
पोस्टस्क्रिप्ट अभिव्यक्ति को परिवर्तित करता है


<वाक्यविन्यास लैंग = पोस्टस्क्रिप्ट>
<वाक्यविन्यास लैंग = पोस्टस्क्रिप्ट>
(हैलो वर्ल्ड) =
  (Hello World) =
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>
जो स्टैक से हैलो वर्ल्ड स्ट्रिंग को पॉप करता है और इसे निष्पादन योग्य प्रकार के लिए स्क्रीन पर प्रदर्शित करता है, फिर निष्पादित किया जाता है।
जो स्टैक से हैलो वर्ल्ड स्ट्रिंग को पॉप करता है और इसे निष्पादन योग्य प्रकार के लिए स्क्रीन पर प्रदर्शित करता है, फिर निष्पादित किया जाता है।


पोस्टस्क्रिप्ट <code>run</code> ऑपरेटर कार्यक्षमता में समान है, लेकिन इसके बजाय दुभाषिया फ़ाइल में ही पोस्टस्क्रिप्ट एक्सप्रेशन की व्याख्या करता है।
पोस्टस्क्रिप्ट <code>run</code> ऑपरेटर कार्यक्षमता में समान है, लेकिन इसके अतिरिक्त दुभाषिया फ़ाइल में ही पोस्टस्क्रिप्ट एक्सप्रेशन की व्याख्या करता है।


<वाक्यविन्यास लैंग = पोस्टस्क्रिप्ट>
<वाक्यविन्यास लैंग = पोस्टस्क्रिप्ट>
Line 184: Line 169:


=== पायथन ===
=== पायथन ===
[[पायथन (भाषा)]] में, <code>eval</code> अपने सरलतम रूप में कार्य एकल अभिव्यक्ति का मूल्यांकन करता है।
[[पायथन (भाषा)]] में,<code>eval</code>अपने सरलतम रूप में कार्य एकल अभिव्यक्ति का मूल्यांकन करता है।


<code>eval</code> उदाहरण (इंटरैक्टिव खोल):
<code>eval</code>उदाहरण (इंटरैक्टिव खोल):
<वाक्यविन्यास लैंग = पिकॉन>
>>> x = 1
>>> एक्स = 1
>>> eval('x + 1')
>>> eval('x + 1')
2
2
>>> eval('x') 1
>>> eval ('एक्स')
<code>eval</code>e> फ़ंक्शन दो वैकल्पिक तर्क लेता है, वैश्विक और स्थानीय, जो प्रोग्रामर को अभिव्यक्ति के मूल्यांकन के लिए एक प्रतिबंधित वातावरण स्थापित करने की अनुमति देता है। <code>exec</code> ई> विवरण (या <code>exec</code> फ़ंक्शन पायथन 3.x में) विवरणों को निष्पादित करता है:
1
</वाक्यविन्यास हाइलाइट> <code>eval</code> e> फ़ंक्शन दो वैकल्पिक तर्क लेता है, <code>global</code> और <code>locals</code>, जो प्रोग्रामर को अभिव्यक्ति के मूल्यांकन के लिए एक प्रतिबंधित वातावरण स्थापित करने की अनुमति देता है। <code>exec</code> ई> बयान (या <code>exec</code> फ़ंक्शन पायथन 3.x में) बयानों को निष्पादित करता है:


<code>exec</code> उदाहरण (इंटरैक्टिव खोल):
<code>exec</code> उदाहरण (इंटरैक्टिव खोल):
<वाक्यविन्यास लैंग = पिकॉन>
>>> एक्स = 1
>>> x = 1
>>> वाई = 1
>>> y = 1
>>> निष्पादन एक्स + = 1; वाई - = 1
>>> exec "x += 1; y -= 1"
>>> एक्स
>>> x
2
2
>>> वाई
>>> y
0
0
</वाक्यविन्यास हाइलाइट>
कथनों/अभिव्यक्तियों के मूल्यांकन के लिए सबसे सामान्य रूप code ऑब्जेक्ट्स का उपयोग कर रहा है। इन्हें आह्वान करके बनाया जा सकता है <code>compile()</code> फ़ंक्शन और यह बताकर कि इसे किस प्रकार के इनपुट को संकलित करना है: a<code>exec</code>विवरण, a<code>eval</code>बयान या a<code>सिंगगल</code>कथन:


कथनों/अभिव्यक्तियों के मूल्यांकन के लिए सबसे सामान्य रूप कोड ऑब्जेक्ट्स का उपयोग कर रहा है। इन्हें आह्वान करके बनाया जा सकता है <code>compile()</code> फ़ंक्शन और यह बताकर कि इसे किस प्रकार के इनपुट को संकलित करना है: a<code>exec</code>बयान, ए<code>eval</code>बयान या ए<code>single</code>कथन:
<code>कम्पाइल</code> उदाहरण (इंटरैक्टिव खोल):


<code>compile</code> उदाहरण (इंटरैक्टिव खोल):
>>> x = 1
<वाक्यविन्यास लैंग = पिकॉन>
>>> y = 2
>>> एक्स = 1
>>> eval (compile ("print 'x + y = ', x + y", "compile-sample.py", "single"))
>>> वाई = 2
x + y = 3
>>> eval (संकलन (प्रिंट 'x + y =', x + y, compile-sample.py, एकल))
एक्स + वाई = 3
</वाक्यविन्यास हाइलाइट>


=== डी ===
=== डी ===
[[डी प्रोग्रामिंग]] एक सांख्यिकीय रूप से संकलित भाषा है और इसलिए इसमें शामिल नहीं है<code>eval</code>पारंपरिक अर्थों में कथन, लेकिन इसमें संबंधित शामिल है<code>mixin</code>कथन। अंतर यह है कि कहाँ<code>eval</code>एक स्ट्रिंग को रनटाइम पर कोड के रूप में व्याख्या करता है, a<code>mixin</code>स्ट्रिंग को सामान्य कोड की तरह स्थिर रूप से संकलित किया जाता है और इसे संकलन समय पर जाना जाना चाहिए। उदाहरण के लिए:
[[डी प्रोग्रामिंग]] एक सांख्यिकीय रूप से संकलित भाषा है और इसलिए इसमें सम्मलित नहीं है<code>eval</code>पारंपरिक अर्थों में कथन, परंतु इसमें संबंधित "मिक्सिन" कथन सम्मलित है। अंतर यह है कि, जहां "eval" एक स्ट्रिंग को रनटाइम पर code के रूप में व्याख्या करता है, "मिक्सिन" के साथ स्ट्रिंग को सामान्य code की तरह स्थिर रूप से संकलित किया जाता है और संकलन समय पर जाना जाना चाहिए।
 
उदाहरण के लिए:


<वाक्यविन्यास प्रकाश लैंग = डी>
<वाक्यविन्यास प्रकाश लैंग = डी>
आयात std.stdio;
आयात std.stdio;


शून्य मुख्य () {
void main() {
    इंट संख्या = 0;
  int num = 0;
    मिक्सिन (संख्या ++;);
  mixin("num++;");
    राइटलन (संख्या); // प्रिंट 1।
  writeln(num); // Prints 1.
}
}
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>


उपरोक्त उदाहरण बिल्कुल उसी असेंबली भाषा निर्देशों को संकलित करेगा जैसे कि<code>num++;</code>मिश्रित होने के बजाय सीधे लिखा गया था। मिक्सिन के तर्क को एक स्ट्रिंग शाब्दिक होने की आवश्यकता नहीं है, लेकिन मनमाना अभिव्यक्ति जिसके परिणामस्वरूप एक स्ट्रिंग मान होता है, जिसमें फ़ंक्शन कॉल शामिल होते हैं, जिनका संकलन समय पर मूल्यांकन किया जा सकता है।
उपरोक्त उदाहरण ठीक उसी असेंबली भाषा के निर्देशों को संकलित करेगा जैसे कि<code>num++;</code>मिश्रित होने के अतिरिक्त सीधे लिखा गया था। मिक्सिन के तर्क को एक स्ट्रिंग शाब्दिक होने की आवश्यकता नहीं है, परंतु मनमाना अभिव्यक्ति जिसके परिणामस्वरूप एक स्ट्रिंग मान होता है, जिसमें फ़ंक्शन कॉल सम्मलित होते हैं, जिनका संकलन समय पर मूल्यांकन किया जा सकता है।
 
=== [[ठंडा गलन]] ===
कोल्डफ्यूजन का <code>evaluate</code> फ़ंक्शन आपको रनटाइम पर स्ट्रिंग अभिव्यक्ति का मूल्यांकन करने देता है।
<वाक्यविन्यास लैंग = सीएफएम>
<cfset x = int(1+1) >
<cfset y = मूल्यांकन (x)>
</वाक्यविन्यास हाइलाइट>


=== [[Index.php?title=शीत संलयन|शीत संलयन]] ===
कोल्ड फ्यूजन का<code>इवैल्यूएट</code>फ़ंक्शन आपको रनटाइम पर स्ट्रिंग अभिव्यक्ति का मूल्यांकन करने देता है।
<cfset x = "int(1+1)">
<cfset y = Evaluate(x)>
यह विशेष रूप से तब उपयोगी होता है जब आपको उस चर को प्रोग्रामेटिक रूप से चुनने की आवश्यकता होती है जिसे आप पढ़ना चाहते हैं।
यह विशेष रूप से तब उपयोगी होता है जब आपको उस चर को प्रोग्रामेटिक रूप से चुनने की आवश्यकता होती है जिसे आप पढ़ना चाहते हैं।
<syntaxhighlight lang= cfm <cfset x = मूल्यांकन ( queryname.#columnname#[rownumber] )></syntaxhighlight>
<syntaxhighlight lang= cfm <cfset x = मूल्यांकन ( queryname.#columnname#[rownumber] )></syntaxhighlight>


=== रूबी ===
=== रूबी ===
[[रूबी (प्रोग्रामिंग भाषा)]] दुभाषिया एक प्रदान करता है <code>eval</code> पायथन या पर्ल के समान कार्य करता है, और एक [[कार्यक्षेत्र (प्रोग्रामिंग)]], या [[नाम बंधन]] को भी निर्दिष्ट करने की अनुमति देता है।
[[Index.php?title=रूबी|रूबी]] प्रोग्रामिंग लैंग्वेज दुभाषिया पायथन या पर्ल के समान एक इवल फ़ंक्शन प्रदान करता है, और एक [[कार्यक्षेत्र (प्रोग्रामिंग)]], या [[Index.php?title=बाइंडिंग|बाइंडिंग]] को भी निर्दिष्ट करने की अनुमति देता है।
 
किसी फ़ंक्शन के बंधन को निर्दिष्ट करने के अलावा, <code>eval</code> एक विशिष्ट वर्ग परिभाषा बंधन या ऑब्जेक्ट इंस्टेंस बाइंडिंग के भीतर एक अभिव्यक्ति का मूल्यांकन करने के लिए भी इस्तेमाल किया जा सकता है, जिससे कक्षाओं को स्ट्रिंग्स में निर्दिष्ट नई विधियों के साथ विस्तारित किया जा सकता है।
 
<वाक्यविन्यास लैंग = रूबी>
ए = 1
eval('a + 1') # (2 का मूल्यांकन करता है)


किसी फ़ंक्शन के बंधन को निर्दिष्ट करने के अतिरिक्त, eval का उपयोग विशिष्ट वर्ग परिभाषा बाइंडिंग या ऑब्जेक्ट इंस्टेंस बाइंडिंग के अन्दर अभिव्यक्ति का मूल्यांकन करने के लिए भी किया जा सकता है, जिससे स्ट्रिंग्स में निर्दिष्ट नई विधियों के साथ कक्षाओं को विस्तारित किया जा सकता है।
a = 1 eval('a + 1') # (evaluates to 2)
# एक संदर्भ के भीतर मूल्यांकन
# एक संदर्भ के भीतर मूल्यांकन
def get_binding (ए)
डेफ गेटबाइंडिंग (ए)
   बंधन
   बंधन
अंत
अंत
eval('a+1',get_binding(3)) # (4 का मूल्यांकन करता है, क्योंकि get_binding के संदर्भ में 'a' 3 है)
eval('a+1',get_binding(3)) # (4 का मूल्यांकन करता है, चूंकि get_binding के संदर्भ में 'a' 3 है)
</वाक्यविन्यास हाइलाइट>
 
<वाक्यविन्यास लैंग = रूबी>
क्लास टेस्ट; अंत
Test.class_eval( def hello; return 'hello';end ) # इस क्लास में 'हैलो' मेथड जोड़ें
Test.new.hello # हैलो का मूल्यांकन करता है
</वाक्यविन्यास हाइलाइट>


=== फोर्थ ===
=== फोर्थ ===
[[फोर्थ (प्रोग्रामिंग भाषा)]] के अधिकांश मानक कार्यान्वयन के दो संस्करण हैं <code>eval</code>: <code>EVALUATE</code> और <code>INTERPRET</code>.
[[Index.php?title=फोर्थ|फोर्थ]] के अधिकांश मानक कार्यान्वयन के दो संस्करण हैं <code>eval</code>: मूल्यांकन और व्याख्या ।


Win32FORTH कोड उदाहरण:
Win32FORTH code उदाहरण:
<वाक्यविन्यास लैंग = आगे>
<वाक्यविन्यास लैंग = आगे>
   एस 2 2 +। मूल्यांकन \ आउटपुट 4
   S" 2 2 + ." EVALUATE \ Outputs "4"
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>


=== फ्रेड ===
=== फ्रेड ===
फ्रेमवर्क (सॉफ्टवेयर सूट) एफआरईडी (प्रोग्रामिंग लैंग्वेज) एक इंटरेक्टिव भाषा है जिसमें इवल द्वारा सभी कोड का स्वचालित रूप से मूल्यांकन किया जाता है। नीचे दिए गए उदाहरणों में स्ट्रिंग पैरामीटर ठीक वैसे ही चलेंगे जैसे किसी सूत्र में टाइप किए गए और निष्पादित किए गए हों या जब चयनित और निष्पादित किए गए हों।
फ्रेमवर्क एफआरईडी एक इंटरएक्टिव भाषा है जिसमें eval द्वारा सभी code का स्वचालित रूप से मूल्यांकन किया जाता है। नीचे दिए गए उदाहरणों में स्ट्रिंग पैरामीटर ठीक वैसे ही चलेंगे जैसे किसी सूत्र में टाइप किए गए और निष्पादित किए गए हों या जब चयनित और निष्पादित किए गए हों।
एम्परसेंड & तार संयोजन संचालिका है। Eval पुनरावर्ती रूप से इसके पैरामीटर को जोड़ता है, हल करता है और मूल्यांकन करता है।
एम्परसेंड & तार संयोजन संचालिका है। इवल पुनरावर्ती रूप से इसके पैरामीटर को जोड़ता है, हल करता है और मूल्यांकन करता है।
FRED (प्रोग्रामिंग लैंग्वेज) का एक आंतरिक कार्य भी है जिसका नाम है <code>@value</code> जो पैरामीटर स्ट्रिंग का मूल्यांकन करता है। <code>@value</code>का वैकल्पिक दूसरा सांख्यिक पैरामीटर विशेष प्रकार जैसे दिनांक, समय के लिए इनपुट प्रकार और स्वरूपों को इंगित करता है। आदि और दिए गए मान प्रारूप को निर्धारित करता है।
फ्रेड का एक आंतरिक कार्य भी है जिसका नाम है <code>@value</code> जो पैरामीटर स्ट्रिंग का मूल्यांकन करता है। <code>@value</code>का वैकल्पिक दूसरा सांख्यिक पैरामीटर विशेष प्रकार जैसे दिनांक, समय के लिए इनपुट प्रकार और स्वरूपों को इंगित करता है। आदि और दिए गए मान प्रारूप को निर्धारित करता है।
 
सुरक्षा कारणों से @value संदर्भ का दायरा वैश्विक सापेक्ष है इसलिए @local के साथ बनाए गए स्थानीय चर @value के लिए अदृश्य हैं। उन्हें केवल उसी सूत्र क्षेत्र में कोड द्वारा देखा जा सकता है। (नीचे उदाहरण देखें), उसी टोकन द्वारा @value स्कोप में बनाए गए स्थानीय संस्करण केवल @value द्वारा देखे जा सकते हैं और उसी सूत्र या किसी अन्य कोड में कोड के लिए अदृश्य हैं। (नीचे टिप्पणी (1*) देखें)


FRED कोड उदाहरण:
सुरक्षा कारणों से @value संदर्भ का दायरा वैश्विक सापेक्ष है इसलिए @local के साथ बनाए गए स्थानीय चर @value के लिए अदृश्य हैं। उन्हें एकमात्र उसी सूत्र क्षेत्र में code द्वारा देखा जा सकता है। उसी टोकन द्वारा @value स्कोप में बनाए गए स्थानीय संस्करण केवल @value द्वारा देखे जा सकते हैं और उसी सूत्र या किसी अन्य code में code के लिए अदृश्य हैं।


<वाक्यविन्यास लैंग = पाठ>
फ्रेड code उदाहरण:
@मान (5 + 4 + 1) # सांख्यिक मान 10 लौटाएं
@ मान (2 और 3) # सांख्यिक मान 23 लौटाएं
@ मान (2 और + 3) # सांख्यिक मान 5 लौटाएं
@ मान (2 और + और 3) # सांख्यिक मान 5 लौटाएं
@ मान (2 + 3) # सांख्यिक मान 5 लौटाएं


@value("5 + 4 + 1")          # Return the numeric value 10
@value("2" & "3")          # Return the numeric value 23
@value("2" & " + 3")          # Return the numeric value 5
@value("2" & "+" & "3")        # Return the numeric value 5
@value("2 + 3")            # Return the numeric value 5
my_var := 3,
my_var := 3,
@ मान (2 + my_var) # सांख्यिक मान 5 लौटाएं
@value("2 + my_var")           # Return the numeric value 5


my_var := -3,
my_var := -3,
@value( 2 + @abs(my_var) ) # सांख्यिक मान 5 लौटाएं
@value("2 + @abs(my_var)")     # Return the numeric value 5


सुरक्षा कारणों से यह एक त्रुटि लौटाएगा क्योंकि @value का दायरा वैश्विक है और @local वैश्विक संदर्भों के लिए अदृश्य है और केवल अपने स्वयं के सूत्र में कोड द्वारा देखा जा सकता है।
यह एक त्रुटि लौटाएगा चूंकि @value का दायरा वैश्विक है और @local वैश्विक संदर्भों के लिए अदृश्य है और एकमात्र अपने स्वयं के सूत्र में code द्वारा देखा जा सकता है।
@ स्थानीय (, बी),
@local(a,b),
:= 1,
:= 1,
:= 2,
:= 2, 
@ मान (+ बी) # एक त्रुटि मान लौटाएं (1 *)
@value("a + b")           # return an error value (1*)


लेकिन अगर और बी फ्रेम @value हैं जो वैश्विक और साथ ही सापेक्ष चर फ्रेम को संदर्भित कर सकते हैं, @value उन्हें देख सकते हैं
परंतु अगर a और b फ्रेम @value हैं जो वैश्विक और साथ ही सापेक्ष चर फ्रेम को संदर्भित कर सकते हैं,
ए := 1,
ख := 2,
@ मान (ए + बी) # संख्यात्मक मान लौटाएं 3


कोड की यह पंक्ति 3 वापस आ जाएगी क्योंकि स्थानीय संस्करण @value दायरे में बनाए और देखे जाते हैं
a := 1,
@value( @local(a,b),a:=1,b:=2,a+b ) # सांख्यिक मान लौटाएं 3
b := 2,
@value("a + b")            # Return the numeric value 3
code की यह पंक्ति 3 वापस आ जाएगी चूंकि स्थानीय संस्करण @value दायरे में बनाए और देखे जाते हैं
@value("@local(a,b),a:=1,b:=2,a+b") # Return the numeric value 3


लेकिन कोड की अगली दो पंक्तियाँ एक अपरिभाषित संदर्भ त्रुटि लौटाएंगी क्योंकि a और b स्थानीय @value स्कोप में बनाए गए हैं और सूत्र के बाकी कोड के लिए अदृश्य हैं, वास्तव में किसी भी कोड के लिए कहीं भी लेकिन इस @value स्कोप में।
परंतु code की अगली दो पंक्तियाँ एक अपरिभाषित संदर्भ त्रुटि लौटाएंगी चूंकि a और b स्थानीय @value स्कोप में बनाए गए हैं और सूत्र के बाकी कोड के लिए अदृश्य हैं, वास्तव में किसी भी code के लिए कहीं भी परंतु इस @value स्कोप में।
@ मान (@ स्थानीय (, बी), : = 1, बी: = 2),
@ मान (@ स्थानीय (a, b), a: = 1, b: = 2),
a+b # एक अपरिभाषित संदर्भ त्रुटि लौटाता है
a+b # एक अपरिभाषित संदर्भ त्रुटि लौटाता है


@ मान ( {12/12/2012} , 16) # 12 दिसंबर, 2012 को स्ट्रिंग लौटाएं
@value("{12/12/2012}",16) # स्ट्रिंग "12 दिसंबर, 2012"


@value( @fileload(@inputline( Enter Drive letter , & @item1 & ) & & :\myfile.txt ) ) # जहां @item1 को पैरामीटर c प्राप्त हुआ है,
@value("@fileload(@inputline(""Enter drive letter"",""" & @item1 & """) & " & """:\myfile.txt"")") # where @item1 is received parameter "c",
</वाक्यविन्यास हाइलाइट>
स्ट्रिंग भागों को निष्पादित करेगा, नीचे स्ट्रिंग का निर्माण करेगा, और इसे @inputline से शुरू होने वाले प्रोग्राम के रूप में निष्पादित करेगा जो उपयोगकर्ता इनपुट का अनुरोध करता है, C का सुझाव देता है,
यदि उपयोगकर्ता सी दर्ज करता है @fileload इसके पैरामीटर के रूप में स्ट्रिंग c:\myfile.txt के साथ चलता है:
<वाक्यविन्यास लैंग = पाठ>
@fileload(@inputline( ड्राइव लेटर दर्ज करें , c ) & :\myfile.txt ) # डेस्कटॉप पर myfile.txt लोड करता है
</वाक्यविन्यास हाइलाइट>


=== बेसिक ===
=== बेसिक ===


==== असली बुनियादी ====
==== असली बुनियादी ====
[[वास्तविक बुनियादी प्रोग्रामिंग भाषा]] में, RBScript नामक एक क्लास होती है जो रनटाइम पर REALबेसिक कोड को निष्पादित कर सकती है। RBScript बहुत सैंडबॉक्स है—केवल सबसे मुख्य भाषा विशेषताएँ हैं, और आपको इसे उन चीज़ों तक पहुँच की अनुमति देनी होगी जो आप इसे रखना चाहते हैं। आप वैकल्पिक रूप से संदर्भ संपत्ति के लिए एक वस्तु आवंटित कर सकते हैं। यह [[आरबीस्क्रिप्ट]] में कोड को फ़ंक्शन कॉल करने और संदर्भ वस्तु के गुणों का उपयोग करने की अनुमति देता है। हालाँकि, यह अभी भी केवल सबसे बुनियादी प्रकारों को समझने तक ही सीमित है, इसलिए यदि आपके पास कोई ऐसा फ़ंक्शन है जो एक शब्दकोश या MySpiffyObject देता है, तो RBScript इसका उपयोग करने में असमर्थ होगा। आप प्रिंट और इनपुट इवेंट्स के माध्यम से अपने आरबीस्क्रिप्ट के साथ भी संवाद कर सकते हैं।
[[Index.php?title=रीयलबेसिक|रीयलबेसिक]] में, आरबीस्क्रिप्ट नामक एक वर्ग है जो रनटाइम पर रीयलबेसिक code निष्पादित कर सकता है। आरबीस्क्रिप्ट सैंडबॉक्स है— उसमें एकमात्र मुख्य भाषा विशेषताएँ हैं, और इसे उन चीज़ों तक पहुँचने की अनुमति देनी होगी जो इसे रखना चाहते हैं। वैकल्पिक रूप से संदर्भ संपत्ति के लिए एक वस्तु आवंटित कर सकते हैं। यह [[आरबीस्क्रिप्ट]] में code को फ़ंक्शन कॉल करने और संदर्भ वस्तु के गुणों का उपयोग करने की अनुमति देता है। चूंकि, यह अभी भी एकमात्र सबसे बुनियादी प्रकारों को समझने तक ही सीमित है, इसलिए यदि आपके पास कोई ऐसा फ़ंक्शन है जो एक शब्दकोश या माइ स्पिफी ऑब्जेक्ट देता है, तो आरबी स्क्रिप्ट इसका उपयोग करने में असमर्थ होगा। प्रिंट और इनपुट इवेंट्स के माध्यम से अपने आरबी स्क्रिप्ट के साथ भी संवाद कर सकते हैं।


==== वीबीस्क्रिप्ट ====
==== वीबीस्क्रिप्ट ====
Microsoft की VBScript, जो एक व्याख्या की गई भाषा है, के दो निर्माण हैं। <code>Eval</code> एक फ़ंक्शन मूल्यांकनकर्ता है जो उपयोगकर्ता परिभाषित कार्यों के लिए कॉल शामिल कर सकता है। (इन कार्यों के दुष्प्रभाव हो सकते हैं जैसे कि वैश्विक चर के मूल्यों को बदलना।) <code>Execute</code> एक या एक से अधिक कोलन-पृथक कथन निष्पादित करता है, जो वैश्विक स्थिति को बदल सकता है।
माइक्रोसॉफ्ट की वीबीस्क्रिप्ट, जो एक व्याख्या की गई भाषा है, के दो निर्माण हैं। eval एक फ़ंक्शन मूल्यांकनकर्ता है जो उपयोगकर्ता-परिभाषित कार्यों के लिए कॉल सम्मलित कर सकता है। (इन कार्यों के दुष्प्रभाव हो सकते हैं जैसे कि वैश्विक चर के मूल्यों को बदलना।) निष्पादन एक या एक से अधिक कोलन-पृथक विवरणों को निष्पादित करता है, जो वैश्विक स्थिति को बदल सकता है।


वीबीस्क्रिप्ट और जेस्क्रिप्ट दोनों <code>eval</code> माइक्रोसॉफ्ट स्क्रिप्ट कंट्रोल नामक ActiveX नियंत्रण के माध्यम से संकलित विंडोज़ अनुप्रयोगों के डेवलपर्स के लिए उपलब्ध हैं (उन भाषाओं में लिखे गए हैं जो इवल का समर्थन नहीं करते हैं), जिनकी इवल विधि को एप्लिकेशन कोड द्वारा कॉल किया जा सकता है। यूज़र-डिफ़ाइंड फ़ंक्शंस की कॉलिंग का समर्थन करने के लिए, पहले एडकोड विधि के साथ नियंत्रण को इनिशियलाइज़ करना चाहिए, जो एक स्ट्रिंग (या एक स्ट्रिंग संसाधन) को लोड करता है, जिसमें किसी की पसंद की भाषा में परिभाषित यूज़र-डिफ़ाइंड फ़ंक्शंस की लाइब्रेरी होती है, इवल को कॉल करने से पहले .
वीबीस्क्रिप्ट और जेस्क्रिप्ट<code>eval</code>दोनों संकलित विंडोज़ अनुप्रयोगों के डेवलपर्स के लिए उपलब्ध हैं (उन भाषाओं में लिखे गए हैं जो eval का समर्थन नहीं करते हैं) एक एक्टिवेक्स नियंत्रण के माध्यम से माइक्रोसॉफ्ट स्क्रिप्ट नियंत्रण कहा जाता है, जिनकी eval विधि को एप्लिकेशन code द्वारा कॉल किया जा सकता है। यूज़र-डिफ़ाइंड फ़ंक्शंस की कॉलिंग का समर्थन करने के लिए, पहले एडकोड विधि के साथ नियंत्रण को इनिशियलाइज़ करना चाहिए, जो एक स्ट्रिंग (या एक स्ट्रिंग संसाधन) को लोड करता है, जिसमें किसी की पसंद की भाषा में परिभाषित यूज़र-डिफ़ाइंड फ़ंक्शंस की लाइब्रेरी होती है, eval को कॉल करने से पहले .


====[[अनुप्रयोगों के लिए विजुअल बेसिक]] ====
====[[अनुप्रयोगों के लिए विजुअल बेसिक]] ====
Microsoft Office की प्रोग्रामिंग भाषा, Visual Basic for Applications (VBA), एक वर्चुअल मशीन भाषा है जहाँ रनटाइम वातावरण [[बाइट कोड]] | पी-कोड को संकलित और चलाता है। इवल का इसका स्वाद केवल अभिव्यक्ति मूल्यांकन का समर्थन करता है, जहां अभिव्यक्ति में उपयोगकर्ता-परिभाषित फ़ंक्शन और ऑब्जेक्ट शामिल हो सकते हैं (लेकिन उपयोगकर्ता-परिभाषित चर नाम नहीं)। ध्यान दें, मूल्यांकनकर्ता VBS से अलग है, और कुछ उपयोगकर्ता परिभाषित कार्यों का आह्वान VBA में VBScript में समान कोड की तुलना में अलग तरह से काम कर सकता है।
अनुप्रयोगों के लिए विजुअल बेसिक (वीबीए), माइक्रोसॉफ्ट ऑफिस की प्रोग्रामिंग भाषा, एक वर्चुअल मशीन भाषा है जहाँ रनटाइम पर्यावरण [[बाइट कोड]] को संकलित करता है और चलाता है। इवल इसका एकमात्र अभिव्यक्ति मूल्यांकन का समर्थन करता है, जहां अभिव्यक्ति में उपयोगकर्ता-परिभाषित फ़ंक्शन और ऑब्जेक्ट सम्मलित हो सकते हैं (परंतु उपयोगकर्ता-परिभाषित चर नाम नहीं)। मूल्यांकनकर्ता वीबीएस से अलग है, और कुछ उपयोगकर्ता परिभाषित कार्यों का आह्वान वीबीएस में वीबीस्क्रिप्ट में समान code की तुलना में अलग तरह से काम कर सकता है।


=== स्मॉलटॉक ===
=== स्मॉलटॉक ===
चूंकि स्मॉलटाक के कंपाइलर वर्ग मानक क्लास लाइब्रेरी का हिस्सा हैं और आमतौर पर रन टाइम पर मौजूद होते हैं, इन्हें कोड स्ट्रिंग का मूल्यांकन करने के लिए इस्तेमाल किया जा सकता है।
चूंकि स्मॉलटाक के कंपाइलर वर्ग मानक क्लास लाइब्रेरी का भाग हैं और सामान्यतः रन टाइम पर उपस्थित होते हैं, इन्हें code स्ट्रिंग का मूल्यांकन करने के लिए उपयोग किया जा सकता है।
<वाक्यविन्यास लैंग = स्मॉलटॉक>
Compiler evaluate:'1 + 2'
संकलक मूल्यांकन:'1 + 2'
 
</वाक्यविन्यास हाइलाइट>
चूंकि क्लास और मेथड की परिभाषाएँ मैसेज-सेंड्स (क्लास ऑब्जेक्ट्स) द्वारा भी लागू की जाती हैं, यहाँ तक कि code परिवर्तन भी संभव हैं: Compiler evaluate:'Object subclass:#Foo'
क्योंकि क्लास और मेथड की परिभाषाएँ मैसेज-सेंड्स (क्लास ऑब्जेक्ट्स) द्वारा भी लागू की जाती हैं, यहाँ तक कि कोड परिवर्तन भी संभव हैं:
<वाक्यविन्यास लैंग = स्मॉलटॉक>
कंपाइलर मूल्यांकन: 'ऑब्जेक्ट सबक्लास: # फू'
</वाक्यविन्यास हाइलाइट>


=== [[टीसीएल]] ===
=== [[टीसीएल]] ===
टीसीएल प्रोग्रामिंग भाषा में एक कमांड कहा जाता है <code>eval</code>, जो एक तर्क के रूप में प्रदान किए गए स्रोत कोड को निष्पादित करता है। Tcl स्ट्रिंग्स के रूप में सभी स्रोत कोड का प्रतिनिधित्व करता है, जिसमें घुंघराले ब्रेसिज़ उद्धरण चिह्नों के रूप में कार्य करते हैं, ताकि तर्क को <code>eval</code> किसी अन्य स्रोत कोड के समान स्वरूपण हो सकता है।
टीसीएल प्रोग्रामिंग लैंग्वेज में एक कमांड है जिसे eval कहा जाता है, जो एक तर्क के रूप में प्रदान किए गए स्रोत code को निष्पादित करता है। टीसीएल स्ट्रिंग के रूप में सभी स्रोत code का प्रतिनिधित्व करता है, घुंघराले ब्रेसिज़ उद्धरण चिह्नों के रूप में कार्य करता है, ताकि eval के तर्क में किसी अन्य स्रोत code के समान स्वरूपण हो सके।


<वाक्यविन्यास प्रकाश लैंग = टीसीएल>
set foo {
सेट फू {
while {[incr i]<10} {
जबकि {[incr i]<10} {
puts "$i squared is [expr $i*$i]"
पुट $i का वर्ग है [expr $i*$i]
}
}
}
}
eval $foo
eval $foo
</वाक्यविन्यास हाइलाइट>


=== बीएस ===
=== बीएस ===
bs (प्रोग्रामिंग लैंग्वेज) में एक है <code>eval</code> फ़ंक्शन जो एक स्ट्रिंग तर्क लेता है। फ़ंक्शन अभिव्यक्ति मूल्यांकनकर्ता और कथन निष्पादक दोनों है। बाद की भूमिका में, इसका उपयोग त्रुटि से निपटने के लिए भी किया जा सकता है। निम्नलिखित उदाहरण और पाठ से हैं <code>bs</code> [[मैन पेज]] जैसा कि UNIX सिस्टम V रिलीज़ 3.2 प्रोग्रामर मैनुअल में दिखाई देता है।<ref name=SVR32>{{cite book
बीएस में एक eval फ़ंक्शन है जो एक स्ट्रिंग तर्क लेता है। फ़ंक्शन अभिव्यक्ति मूल्यांकनकर्ता और कथन निष्पादक दोनों है। बाद की भूमिका में, इसका उपयोग त्रुटि से निपटने के लिए भी किया जा सकता है। निम्नलिखित उदाहरण और पाठ बीएस [[मैन पेज]] जैसा कि यूनिक्स सिस्टम वी रिलीज 3.2 प्रोग्रामर मैनुअल में दिखाई देता है।<ref name=SVR32>{{cite book
   |title = UNIX Programmer's Manual
   |title = UNIX Programmer's Manual
   |section = Volume 1 Commands and Utilities
   |section = Volume 1 Commands and Utilities
Line 367: Line 322:


{{Quote
{{Quote
|text=The string argument is evaluated as a <code>bs</code> expression. The function is handy for converting numeric strings to numeric internal form. The <code>eval</code> can also be used as a crude form of indirection, as in the following (Note that, in <code>bs</code>, <code>_</code> (underscore) is the concatenation operator.):
|text=स्ट्रिंग तर्क का मूल्यांकन <code>bs</code> व्यंजक के रूप में किया जाता है। फ़ंक्शन संख्यात्मक स्ट्रिंग्स को संख्यात्मक आंतरिक रूप में परिवर्तित करने के लिए आसान है। <code> eval </ code> का उपयोग संकेत के कच्चे रूप के रूप में भी किया जा सकता है, जैसा कि निम्नलिखित में है (ध्यान दें कि, <code>bs</code> में, code>_</code> (अंडरस्कोर) है संयोजन संचालिका।):
<syntaxhighlight lang="bash">
<वाक्यविन्यास लैंग = "bs">
name = "xyz"
नाम = "xyz"
eval("++" _ name)
eval ("++" _ नाम)
</syntaxhighlight>
</वाक्यविन्यास हाइलाइट>
which increments the variable <code>xyz</code>.
जो चर को बढ़ाता है <code>xyz</code>.


In addition, <code>eval</code> preceded by the interrogation operator, <code>?</code>, permits the user to control <code>bs</code> error conditions. For example:
इसके अतिरिक्त, <code>eval</code> पूछताछ ऑपरेटर, <code>?</code> से पहले, उपयोगकर्ता को <code>bs</code> त्रुटि स्थितियों को नियंत्रित करने की अनुमति देता है।
<syntaxhighlight lang="bash">
उदाहरण के लिए:
?eval("open(\"X\", \"XXX\", \"r\")")
<वाक्यविन्यास लैंग = "bs">
</syntaxhighlight>
? eval("open(\"X\", \"XXX\", \"r\")")
returns the value zero if there is no file named "XXX" (instead
</वाक्यविन्यास हाइलाइट>
of halting the user's program).
यदि "XXX" नाम की कोई फ़ाइल नहीं है, तो मान शून्य लौटाता है (इसके अतिरिक्त
उपयोगकर्ता के कार्यक्रम को रोकने के)


The following executes a <code>goto</code> to the label <code>L</code> (if it exists):
निम्नलिखित <code>गोटो</code> को <code>L</code> लेबल पर निष्पादित करता है (यदि यह उपस्थित है):
<syntaxhighlight lang="bash">
<वाक्यविन्यास लैंग = "bs">
label = "L"
label = "L"
if !(?eval("goto " _ label)) puterr = "no label"
if !(?eval("goto " _ label)) puterr = "no label"
</syntaxhighlight>
</वाक्यविन्यास हाइलाइट>
}}
}}


Line 392: Line 348:


=== यूनिक्स गोले ===
=== यूनिक्स गोले ===
मूल श ([[बॉर्न शेल]]) सहित सभी [[यूनिक्स खोल]] में eval कमांड मौजूद है। यह रिक्त स्थान के साथ सभी तर्कों को जोड़ता है, फिर परिणाम को फिर से पार्स करता है और परिणाम को कमांड के रूप में निष्पादित करता है। {{man|1|sh|FreeBSD}}
मूल श ([[बॉर्न शेल]]) सहित सभी [[Index.php?title=यूनिक्स शेल|यूनिक्स शेल]] में eval कमांड उपस्थित है। यह रिक्त स्थान के साथ सभी तर्कों को जोड़ता है, फिर परिणाम को पार्स करता है और परिणाम को कमांड के रूप में निष्पादित करता है। {{man|1|sh|FreeBSD}}




=== [[विंडोज पॉवरशेल]] ===
=== [[विंडोज पॉवरशेल]] ===
Windows PowerShell में, <code>Invoke-Expression</code> Cmdlet जावास्क्रिप्ट, PHP और पायथन जैसी प्रोग्रामिंग भाषाओं में eval फ़ंक्शन के समान उद्देश्य को पूरा करता है।
विंडोज पॉवरशेल में, इनवोक-एक्सप्रेशन सीएमडीलेट जावास्क्रिप्ट, पीएचपी और पायथन जैसी प्रोग्रामिंग भाषाओं में eval फ़ंक्शन के समान उद्देश्य को पूरा करता है।
Cmdlet किसी भी Windows PowerShell अभिव्यक्ति को चलाता है जो स्ट्रिंग के रूप में कमांड पैरामीटर के रूप में प्रदान किया जाता है और निर्दिष्ट अभिव्यक्ति के परिणाम को आउटपुट करता है।
सीएमडीलेट किसी भी विंडोज़ पावर शेल अभिव्यक्ति को चलाता है जो स्ट्रिंग के रूप में कमांड पैरामीटर के रूप में प्रदान किया जाता है और निर्दिष्ट अभिव्यक्ति के परिणाम को आउटपुट करता है।
आमतौर पर, Cmdlet का आउटपुट उसी प्रकार का होता है, जैसा एक्सप्रेशन को निष्पादित करने के परिणाम के रूप में होता है। हालाँकि, यदि परिणाम एक खाली सरणी है, तो यह आउटपुट करता है <code>$null</code>. यदि परिणाम एकल-तत्व सरणी है, तो यह उस एकल तत्व को आउटपुट करता है। जावास्क्रिप्ट के समान, Windows PowerShell अंतिम अर्धविराम को छोड़े जाने की अनुमति देता है।
सामान्यतः,सीएम डीलेट का आउटपुट उसी प्रकार का होता है, जैसा एक्सप्रेशन को निष्पादित करने के परिणाम के रूप में होता है। चूंकि, यदि परिणाम एक खाली सरणी है, तो यह<code>$null</code>आउटपुट करता है. यदि परिणाम एकल-तत्व सरणी है, तो यह उस एकल तत्व को आउटपुट करता है। जावास्क्रिप्ट के समान, विंडोज़ पावरशेल अंतिम अर्धविराम को छोड़े जाने की अनुमति देता है।


अभिव्यक्ति मूल्यांकनकर्ता के रूप में उदाहरण:
अभिव्यक्ति मूल्यांकनकर्ता के रूप में उदाहरण: PS > $foo = 2
<वाक्यविन्यास प्रकाश लैंग = ps1con>
 
पीएस> $ फू = 2
PS > invoke-expression '$foo + 2' एक निष्पादक के रूप में उदाहरण:
पीएस> इनवोक-एक्सप्रेशन '$ फू + 2'
</वाक्यविन्यास हाइलाइट>
PS > $foo = 2
एक बयान निष्पादक के रूप में उदाहरण:
PS > invoke-expression '$foo += 2; $foo'
<वाक्यविन्यास प्रकाश लैंग = ps1con>
पीएस> $ फू = 2
पीएस> इनवोक-एक्सप्रेशन '$ फू + = 2; $फू'
</वाक्यविन्यास हाइलाइट>


== [[माइक्रोकोड]] ==
== [[माइक्रोकोड]] ==
1966 में [[आईबीएम]] [[संवादी प्रोग्रामिंग प्रणाली]] (सीपीएस) ने एक माइक्रोकोड फ़ंक्शन पेश किया <code>EVAL</code> एक संशोधित [[पोलिश संकेतन]] में लिखी गई अभिव्यक्तियों का व्याख्यात्मक मूल्यांकन करने के लिए | IBM सिस्टम/360 मॉडल 50 पर पोलिश-स्ट्रिंग संकेतन।<ref>{{cite web|last1=Allen-Babcock|title=Draft EVAL Microprogram|url=http://bitsavers.trailing-edge.com/pdf/allen-babcock/cps/Draft_Eval_Microprogram_Mar66.pdf|website=Bitsavers.org|access-date=Jan 17, 2016}}</ref> [[असाइनमेंट (कंप्यूटर विज्ञान)]] स्टेटमेंट की व्याख्या करने वाले प्रोग्राम की तुलना में इस फ़ंक्शन को माइक्रोकोडिंग पांच गुना तेजी से किया गया था।<ref>{{cite web|last1=Rochester|first1=Nathaniel|title=Conversational Programming System Progress Report|url=http://bitsavers.trailing-edge.com/pdf/allen-babcock/cps/CPS_Progress_Report_may66.pdf|website=Bitsavers.org|access-date=Jan 17, 2016}}</ref>
1966 में [[आईबीएम]] [[संवादी प्रोग्रामिंग प्रणाली]] (सीपीएस) ने एक आईबीएम सिस्टम/360 मॉडल 50 पर "संशोधित [[Index.php?title=पोलिश स्ट्रिंग|पोलिश स्ट्रिंग]] में लिखी गई अभिव्यक्तियों का व्याख्यात्मक मूल्यांकन करने के लिए एक माइक्रोप्रोग्राम्ड फ़ंक्शन eval पेश किया।।<ref>{{cite web|last1=Allen-Babcock|title=Draft EVAL Microprogram|url=http://bitsavers.trailing-edge.com/pdf/allen-babcock/cps/Draft_Eval_Microprogram_Mar66.pdf|website=Bitsavers.org|access-date=Jan 17, 2016}}</ref> [[Index.php?title=असाइनमेंट|असाइनमेंट]] स्टेटमेंट की व्याख्या करने वाले प्रोग्राम की तुलना में इस फ़ंक्शन को माइक्रोकोडिंग पांच गुना तेजी से किया गया था।<ref>{{cite web|last1=Rochester|first1=Nathaniel|title=Conversational Programming System Progress Report|url=http://bitsavers.trailing-edge.com/pdf/allen-babcock/cps/CPS_Progress_Report_may66.pdf|website=Bitsavers.org|access-date=Jan 17, 2016}}</ref>




== सिद्धांत ==
== सिद्धांत ==
[[सैद्धांतिक कंप्यूटर विज्ञान]] में, आमतौर पर eval और apply के बीच सावधानीपूर्वक भेद किया जाता है। एवल को एक उद्धृत स्ट्रिंग को एक कॉल करने योग्य फ़ंक्शन और उसके तर्कों में परिवर्तित करने का चरण समझा जाता है, जबकि लागू तर्कों के दिए गए सेट के साथ फ़ंक्शन की वास्तविक कॉल है। भेद विशेष रूप से [[कार्यात्मक भाषा]]ओं में ध्यान देने योग्य है, और लैम्ब्डा कैलकुस पर आधारित भाषाएं, जैसे कि एलआईएसपी और योजना (प्रोग्रामिंग भाषा)। इस प्रकार, उदाहरण के लिए, योजना में, के बीच का अंतर है
[[सैद्धांतिक कंप्यूटर विज्ञान]] में, सामान्यतः eval और अप्लाइ के बीच सावधानीपूर्वक भेद किया जाता है। एवल को एक उद्धृत स्ट्रिंग को एक कॉल करने योग्य फ़ंक्शन और उसके तर्कों में परिवर्तित करने का चरण समझा जाता है, जबकि प्रयुक्त तर्कों के दिए गए सेट के साथ फ़ंक्शन की वास्तविक कॉल है। भेद विशेष रूप से [[Index.php?title=कार्यात्मक भाषाओं|कार्यात्मक भाषाओं]] में ध्यान देने योग्य है, और लैम्ब्डा कैलकुस पर आधारित भाषाएं, जैसे कि एलआईएसपी और योजना इस प्रकार, उदाहरण के लिए, योजना में, एक बीच का अंतर है।


<syntaxhighlight lang= lisp >(eval '(f x) )</syntaxhighlight>
<syntaxhighlight lang= lisp >(eval '(f x) )</syntaxhighlight>


जहां फॉर्म (एफ एक्स) का मूल्यांकन किया जाना है, और
जहां फॉर्म (f x) का मूल्यांकन किया जाना है, और


<syntaxhighlight lang= lisp>(लागू करें f (सूची x))</syntaxhighlight>
<syntaxhighlight lang="lisp">(apply f (list x))</syntaxhighlight>


जहां फ़ंक्शन f को तर्क x के साथ कॉल किया जाना है।
जहां फ़ंक्शन f को तर्क x के साथ कॉल किया जाना है।


मूल्यांकन और लागू, मूल्यांकन-लागू चक्र के दो अन्योन्याश्रित घटक हैं, जो [[कंप्यूटर प्रोग्राम की संरचना और व्याख्या]] में वर्णित [[लिस्प]] के मूल्यांकन का सार है।<ref>[http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-26.html The Metacircular Evaluator] (SICP Section 4.1)</ref>
मूल्यांकन और लागू, मूल्यांकन-लागू चक्र के दो अन्योन्याश्रित घटक हैं, जो [[कंप्यूटर प्रोग्राम की संरचना और व्याख्या]] में वर्णित [[लिस्प]] के मूल्यांकन का सार है।<ref>[http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-26.html The Metacircular Evaluator] (SICP Section 4.1)</ref>
[[श्रेणी सिद्धांत]] में, बंद मोनॉइडल श्रेणी को परिभाषित करने के लिए eval [[morphism]] का उपयोग किया जाता है। इस प्रकार, उदाहरण के लिए, आकारिकी के रूप में लिए गए कार्यों के साथ [[सेट की श्रेणी]], और कार्टेशियन उत्पाद को [[उत्पाद (श्रेणी सिद्धांत)]] के रूप में लिया जाता है, एक [[कार्टेशियन बंद श्रेणी]] बनाता है। यहां, eval (या, ठीक से बोलना, लागू करना) अपने दाहिने आसन्न के साथ, [[करी]], सरल रूप से टाइप किए गए लैम्ब्डा कैलकुलस का निर्माण करते हैं, जिसे कार्टेशियन बंद श्रेणियों के morphisms के रूप में व्याख्या किया जा सकता है।
[[श्रेणी सिद्धांत]] में, बंद मोनॉइडल श्रेणी को परिभाषित करने के लिए इवल [[Index.php?title=आकारिता|आकारिता]] का उपयोग किया जाता है। इस प्रकार, उदाहरण के लिए, आकारिकी के रूप में लिए गए कार्यों के साथ [[सेट की श्रेणी]], और कार्टेशियन उत्पाद को [[उत्पाद (श्रेणी सिद्धांत)]] के रूप में लिया जाता है, एक [[कार्टेशियन बंद श्रेणी]] बनाता है। यहां, eval (या, ठीक से बोलना, लागू करना) अपने दाहिने आसन्न के साथ, [[Index.php?title=मिलकर|मिलकर]], सरल रूप से टाइप किए गए लैम्ब्डा कैलकुलस का निर्माण करते हैं, जिसे कार्टेशियन बंद श्रेणियों के आकारिता के रूप में व्याख्या किया जा सकता है।


==संदर्भ==
==संदर्भ==
Line 438: Line 390:
*[http://www.nilobject.com/?p=138 Jonathan Johnson on exposing classes to RBScript]
*[http://www.nilobject.com/?p=138 Jonathan Johnson on exposing classes to RBScript]
*[https://rosettacode.org/wiki/Runtime_evaluation Examples of runtime evaluation in several languages] on [[Rosetta Code]]
*[https://rosettacode.org/wiki/Runtime_evaluation Examples of runtime evaluation in several languages] on [[Rosetta Code]]
[[Category: बहाव को काबू करें]] [[Category: यूनिक्स SUS2008 उपयोगिताओं]] [[Category: IBM i Qshell कमांड]]


[[Category: Machine Translated Page]]
[[Category:All articles with unsourced statements]]
[[Category:Articles with invalid date parameter in template]]
[[Category:Articles with unsourced statements from November 2021]]
[[Category:Created On 17/02/2023]]
[[Category:Created On 17/02/2023]]
[[Category:IBM i Qshell कमांड]]
[[Category:Lua-based templates]]
[[Category:Machine Translated Page]]
[[Category:Pages with script errors]]
[[Category:Short description with empty Wikidata description]]
[[Category:Template documentation pages|Short description/doc]]
[[Category:Templates Vigyan Ready]]
[[Category:Templates that add a tracking category]]
[[Category:Templates that generate short descriptions]]
[[Category:Templates using TemplateData]]

Latest revision as of 17:00, 1 May 2023

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

eval और अप्लाई मेटा-सर्कुलर मूल्यांकनकर्ताओं के उदाहरण हैं, एक भाषा के व्याख्याकार जिन्हें भाषा के अन्दर ही लागू किया जा सकता है।[citation needed]


सुरक्षा जोखिम

अविश्वसनीय स्रोत से डेटा के साथ eval का उपयोग करने से सुरक्षा में भेद्यता आ सकती है। उदाहरण के लिए, यह मानते हुए कि get_data() फ़ंक्शन इंटरनेट से डेटा प्राप्त करता है, यह पायथन code असुरक्षित है:

session['authenticated'] = False

data = get_data()

foo = eval(data)

एक अटैकर डेटा के रूप में "session.update(authenticated=True)" स्ट्रिंग के साथ प्रोग्राम की आपूर्ति कर सकता है, जो एक प्रामाणिक कुंजी को सही होने के लिए सेट करने के लिए सत्र शब्दकोश को अपडेट करेगा। इसका समाधान करने के लिए, eval के साथ उपयोग किए जाने वाले सभी डेटो से बचा जाना चाहिए, या इसे संभावित रूप से हानिकारक कार्यों तक पहुंचे बिना चलाया जाना चाहिए।

कार्यान्वयन

व्याख्या की गई भाषाओं में, eval लगभग हमेशा उसी दुभाषिया के साथ सामान्य code के रूप में कार्यान्वित किया जाता है। संकलित भाषाओं में, प्रोग्राम को संकलित करने के लिए उपयोग किए जाने वाले एक ही कंपाइलर को eval फ़ंक्शन का उपयोग करके प्रोग्राम में एम्बेड किया जा सकता है; अलग दुभाषियों का कभी-कभी उपयोग किया जाता है, चूंकि इसके परिणामस्वरूप code दोहराव होता है।

प्रोग्रामिंग लैंग्वेज

ईसीएमएस्क्रिप्ट

जावास्क्रिप्ट

जावास्क्रिप्ट में,eval एक अभिव्यक्ति मूल्यांकनकर्ता और एक स्टेट्मन्ट निष्पादक के बीच एक संकर है। यह मूल्यांकन की गई अंतिम अभिव्यक्ति का परिणाम देता है।

अभिव्यक्ति मूल्यांकनकर्ता के रूप में उदाहरण:

foo = 2; alert(eval('foo + 2'));

एक स्टेट्मन्ट निष्पादक के रूप में उदाहरण:

foo = 2; eval('foo = foo + 2;alert(foo);');

जावास्क्रिप्ट का एक प्रयोगevalजेसन टेक्स्ट को पार्स करना है, संभवतया अजाक्स ढांचे के भाग के रूप में। चूंकि, आधुनिक ब्राउज़र इस कार्य के लिए अधिक सुरक्षित विकल्प के रूप में जेसन.पार्स प्रदान करते हैं।

एक्शन स्क्रिप्ट

एक्शन स्क्रिप्ट (फ्लैश की प्रोग्रामिंग भाषा) में,evalमनमाने अभिव्यक्तियों का मूल्यांकन करने के लिए उपयोग नहीं किया जा सकता है। फ्लैश 8 प्रलेखन के अनुसार, इसका उपयोग उन भावों तक सीमित है जो पुनर्प्राप्त करने के लिए एक चर, संपत्ति, वस्तु या मूवी क्लिप के नाम का प्रतिनिधित्व करते हैं। यह पैरामीटर या तो स्ट्रिंग या ऑब्जेक्ट इंस्टेंस का सीधा संदर्भ हो सकता है।[1]

एक्शन स्क्रिप्ट 3evalका समर्थन नहीं करता है।

एक्शन स्क्रिप्ट 3 eval लाइब्रेरी[2] और डी.एवल एपीआई[3] समकक्ष बनाने के लिए विकास परियोजनाएं थीevalएक्शन स्क्रिप्ट 3 में। दोनों समाप्त हो गए हैं, चूंकि एडोब फ्लैश प्लेयर अपने जीवन के अंत तक पहुंच गया है।

लिस्प

लिस्प 1958 में एक eval फ़ंक्शन का उपयोग करने वाली मूल भाषा थी। वास्तव में, eval फ़ंक्शन की परिभाषा के कारण भाषा दुभाषिया का पहला कार्यान्वयन का नेतृत्व किया।[4] eval फ़ंक्शन को परिभाषित करने से पहले, लिस्प फ़ंक्शंस को असेंबली लैंग्वेज स्टेटमेंट्स में मैन्युअल रूप से संकलित किया गया था। चूंकि, एक बार eval फ़ंक्शन को नियम रूप मे संकलित कर लेने के बाद इसे एक साधारण रीड-इवल-प्रिंट लूप भाग के रूप में उपयोग किया गया था, जिसने पहले लिस्प दुभाषिया का आधार बनाया था।

लिस्प eval फ़ंक्शन के बाद के संस्करणों को भी कंपाइलर के रूप में उपयोग किया गया है। लिस्प में eval फ़ंक्शन एक फॉर्म के मूल्यांकन और तर्क के रूप में निष्पादित होने की अपेक्षा करता है। दिए गए फॉर्म का रिटर्न वैल्यू कॉल टू eval का रिटर्न वैल्यू होगा।यह एक उदाहरण लिस्प code है:

<वाक्यविन्यास प्रकाश लैंग = लिस्प>

एक फॉर्म जो + फ़ंक्शन को 1,2 और 3 के साथ तर्क के रूप में कॉल करता है।
यह 6 लौटाता है।

(+ 1 2 3)

लिस्प में किसी भी रूप का मूल्यांकन किया जाना है, इसलिए
+ को कॉल किया गया था।
हम लिस्प को मूल्यांकन करने से रोक सकते हैं
उदाहरण के लिए ' के साथ उपसर्ग करके एक फॉर्म का

(सेट फॉर्म1 '(+ 1 2 3))

जब फॉर्म 1 में एक फॉर्म होता है जिसका उपयोग eval द्वारा किया जा सकता है
उदाहरण

(eval फॉर्म 1)

eval मूल्यांकन (+ 1 2 3) और 6 लौटा।

</वाक्यविन्यास हाइलाइट>

लिस्प बहुत लचीला होने के लिए जाना जाता है और इसलिए यह eval कार्य है। उदाहरण के लिए, स्ट्रिंग की सामग्री का मूल्यांकन करने के लिए, स्ट्रिंग को रीड-टू-स्ट्रिंग फ़ंक्शन का उपयोग करके पहले लिस्प फॉर्म में परिवर्तित करना होगा और फिर परिणामी फॉर्म को eval पास करना होगा:

(eval (read-from-string "(format t \"Hello World!!!~%\")"))

भ्रम का एक प्रमुख बिंदु प्रश्न है, किस संदर्भ में फॉर्म में प्रतीकों का मूल्यांकन किया जाएगा। उपरोक्त उदाहरण में, फॉर्म 1 में प्रतीक + है। उदाहरण के उद्देश्य के अनुसार कार्य करने के लिए इस प्रतीक के मूल्यांकन को जोड़ने के लिए फ़ंक्शन प्राप्त करना चाहिए। इस प्रकार लिस्प की कुछ बोलियाँ मूल्यांकन के संदर्भ को निर्दिष्ट करने के लिए eval के लिए एक अतिरिक्त पैरामीटर की अनुमति देती हैं (पायथन के eval फ़ंक्शन के वैकल्पिक तर्कों के समान - नीचे देखें)। लिस्प (R5RS और बाद में) की योजना बोली में एक उदाहरण:

<वाक्यविन्यास लैंग = योजना>

उपरोक्त उदाहरण की तरह कुछ सरल रूप को परिभाषित करें।

(define form2 '(+ 5 2)) ;Value: form2

प्रारंभिक संदर्भ में प्रपत्र का मूल्यांकन करें।
मूल्यांकन के लिए एक संदर्भ को स्कीम स्लैंग में पर्यावरण कहा जाता है।

(eval form2 user-initial-environment) ;Value: 7

प्रारंभिक वातावरण को भ्रमित करें, जिससे + होगा
घटाव समारोह के लिए एक नाम।

(environment-define user-initial-environment '+ -) ;Value: +

फॉर्म का फिर से मूल्यांकन करें।
ध्यान दें कि लौटाया गया मान बदल गया है।

(eval form2 user-initial-environment) ;Value: 3

पर्ल

पर्ल में,eval कार्य एक अभिव्यक्ति मूल्यांकनकर्ता और एक विवरण निष्पादक के बीच एक संकर है। यह मूल्यांकन की गई अंतिम अभिव्यक्ति का परिणाम देता है (सभी कथन पर्ल प्रोग्रामिंग में अभिव्यक्ति हैं), और अंतिम अर्धविराम को छोड़े जाने की अनुमति देता है।

अभिव्यक्ति मूल्यांकनकर्ता के रूप में उदाहरण:

$foo = 2;

print eval('$foo + 2'), "\n";

एक विवरण निष्पादक के रूप में उदाहरण:

$foo = 2;

eval('$foo += 2; print "$foo\n";');

पर्ल में eval ब्लॉक भी हैं, जो इसके अपवाद हैंडलिंग तंत्र के रूप में कार्य करता है (अपवाद हैंडलिंग सिंटैक्स#पर्ल देखें)। यह eval के उपरोक्त उपयोग से अलग है जिसमें eval ब्लॉक के अंदर उस code में रन-टाइम के अतिरिक्त संकलन-समय पर व्याख्या की जाती है, इसलिए यह इस लेख में उपयोग किए गए eval का अर्थ नहीं है।

पीएचपी

प्रिंट पीएचपी, eval एक स्ट्रिंग में code को लगभग ठीक उसी तरह निष्पादित करता है जैसे कि इसे कॉल करने के अतिरिक्त फ़ाइल में डाल दिया गया हो। एकमात्र अपवाद यह है कि त्रुटियों को एक कॉल से eval () के रूप में रिपोर्ट किया जाता है, और रिटर्न स्टेटमेंट फ़ंक्शन का परिणाम बन जाता है।

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

कुछ भाषाओं के विपरीत, PHP का eval एक फ़ंक्शन के अतिरिक्त एक "भाषा निर्माण" है,[5] और इसलिए कुछ संदर्भों में इसका उपयोग नहीं किया जा सकता है जहां फ़ंक्शन हो सकते हैं, जैसे उच्च-क्रम के कार्य।

प्रतिध्वनि का उपयोग करने का उदाहरण:

<?php

$foo = "Hello, world!\n";
eval('echo "$foo";');
?>

मान लौटाने का उदाहरण:

<?php

$foo = "Goodbye, world!\n"; //does not work in PHP5
echo eval('return $foo;');
?>

लुआ

लुआ 5.1 में,लोडस्ट्रिंगलुआ code को एक अज्ञात फ़ंक्शन में संकलित करता है।

अभिव्यक्ति मूल्यांकनकर्ता के रूप में उदाहरण: loadstring("print('Hello World!')")()

दो चरणों में मूल्यांकन करने का उदाहरण:

a = 1

f = loadstring("return a + 1") -- compile the expression to an anonymous function
print(f()) -- execute (and print the result '2')

लुआ 5.2 स्थित लोड फ़ंक्शन के पक्ष में लोडस्ट्रिंग को बहिष्कृत करता है, जिसे स्ट्रिंग्स को स्वीकार करने के लिए संवर्धित किया गया है। इसके अतिरिक्त, यह फ़ंक्शन के वातावरण को सीधे प्रदान करने की अनुमति देता है, चूंकि वातावरण अब बंद हो गया है (कंप्यूटर विज्ञान)। load("print('Hello ' .. a)", "", "t", { a = "World!", print = print })()

परिशिष्ट भाग

पोस्ट स्क्रिप्ट का निष्पादन ऑपरेटर एक ऑपरेंड लेता है - यदि यह एक साधारण शाब्दिक है तो यह इसे स्टैक का प्रयोजन है। यदि कोई पोस्टस्क्रिप्ट अभिव्यक्ति वाली स्ट्रिंग लेता है, तो कोई स्ट्रिंग को निष्पादन योग्य में परिवर्तित कर सकता है जिसे दुभाषिया द्वारा निष्पादित किया जा सकता है, उदाहरण के लिए:

<वाक्यविन्यास लैंग = पोस्टस्क्रिप्ट>

 ((Hello World) =) cvx exec

</वाक्यविन्यास हाइलाइट> पोस्टस्क्रिप्ट अभिव्यक्ति को परिवर्तित करता है

<वाक्यविन्यास लैंग = पोस्टस्क्रिप्ट>

 (Hello World) =

</वाक्यविन्यास हाइलाइट> जो स्टैक से हैलो वर्ल्ड स्ट्रिंग को पॉप करता है और इसे निष्पादन योग्य प्रकार के लिए स्क्रीन पर प्रदर्शित करता है, फिर निष्पादित किया जाता है।

पोस्टस्क्रिप्ट run ऑपरेटर कार्यक्षमता में समान है, लेकिन इसके अतिरिक्त दुभाषिया फ़ाइल में ही पोस्टस्क्रिप्ट एक्सप्रेशन की व्याख्या करता है।

<वाक्यविन्यास लैंग = पोस्टस्क्रिप्ट> (file.ps) चलाएँ </वाक्यविन्यास हाइलाइट>

पायथन

पायथन (भाषा) में,evalअपने सरलतम रूप में कार्य एकल अभिव्यक्ति का मूल्यांकन करता है।

evalउदाहरण (इंटरैक्टिव खोल): >>> x = 1

>>> eval('x + 1')
2
>>> eval('x') 1

evale> फ़ंक्शन दो वैकल्पिक तर्क लेता है, वैश्विक और स्थानीय, जो प्रोग्रामर को अभिव्यक्ति के मूल्यांकन के लिए एक प्रतिबंधित वातावरण स्थापित करने की अनुमति देता है। exec ई> विवरण (या exec फ़ंक्शन पायथन 3.x में) विवरणों को निष्पादित करता है:

exec उदाहरण (इंटरैक्टिव खोल):

>>> x = 1

>>> y = 1
>>> exec "x += 1; y -= 1"
>>> x
2
>>> y
0

कथनों/अभिव्यक्तियों के मूल्यांकन के लिए सबसे सामान्य रूप code ऑब्जेक्ट्स का उपयोग कर रहा है। इन्हें आह्वान करके बनाया जा सकता है compile() फ़ंक्शन और यह बताकर कि इसे किस प्रकार के इनपुट को संकलित करना है: aexecविवरण, aevalबयान या aसिंगगलकथन:

कम्पाइल उदाहरण (इंटरैक्टिव खोल):

>>> x = 1

>>> y = 2
>>> eval (compile ("print 'x + y = ', x + y", "compile-sample.py", "single"))
x + y = 3

डी

डी प्रोग्रामिंग एक सांख्यिकीय रूप से संकलित भाषा है और इसलिए इसमें सम्मलित नहीं हैevalपारंपरिक अर्थों में कथन, परंतु इसमें संबंधित "मिक्सिन" कथन सम्मलित है। अंतर यह है कि, जहां "eval" एक स्ट्रिंग को रनटाइम पर code के रूप में व्याख्या करता है, "मिक्सिन" के साथ स्ट्रिंग को सामान्य code की तरह स्थिर रूप से संकलित किया जाता है और संकलन समय पर जाना जाना चाहिए।

उदाहरण के लिए:

<वाक्यविन्यास प्रकाश लैंग = डी> आयात std.stdio;

void main() {

 int num = 0;
 mixin("num++;");
 writeln(num); // Prints 1.

} </वाक्यविन्यास हाइलाइट>

उपरोक्त उदाहरण ठीक उसी असेंबली भाषा के निर्देशों को संकलित करेगा जैसे किnum++;मिश्रित होने के अतिरिक्त सीधे लिखा गया था। मिक्सिन के तर्क को एक स्ट्रिंग शाब्दिक होने की आवश्यकता नहीं है, परंतु मनमाना अभिव्यक्ति जिसके परिणामस्वरूप एक स्ट्रिंग मान होता है, जिसमें फ़ंक्शन कॉल सम्मलित होते हैं, जिनका संकलन समय पर मूल्यांकन किया जा सकता है।

शीत संलयन

कोल्ड फ्यूजन काइवैल्यूएटफ़ंक्शन आपको रनटाइम पर स्ट्रिंग अभिव्यक्ति का मूल्यांकन करने देता है।

<cfset x = "int(1+1)">

<cfset y = Evaluate(x)>

यह विशेष रूप से तब उपयोगी होता है जब आपको उस चर को प्रोग्रामेटिक रूप से चुनने की आवश्यकता होती है जिसे आप पढ़ना चाहते हैं।

रूबी

रूबी प्रोग्रामिंग लैंग्वेज दुभाषिया पायथन या पर्ल के समान एक इवल फ़ंक्शन प्रदान करता है, और एक कार्यक्षेत्र (प्रोग्रामिंग), या बाइंडिंग को भी निर्दिष्ट करने की अनुमति देता है।

किसी फ़ंक्शन के बंधन को निर्दिष्ट करने के अतिरिक्त, eval का उपयोग विशिष्ट वर्ग परिभाषा बाइंडिंग या ऑब्जेक्ट इंस्टेंस बाइंडिंग के अन्दर अभिव्यक्ति का मूल्यांकन करने के लिए भी किया जा सकता है, जिससे स्ट्रिंग्स में निर्दिष्ट नई विधियों के साथ कक्षाओं को विस्तारित किया जा सकता है।

a = 1 eval('a + 1') # (evaluates to 2)
  1. एक संदर्भ के भीतर मूल्यांकन

डेफ गेटबाइंडिंग (ए)

 बंधन

अंत eval('a+1',get_binding(3)) # (4 का मूल्यांकन करता है, चूंकि get_binding के संदर्भ में 'a' 3 है)

फोर्थ

फोर्थ के अधिकांश मानक कार्यान्वयन के दो संस्करण हैं eval: मूल्यांकन और व्याख्या ।

Win32FORTH code उदाहरण: <वाक्यविन्यास लैंग = आगे>

 S" 2 2 + ." EVALUATE \ Outputs "4"

</वाक्यविन्यास हाइलाइट>

फ्रेड

फ्रेमवर्क एफआरईडी एक इंटरएक्टिव भाषा है जिसमें eval द्वारा सभी code का स्वचालित रूप से मूल्यांकन किया जाता है। नीचे दिए गए उदाहरणों में स्ट्रिंग पैरामीटर ठीक वैसे ही चलेंगे जैसे किसी सूत्र में टाइप किए गए और निष्पादित किए गए हों या जब चयनित और निष्पादित किए गए हों। एम्परसेंड & तार संयोजन संचालिका है। इवल पुनरावर्ती रूप से इसके पैरामीटर को जोड़ता है, हल करता है और मूल्यांकन करता है। फ्रेड का एक आंतरिक कार्य भी है जिसका नाम है @value जो पैरामीटर स्ट्रिंग का मूल्यांकन करता है। @valueका वैकल्पिक दूसरा सांख्यिक पैरामीटर विशेष प्रकार जैसे दिनांक, समय के लिए इनपुट प्रकार और स्वरूपों को इंगित करता है। आदि और दिए गए मान प्रारूप को निर्धारित करता है।

सुरक्षा कारणों से @value संदर्भ का दायरा वैश्विक सापेक्ष है इसलिए @local के साथ बनाए गए स्थानीय चर @value के लिए अदृश्य हैं। उन्हें एकमात्र उसी सूत्र क्षेत्र में code द्वारा देखा जा सकता है। उसी टोकन द्वारा @value स्कोप में बनाए गए स्थानीय संस्करण केवल @value द्वारा देखे जा सकते हैं और उसी सूत्र या किसी अन्य code में code के लिए अदृश्य हैं।

फ्रेड code उदाहरण:

@value("5 + 4 + 1") # Return the numeric value 10

@value("2" & "3")           # Return the numeric value 23
@value("2" & " + 3")          # Return the numeric value 5
@value("2" & "+" & "3")        # Return the numeric value 5
@value("2 + 3")            # Return the numeric value 5 

my_var := 3, @value("2 + my_var") # Return the numeric value 5

my_var := -3, @value("2 + @abs(my_var)") # Return the numeric value 5

यह एक त्रुटि लौटाएगा चूंकि @value का दायरा वैश्विक है और @local वैश्विक संदर्भों के लिए अदृश्य है और एकमात्र अपने स्वयं के सूत्र में code द्वारा देखा जा सकता है। @local(a,b),

a := 1,
b := 2, 

@value("a + b") # return an error value (1*)

परंतु अगर a और b फ्रेम @value हैं जो वैश्विक और साथ ही सापेक्ष चर फ्रेम को संदर्भित कर सकते हैं,

a := 1,

b := 2,
@value("a + b")            # Return the numeric value 3

code की यह पंक्ति 3 वापस आ जाएगी चूंकि स्थानीय संस्करण @value दायरे में बनाए और देखे जाते हैं @value("@local(a,b),a:=1,b:=2,a+b") # Return the numeric value 3

परंतु code की अगली दो पंक्तियाँ एक अपरिभाषित संदर्भ त्रुटि लौटाएंगी चूंकि a और b स्थानीय @value स्कोप में बनाए गए हैं और सूत्र के बाकी कोड के लिए अदृश्य हैं, वास्तव में किसी भी code के लिए कहीं भी परंतु इस @value स्कोप में। @ मान (@ स्थानीय (a, b), a: = 1, b: = 2), a+b # एक अपरिभाषित संदर्भ त्रुटि लौटाता है

@value("{12/12/2012}",16) # स्ट्रिंग "12 दिसंबर, 2012"

@value("@fileload(@inputline(""Enter drive letter"",""" & @item1 & """) & " & """:\myfile.txt"")") # where @item1 is received parameter "c",

बेसिक

असली बुनियादी

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

वीबीस्क्रिप्ट

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

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

अनुप्रयोगों के लिए विजुअल बेसिक

अनुप्रयोगों के लिए विजुअल बेसिक (वीबीए), माइक्रोसॉफ्ट ऑफिस की प्रोग्रामिंग भाषा, एक वर्चुअल मशीन भाषा है जहाँ रनटाइम पर्यावरण बाइट कोड को संकलित करता है और चलाता है। इवल इसका एकमात्र अभिव्यक्ति मूल्यांकन का समर्थन करता है, जहां अभिव्यक्ति में उपयोगकर्ता-परिभाषित फ़ंक्शन और ऑब्जेक्ट सम्मलित हो सकते हैं (परंतु उपयोगकर्ता-परिभाषित चर नाम नहीं)। मूल्यांकनकर्ता वीबीएस से अलग है, और कुछ उपयोगकर्ता परिभाषित कार्यों का आह्वान वीबीएस में वीबीस्क्रिप्ट में समान code की तुलना में अलग तरह से काम कर सकता है।

स्मॉलटॉक

चूंकि स्मॉलटाक के कंपाइलर वर्ग मानक क्लास लाइब्रेरी का भाग हैं और सामान्यतः रन टाइम पर उपस्थित होते हैं, इन्हें code स्ट्रिंग का मूल्यांकन करने के लिए उपयोग किया जा सकता है। Compiler evaluate:'1 + 2'

चूंकि क्लास और मेथड की परिभाषाएँ मैसेज-सेंड्स (क्लास ऑब्जेक्ट्स) द्वारा भी लागू की जाती हैं, यहाँ तक कि code परिवर्तन भी संभव हैं: Compiler evaluate:'Object subclass:#Foo'

टीसीएल

टीसीएल प्रोग्रामिंग लैंग्वेज में एक कमांड है जिसे eval कहा जाता है, जो एक तर्क के रूप में प्रदान किए गए स्रोत code को निष्पादित करता है। टीसीएल स्ट्रिंग के रूप में सभी स्रोत code का प्रतिनिधित्व करता है, घुंघराले ब्रेसिज़ उद्धरण चिह्नों के रूप में कार्य करता है, ताकि eval के तर्क में किसी अन्य स्रोत code के समान स्वरूपण हो सके।

set foo { while {[incr i]<10} { puts "$i squared is [expr $i*$i]" } } eval $foo

बीएस

बीएस में एक eval फ़ंक्शन है जो एक स्ट्रिंग तर्क लेता है। फ़ंक्शन अभिव्यक्ति मूल्यांकनकर्ता और कथन निष्पादक दोनों है। बाद की भूमिका में, इसका उपयोग त्रुटि से निपटने के लिए भी किया जा सकता है। निम्नलिखित उदाहरण और पाठ बीएस मैन पेज जैसा कि यूनिक्स सिस्टम वी रिलीज 3.2 प्रोग्रामर मैनुअल में दिखाई देता है।[6]

स्ट्रिंग तर्क का मूल्यांकन bs व्यंजक के रूप में किया जाता है। फ़ंक्शन संख्यात्मक स्ट्रिंग्स को संख्यात्मक आंतरिक रूप में परिवर्तित करने के लिए आसान है। eval </ code> का उपयोग संकेत के कच्चे रूप के रूप में भी किया जा सकता है, जैसा कि निम्नलिखित में है (ध्यान दें कि, bs में, code>_ (अंडरस्कोर) है संयोजन संचालिका।):

<वाक्यविन्यास लैंग = "bs"> नाम = "xyz" eval ("++" _ नाम) </वाक्यविन्यास हाइलाइट> जो चर को बढ़ाता है xyz.

इसके अतिरिक्त, eval पूछताछ ऑपरेटर, ? से पहले, उपयोगकर्ता को bs त्रुटि स्थितियों को नियंत्रित करने की अनुमति देता है। उदाहरण के लिए: <वाक्यविन्यास लैंग = "bs"> ? eval("open(\"X\", \"XXX\", \"r\")") </वाक्यविन्यास हाइलाइट> यदि "XXX" नाम की कोई फ़ाइल नहीं है, तो मान शून्य लौटाता है (इसके अतिरिक्त उपयोगकर्ता के कार्यक्रम को रोकने के)।

निम्नलिखित गोटो को L लेबल पर निष्पादित करता है (यदि यह उपस्थित है): <वाक्यविन्यास लैंग = "bs"> label = "L" if !(?eval("goto " _ label)) puterr = "no label"

</वाक्यविन्यास हाइलाइट>


कमांड-लाइन दुभाषिया

यूनिक्स गोले

मूल श (बॉर्न शेल) सहित सभी यूनिक्स शेल में eval कमांड उपस्थित है। यह रिक्त स्थान के साथ सभी तर्कों को जोड़ता है, फिर परिणाम को पार्स करता है और परिणाम को कमांड के रूप में निष्पादित करता है। sh(1) – FreeBSD General Commands Manual


विंडोज पॉवरशेल

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

अभिव्यक्ति मूल्यांकनकर्ता के रूप में उदाहरण: PS > $foo = 2

PS > invoke-expression '$foo + 2' एक निष्पादक के रूप में उदाहरण:

PS > $foo = 2

PS > invoke-expression '$foo += 2; $foo'

माइक्रोकोड

1966 में आईबीएम संवादी प्रोग्रामिंग प्रणाली (सीपीएस) ने एक आईबीएम सिस्टम/360 मॉडल 50 पर "संशोधित पोलिश स्ट्रिंग में लिखी गई अभिव्यक्तियों का व्याख्यात्मक मूल्यांकन करने के लिए एक माइक्रोप्रोग्राम्ड फ़ंक्शन eval पेश किया।।[7] असाइनमेंट स्टेटमेंट की व्याख्या करने वाले प्रोग्राम की तुलना में इस फ़ंक्शन को माइक्रोकोडिंग पांच गुना तेजी से किया गया था।[8]


सिद्धांत

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

(eval '(f x) )

जहां फॉर्म (f x) का मूल्यांकन किया जाना है, और

(apply f (list x))

जहां फ़ंक्शन f को तर्क x के साथ कॉल किया जाना है।

मूल्यांकन और लागू, मूल्यांकन-लागू चक्र के दो अन्योन्याश्रित घटक हैं, जो कंप्यूटर प्रोग्राम की संरचना और व्याख्या में वर्णित लिस्प के मूल्यांकन का सार है।[9] श्रेणी सिद्धांत में, बंद मोनॉइडल श्रेणी को परिभाषित करने के लिए इवल आकारिता का उपयोग किया जाता है। इस प्रकार, उदाहरण के लिए, आकारिकी के रूप में लिए गए कार्यों के साथ सेट की श्रेणी, और कार्टेशियन उत्पाद को उत्पाद (श्रेणी सिद्धांत) के रूप में लिया जाता है, एक कार्टेशियन बंद श्रेणी बनाता है। यहां, eval (या, ठीक से बोलना, लागू करना) अपने दाहिने आसन्न के साथ, मिलकर, सरल रूप से टाइप किए गए लैम्ब्डा कैलकुलस का निर्माण करते हैं, जिसे कार्टेशियन बंद श्रेणियों के आकारिता के रूप में व्याख्या किया जा सकता है।

संदर्भ

  1. "Flash 8 LiveDocs". 2006-10-10. Archived from the original on 2006-10-10.
  2. ActionScript 3 Eval Library
  3. "The D.eval API". Archived from the original on 2013-03-14.
  4. John McCarthy, "History of Lisp - The Implementation of Lisp"
  5. "PHP: eval - Manual". PHP.net. Retrieved 2015-09-10.
  6. "Volume 1 Commands and Utilities". UNIX Programmer's Manual (PDF). AT&T. 1986. p. 41.
  7. Allen-Babcock. "Draft EVAL Microprogram" (PDF). Bitsavers.org. Retrieved Jan 17, 2016.
  8. Rochester, Nathaniel. "Conversational Programming System Progress Report" (PDF). Bitsavers.org. Retrieved Jan 17, 2016.
  9. The Metacircular Evaluator (SICP Section 4.1)


बाहरी संबंध