2009-11-20 9 views
5

मैं अपनी सॉफ़्टवेयर प्रोजेक्ट्स में से एक में एक स्क्रिप्टिंग भाषा एम्बेड करने पर विचार कर रहा हूं और दो विकल्पों की पहचान की है: कोडडॉम के माध्यम से रन-टाइम पर सी # संकलित करना और डीएलआर-आधारित स्क्रिप्टिंग भाषा को एम्बेड करना। दोनों विकल्प मुझे .NET Framework तक पूर्ण पहुंच प्रदान करेंगे।स्क्रिप्टिंग कार्यों के लिए सी # की बजाय डीएलआर-आधारित भाषा का उपयोग करने के कारण?

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

इस वर्कलोड को ध्यान में रखते हुए, क्या किसी अन्य दृष्टिकोण पर एक दृष्टिकोण का उपयोग करने के लिए कोई स्पष्ट फायदे हैं?

उत्तर

3

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

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

एक डीएलआर स्क्रिप्टिंग होस्ट एम्बेड करना not difficult at all है। यदि आप इस तरह से जाना चुनते हैं, तो अपने स्वयं के डीएसएल को रोल करना मुश्किल है।

आप boo पर भी देख सकते हैं। यह एक स्थिर सीएलआई भाषा है जो पाइथन की तरह दिखती है, अनुमान लगाने के लिए धन्यवाद। इसका कंपाइलर बेहद एक्स्टेंसिबल है, और मुझे कुछ छोटे डीएसएल लिखने में कुछ सफलता मिली है। आप ओरेन की पुस्तक Writing DSLs with boo पर भी देख सकते हैं।

+0

क्या आपके पास दो दृष्टिकोणों के सापेक्ष प्रदर्शन के बारे में कोई विचार है? या CD विकल्प के साथ उत्पन्न होने वाले AppDomain प्रबंधन समस्याओं के बारे में? या एक डीएलआर स्क्रिप्टिंग होस्ट एम्बेड करने में कठिनाई के बारे में? (हालांकि अच्छा मुद्दा, मैंने इसे ऊपर उठाया)। – Dave

+0

"लेकिन यह कभी तेज़ नहीं होगा ..." क्या आप कह रहे हैं कि क्रॉस-एपडोमेन विधि कॉल के लिए जुर्माना डीएलआर गतिशील प्रेषण तंत्र से कम होगा? क्या आपके पास इसके लिए कोई स्रोत है? (सी # कार्यान्वयन में, मुझे संकलित असेंबली को अनलोड करने में सक्षम होना चाहिए, इसलिए ऐपडोमेन अलगाव।) – Dave

+1

@ डेव: ओह, यह समस्या है ... जब आप ऐपडोमेन को पार करते हैं तो वह जुर्माना भुगतान किया जाता है। मामूली गतिशील प्रेषण लागत, आप इसे स्क्रिप्ट के अंदर हर जगह भुगतान करते हैं। मुझे यकीन नहीं है कि ये आपके उपयोग के मामले में कैसे संतुलन बनाएंगे। –

संबंधित मुद्दे