सबसे अच्छा आप उस के साथ आ सकते हैं क्या आप के लिए किया जाता है (के रूप में अपने प्रश्न का उसकी टिप्पणी में जेवियर ने उल्लेख किया) "एक eval कार्य है" पूछना ठीक है।
स्व-होस्टिंग आवश्यक नहीं है और न ही यह आवश्यक है जो आप चाहते हैं। दो उदाहरण हैं: सी एक स्वयं होस्टेड भाषा है जो स्ट्रिंग में अपना कोड निष्पादित नहीं कर सकती है लेकिन टीसीएल एक स्वयं होस्टेड भाषा नहीं है जो स्ट्रिंग में दिए गए अपने कोड को निष्पादित कर सकती है।
एक साइड नोट के रूप में, आधा समय सी उन वातावरणों में चलता है जहां बाहरी प्रक्रियाओं को निष्पादित करने के लिए कोई एपीआई नहीं है। इसलिए कुछ वातावरणों में आप अपने सिस्टम को अपने स्वयं के अनुपालन को निष्पादित करने में सक्षम बनाने के लिए कॉन्फ़िगर कर सकते हैं और फिर सामान्य रूप से अपना कोड निष्पादित कर सकते हैं, यह वास्तव में आप नहीं पूछ रहे हैं।
साइड-साइड नोट। यदि हम ऐसा करने के लिए धोखा दे सकते हैं और "बाहरी कंपाइलर निष्पादित करें" मार्ग का उपयोग कर सकते हैं तो एक भाषा को जो भी आप चाहते हैं उसे करने के लिए स्वयं होस्टिंग करने की आवश्यकता नहीं है। इसे अपने स्वयं के कंपाइलर को कॉल करने के लिए केवल एक निष्पादन फ़ंक्शन की आवश्यकता होती है (जिसे अक्सर सी में लिखा जाता है)।
प्रतिबिंब/आत्मनिरीक्षण के साथ
ही, अपने आप को INTROSPECT करने के लिए इसका मतलब यह नहीं कि आप एक स्ट्रिंग में कोड निष्पादित कर सकते हैं की क्षमता होने। उन दो भाषाओं के उदाहरण जिनमें प्रतिबिंब है लेकिन इसमें अंतर्निहित eval नहीं है सी # और जावा हैं।
- एक साइड नोट के रूप में, एक बार जब आपके पास एक eval फ़ंक्शन हो तो आप आम तौर पर प्रतिबिंबित/आत्मनिरीक्षण कर सकते हैं।
आत्म-व्याख्यात्मक स्वयं परिभाषा के रूप में अपनी परिभाषा के साथ एक ही समस्या है। टीसीएल एक ऐसी भाषा है जहां इसका eval फ़ंक्शन स्वयं में लिखा नहीं जाता है - यह केवल सी
पर पहली बार देखा गया है, मेटा-सर्कुलर मूल्यांकनकर्ता आप जो चाहते हैं उसे दिखते हैं। इसे आत्म-व्याख्यात्मक के रूप में परिभाषित किया जाता है जहां eval फ़ंक्शन भाषा में लागू होने के बजाय बनाया जाता है। लेकिन आगे की ओर देखते हुए आप देखेंगे कि यह सुविधा को प्राप्त करने के लिए उपयोग की गई तंत्र द्वारा परिभाषित किया गया है बल्कि यह सुविधा स्वयं ही है। टीसीएल एक अपवाद है जहां यह मेटा-सर्कुलर मूल्यांकनकर्ताओं की सभी परिभाषाओं को पूरा नहीं करता है लेकिन फिर भी एक eval फ़ंक्शन है (लागू नहीं, आवश्यक नहीं)। तो मुझे लगता है कि मेटा-सर्कुलर मूल्यांकनकर्ता "एक eval function" सुविधा का एक विशिष्ट कार्यान्वयन है।
तो, मैं बस इतना कहूंगा कि किसी भी भाषा में "एक eval function है" जो आप पूछ रहे हैं वह कर सकते हैं।
क्या आपका मतलब व्याख्या किया गया है? http://en.wikipedia.org/wiki/Interpreted_language – Pool
एसक्यूएल में वे इसे "एसक्यूएल इंजेक्शन" कहते हैं; सी/सी ++ में वे इसे "शोषण" कहते हैं। –
"एक eval function है" इसका संदर्भ देने का एक आम तरीका है। – Javier