इवल

From Vigyanwiki
Revision as of 14:08, 4 March 2023 by alpha>Arnikapal

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

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


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

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

session['authenticated'] = False

data = get_data()

foo = eval(data)

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

कार्यान्वयन

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

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

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

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

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

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

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

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

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

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

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

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

लिस्प

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

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

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

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

(+ 1 2 3)

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

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

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

(ईवल फॉर्म 1)

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

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

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

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

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

पर्ल

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

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

$foo = 2;

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

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

$foo = 2;

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

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

पीएचपी

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

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

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

अभिव्यक्ति मूल्यांकनकर्ता के रूप में उदाहरण: 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) चलाएँ </वाक्यविन्यास हाइलाइट>

पायथन

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

इवलउदाहरण (इंटरैक्टिव खोल): >>> 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

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

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

>>> x = 1

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

डी

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

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

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

void main() {

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

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

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

शीत संलयन

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

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

<cfset y = Evaluate(x)>

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

रूबी

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

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

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

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

 बंधन

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

फोर्थ

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

विन 32 फोर्थ कोड उदाहरण: <वाक्यविन्यास लैंग = आगे>

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

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

फ्रेड

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

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

फ्रेड कोड उदाहरण:

@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 वैश्विक संदर्भों के लिए अदृश्य है और एकमात्र अपने स्वयं के सूत्र में कोड द्वारा देखा जा सकता है। @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

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

परंतु कोड की अगली दो पंक्तियाँ एक अपरिभाषित संदर्भ त्रुटि लौटाएंगी चूंकि a और b स्थानीय @value स्कोप में बनाए गए हैं और सूत्र के बाकी कोड के लिए अदृश्य हैं, वास्तव में किसी भी कोड के लिए कहीं भी परंतु इस @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",

बेसिक

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

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

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

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

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

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

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

स्मॉलटॉक

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

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

टीसीएल

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

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

बीएस

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

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

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

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

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

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


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

यूनिक्स गोले

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


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

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

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

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

PS > $foo = 2

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

माइक्रोकोड

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


सिद्धांत

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

(eval '(f x) )

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

(apply f (list x))

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

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

संदर्भ

  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)


बाहरी संबंध