इवल: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
 
(8 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}}
{{lowercase}}
{{lowercase}}
कुछ [[Index.php?title=प्रोग्रामिंग भाषाएं|प्रोग्रामिंग भाषाएं]] इवल, अंग्रेजी मूल्यांकन के लिए संक्षिप्त, एक [[Index.php?title=ऐसा कार्य|ऐसा कार्य]] है जो एक स्ट्रिंग का मूल्यांकन करता है जैसे कि यह भाषा में एक [[Index.php?title=अभिव्यक्ति|अभिव्यक्ति]] है, जो एक परिणाम देता है; दूसरों में, यह कोड की कई पंक्तियों को निष्पादित करता है जैसे कि उन्हें इवल सहित लाइन के अतिरिक्त सम्मलित किया गया हो। इवल के लिए इनपुट आवश्यक रूप से एक स्ट्रिंग नहीं है; यह कोड का संरचित प्रतिनिधित्व हो सकता है, जैसे कि [[Index.php?title=सार सिंटैक्स ट्री|सार सिंटैक्स ट्री]] (जैसे [[Index.php?title=लिस्प फॉर्म),|लिस्प फॉर्म),]] या विशेष प्रकार जैसे कि<code>code</code>(पायथन के रूप में) [[Index.php?title=विवरण|विवरण]] के लिए अनुरूप निष्पादन है, जो एक स्ट्रिंग (या अन्य प्रारूप में कोड) को निष्पादित करता है जैसे कि एक विवरण जो कुछ भाषाओं में उपस्थित हैं, जबकि अन्य भाषाओं में दोनों में से केवल एक <code>इवल</code> या <code>एक्ज़ेक</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> है।


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




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


session['authenticated'] = False
session['authenticated'] = False
Line 15: Line 15:
foo = eval(data)
foo = eval(data)


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


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


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


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


अभिव्यक्ति मूल्यांकनकर्ता के रूप में उदाहरण: foo = 2;
अभिव्यक्ति मूल्यांकनकर्ता के रूप में उदाहरण:
 
foo = 2;
alert(eval('foo + 2'));
alert(eval('foo + 2'));


एक स्टेट्मन्ट निष्पादक के रूप में उदाहरण: foo = 2;
एक स्टेट्मन्ट निष्पादक के रूप में उदाहरण:
 
foo = 2;
eval('foo = foo + 2;alert(foo);');
eval('foo = foo + 2;alert(foo);');


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


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


एक्शन स्क्रिप्ट (फ्लैश की प्रोग्रामिंग भाषा) में,<code>इवल</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 45: Line 49:
|date = 2006-10-10}}</ref>
|date = 2006-10-10}}</ref>


एक्शन स्क्रिप्ट 3<code>इवल</code>का समर्थन नहीं करता है।
एक्शन स्क्रिप्ट 3<code>eval</code>का समर्थन नहीं करता है।


एक्शन स्क्रिप्ट 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>इवल</code>एक्शन स्क्रिप्ट 3 में। दोनों समाप्त हो गए हैं, क्योंकि [[Index.php?title=एडोब फ्लैश प्लेयर|एडोब फ्लैश प्लेयर]] अपने जीवन के अंत तक पहुंच गया है।
एक्शन स्क्रिप्ट 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=एडोब फ्लैश प्लेयर|एडोब फ्लैश प्लेयर]] अपने जीवन के अंत तक पहुंच गया है।


=== लिस्प ===
=== लिस्प ===
[[Index.php?title=लिस्प|लिस्प]] 1958 में एक इवल फ़ंक्शन का उपयोग करने वाली मूल भाषा थी। वास्तव में, इवल फ़ंक्शन की परिभाषा के कारण भाषा दुभाषिया का पहला कार्यान्वयन का नेतृत्व किया।<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>
इवल फ़ंक्शन को परिभाषित करने से पहले, लिस्प फ़ंक्शंस को [[Index.php?title=असेंबली लैंग्वेज|असेंबली लैंग्वेज]] स्टेटमेंट्स में मैन्युअल रूप से संकलित किया गया था। चूंकि, एक बार इवल फ़ंक्शन को नियम रूप मे संकलित कर लेने के बाद इसे एक साधारण [[रीड-इवल-प्रिंट लूप]] भाग के रूप में उपयोग किया गया था, जिसने पहले लिस्प दुभाषिया का आधार बनाया था।
eval फ़ंक्शन को परिभाषित करने से पहले, लिस्प फ़ंक्शंस को [[Index.php?title=असेंबली लैंग्वेज|असेंबली लैंग्वेज]] स्टेटमेंट्स में मैन्युअल रूप से संकलित किया गया था। चूंकि, एक बार eval फ़ंक्शन को नियम रूप मे संकलित कर लेने के बाद इसे एक साधारण [[रीड-इवल-प्रिंट लूप]] भाग के रूप में उपयोग किया गया था, जिसने पहले लिस्प दुभाषिया का आधार बनाया था।


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


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


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


<syntaxhighlight lang="lisp">(eval (read-from-string "(format t \"Hello World!!!~%\")"))</syntaxhighlight>
<syntaxhighlight lang="lisp">(eval (read-from-string "(format t \"Hello World!!!~%\")"))</syntaxhighlight>


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


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


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


अभिव्यक्ति मूल्यांकनकर्ता के रूप में उदाहरण:
अभिव्यक्ति मूल्यांकनकर्ता के रूप में उदाहरण:
Line 108: Line 112:
  eval('$foo += 2; print "$foo\n";');
  eval('$foo += 2; print "$foo\n";');


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


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


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


कुछ भाषाओं के विपरीत, PHP का इवल एक फ़ंक्शन के अतिरिक्त एक "भाषा निर्माण" है,<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> और इसलिए कुछ संदर्भों में इसका उपयोग नहीं किया जा सकता है जहां फ़ंक्शन हो सकते हैं, जैसे उच्च-क्रम के कार्य।


प्रतिध्वनि का उपयोग करने का उदाहरण:
प्रतिध्वनि का उपयोग करने का उदाहरण:
Line 126: Line 130:
   
   
<?php
<?php
  $foo = "Goodbye, world!\n"; //does not work in PHP5
  $foo = "Goodbye, world!\n"; //does not work in PHP5
  echo eval('return $foo;');
  echo eval('return $foo;');
  ?>
  ?>


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


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


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


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


<code>कम्पाइल</code> उदाहरण (इंटरैक्टिव खोल):
<code>कम्पाइल</code> उदाहरण (इंटरैक्टिव खोल):
Line 190: Line 194:
  >>> y = 2
  >>> y = 2
  >>> eval (compile ("print 'x + y = ', x + y", "compile-sample.py", "single"))
  >>> eval (compile ("print 'x + y = ', x + y", "compile-sample.py", "single"))
  x + y = 3
  x + y = 3


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


उदाहरण के लिए:
उदाहरण के लिए:
Line 220: Line 224:
[[Index.php?title=रूबी|रूबी]] प्रोग्रामिंग लैंग्वेज दुभाषिया पायथन या पर्ल के समान एक इवल फ़ंक्शन प्रदान करता है, और एक [[कार्यक्षेत्र (प्रोग्रामिंग)]], या [[Index.php?title=बाइंडिंग|बाइंडिंग]] को भी निर्दिष्ट करने की अनुमति देता है।
[[Index.php?title=रूबी|रूबी]] प्रोग्रामिंग लैंग्वेज दुभाषिया पायथन या पर्ल के समान एक इवल फ़ंक्शन प्रदान करता है, और एक [[कार्यक्षेत्र (प्रोग्रामिंग)]], या [[Index.php?title=बाइंडिंग|बाइंडिंग]] को भी निर्दिष्ट करने की अनुमति देता है।


किसी फ़ंक्शन के बंधन को निर्दिष्ट करने के अतिरिक्त, इवल का उपयोग विशिष्ट वर्ग परिभाषा बाइंडिंग या ऑब्जेक्ट इंस्टेंस बाइंडिंग के अन्दर अभिव्यक्ति का मूल्यांकन करने के लिए भी किया जा सकता है, जिससे स्ट्रिंग्स में निर्दिष्ट नई विधियों के साथ कक्षाओं को विस्तारित किया जा सकता है।
किसी फ़ंक्शन के बंधन को निर्दिष्ट करने के अतिरिक्त, eval का उपयोग विशिष्ट वर्ग परिभाषा बाइंडिंग या ऑब्जेक्ट इंस्टेंस बाइंडिंग के अन्दर अभिव्यक्ति का मूल्यांकन करने के लिए भी किया जा सकता है, जिससे स्ट्रिंग्स में निर्दिष्ट नई विधियों के साथ कक्षाओं को विस्तारित किया जा सकता है।
  a = 1 eval('a + 1') # (evaluates to 2)
  a = 1 eval('a + 1') # (evaluates to 2)
# एक संदर्भ के भीतर मूल्यांकन
# एक संदर्भ के भीतर मूल्यांकन
डेफ गेटबाइंडिंग (ए)
डेफ गेटबाइंडिंग (ए)
Line 229: Line 233:


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


विन 32 फोर्थ कोड उदाहरण:
Win32FORTH code उदाहरण:
<वाक्यविन्यास लैंग = आगे>
<वाक्यविन्यास लैंग = आगे>
   S" 2 2 + ." EVALUATE \ Outputs "4"
   S" 2 2 + ." EVALUATE \ Outputs "4"
Line 237: Line 241:


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


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


<वाक्यविन्यास लैंग = पाठ>
फ्रेड code उदाहरण:
@value("5 + 4 + 1") # रीटर्न द नूमेरिक वैल्यू 10
@value("2" & "3") # रीटर्न द नूमेरिक वैल्यू 23
@value("2" & " + 3") # रीटर्न द नूमेरिक वैल्यू 5
@value("2" & "+" & "3") # रीटर्न द नूमेरिक वैल्यू 5
@value("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,
@value("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 द्वारा देखा जा सकता है।
@ स्थानीय (a, b),
@local(a,b),
a := 1,
:= 1,
:= 2,
:= 2, 
@ मान (a + b) # रीटर्न अन एरर वैल्यू (1*)
@value("a + b")           # return an error value (1*)
 
परंतु अगर a और b फ्रेम @value हैं जो वैश्विक और साथ ही सापेक्ष चर फ्रेम को संदर्भित कर सकते हैं,


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


कोड की यह पंक्ति 3 वापस आ जाएगी चूंकि स्थानीय संस्करण @value दायरे में बनाए और देखे जाते हैं
परंतु code की अगली दो पंक्तियाँ एक अपरिभाषित संदर्भ त्रुटि लौटाएंगी चूंकि a और b स्थानीय @value स्कोप में बनाए गए हैं और सूत्र के बाकी कोड के लिए अदृश्य हैं, वास्तव में किसी भी code के लिए कहीं भी परंतु इस @value स्कोप में।
@value( @local(a,b),a:=1,b:=2,a+b ) # रीटर्न द नूमेरिक वैल्यू 3
 
परंतु कोड की अगली दो पंक्तियाँ एक अपरिभाषित संदर्भ त्रुटि लौटाएंगी चूंकि a और b स्थानीय @value स्कोप में बनाए गए हैं और सूत्र के बाकी कोड के लिए अदृश्य हैं, वास्तव में किसी भी कोड के लिए कहीं भी परंतु इस @value स्कोप में।
@ मान (@ स्थानीय (a, b), a: = 1, b: = 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 लोड करता है
</वाक्यविन्यास हाइलाइट>


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


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


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


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


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


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


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


=== बीएस ===
=== बीएस ===
बीएस में एक इवल फ़ंक्शन है जो एक स्ट्रिंग तर्क लेता है। फ़ंक्शन अभिव्यक्ति मूल्यांकनकर्ता और कथन निष्पादक दोनों है। बाद की भूमिका में, इसका उपयोग त्रुटि से निपटने के लिए भी किया जा सकता है। निम्नलिखित उदाहरण और पाठ बीएस [[मैन पेज]] जैसा कि यूनिक्स सिस्टम वी रिलीज 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 332: Line 322:


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


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


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




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


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


== [[माइक्रोकोड]] ==
== [[माइक्रोकोड]] ==
1966 में [[आईबीएम]] [[संवादी प्रोग्रामिंग प्रणाली]] (सीपीएस) ने एक आईबीएम सिस्टम/360 मॉडल 50 पर "संशोधित [[Index.php?title=पोलिश स्ट्रिंग|पोलिश स्ट्रिंग]] में लिखी गई अभिव्यक्तियों का व्याख्यात्मक मूल्यांकन करने के लिए एक माइक्रोप्रोग्राम्ड फ़ंक्शन इवल पेश किया।।<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>
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>




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


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


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


<syntaxhighlight lang="lisp">(apply f (list 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>
[[श्रेणी सिद्धांत]] में, बंद मोनॉइडल श्रेणी को परिभाषित करने के लिए इवल [[Index.php?title=आकारिता|आकारिता]] का उपयोग किया जाता है। इस प्रकार, उदाहरण के लिए, आकारिकी के रूप में लिए गए कार्यों के साथ [[सेट की श्रेणी]], और कार्टेशियन उत्पाद को [[उत्पाद (श्रेणी सिद्धांत)]] के रूप में लिया जाता है, एक [[कार्टेशियन बंद श्रेणी]] बनाता है। यहां, इवल (या, ठीक से बोलना, लागू करना) अपने दाहिने आसन्न के साथ, [[Index.php?title=मिलकर|मिलकर]], सरल रूप से टाइप किए गए लैम्ब्डा कैलकुलस का निर्माण करते हैं, जिसे कार्टेशियन बंद श्रेणियों के आकारिता के रूप में व्याख्या किया जा सकता है।
[[श्रेणी सिद्धांत]] में, बंद मोनॉइडल श्रेणी को परिभाषित करने के लिए इवल [[Index.php?title=आकारिता|आकारिता]] का उपयोग किया जाता है। इस प्रकार, उदाहरण के लिए, आकारिकी के रूप में लिए गए कार्यों के साथ [[सेट की श्रेणी]], और कार्टेशियन उत्पाद को [[उत्पाद (श्रेणी सिद्धांत)]] के रूप में लिया जाता है, एक [[कार्टेशियन बंद श्रेणी]] बनाता है। यहां, eval (या, ठीक से बोलना, लागू करना) अपने दाहिने आसन्न के साथ, [[Index.php?title=मिलकर|मिलकर]], सरल रूप से टाइप किए गए लैम्ब्डा कैलकुलस का निर्माण करते हैं, जिसे कार्टेशियन बंद श्रेणियों के आकारिता के रूप में व्याख्या किया जा सकता है।


==संदर्भ==
==संदर्भ==
Line 404: 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)


बाहरी संबंध