2009-08-24 14 views
12

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

मेरे एप्लिकेशन में उपकरणों के साथ पूरी तरह से बातचीत करने के लिए पुस्तकालय शामिल हैं। कार्यों को शुरू करने, आउटपुट प्राप्त करने और सफलता/विफलता को ट्रैक करने के लिए अलग-अलग पुस्तकालय हैं। मेरे एप्लिकेशन में कई डिवाइसों को प्रबंधित करने और कई स्क्रिप्ट चलाने के लिए एक जीयूआई भी है।

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

जो मैं चाहता की एक बहुत ही बुनियादी उदाहरण:

TURN_POWER_ON 
TUNE_FREQUENCY frequency 
WAIT 5 
IF GET_FREQUENCY == frequency 
    REPORT_PASS "Successfully tuned to " + frequency 
ELSE 
    REPORT_FAIL "Failed to tune to " + frequency 
ENDIF 
TURN_POWER_OFF 

कहाँ रिपोर्टिंग, शक्ति और आवृत्ति कार्यों मेरी सी # पुस्तकालयों द्वारा प्रदान की जाती हैं।

क्या आयरनरुबी या आयरनपीथन जैसे कुछ इस के लिए अच्छा होगा, या क्या मुझे अपनी खुद की मूल भाषा बनाना चाहिए?

क्या .NET संकलित असेंबली का एक समूह शामिल करने का प्रयास करते समय रूबी/पायथन कोड गन्दा हो जाता है? मैं गैर-प्रोग्रामर और प्रोग्रामर के लिए सीखना आसान और कोड करना चाहता हूं।

संपादित करें:

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

उत्तर

16

मैंने सुना है के लिए आयरनपीथन के बारे में बहुत अच्छी चीजें बिल्कुल इस प्रकार के परिदृश्य। मैं निश्चित रूप से एक त्वरित सबूत-अवधारणा पर कुछ घंटों खर्च करने का जोखिम उठाना चाहता हूं, यह देखने के लिए कि यह कैसे बाहर निकलता है।

माइकल Foord होगा खुशी से मोम इसी तरह के मामलों में IronPython की सफलता के बारे गेय (उसके लिए सबसे विशेष रूप से, स्प्रेडशीट की समझ रखने वाले उपयोगकर्ताओं के लिए), और his book कवर (IIRC) नेट से की मेजबानी के बारे में कुछ संकेत दिए गए।

+0

है कि महान :) वहाँ किसी भी अच्छे उदाहरण हैं बचा सकते हैं चाहते हैं/इस तरह के एकीकरण के लिए वहाँ ट्यूटोरियल? मुझे यह देखना अच्छा लगेगा कि इस तरह के कुछ के लिए अंत पायथन कोड क्या दिखता है। – cgyDeveloper

+0

मुझे यकीन है कि आयरनपीथन इन एक्शन में कुछ शामिल हैं (हालांकि मृत पेड़ होने से यह पुराना हो सकता है); आप यहां देख सकते हैं: http://blogs.msdn.com/srivatsn/archive/2008/09/16/hosting-ironpython-made-easier.aspx –

+0

मेरे पास एक उदाहरण है जो दिखाता है कि स्क्रिप्टिंग सी # के लिए पायथन का उपयोग कैसे करें (या वीबीएनईटी) http://www.gotnet.biz/Blog/post/Mixing-Static-and- गतिशील- डॉटनेट- भाषाएं- नवंबर -2008-Update.aspx –

2

मैं मार्क जी से सहमत हूं, हालांकि यह उल्लेखनीय है कि सामान्य अवधारणा एक डोमेन विशिष्ट लदान है। जबकि IronRuby/IronPython सख्ती से डोमेन-विशिष्ट नहीं हैं, वे पूर्ण-विशेषीकृत हैं और यह आपको आपके कार्यान्वयन के साथ आगे बढ़ने के लिए छोड़ देगा।

विजुअल स्टूडियो में डीएसएल उपकरण हैं, और वहां 'एम' व्याकरण सामग्री है जिसे आप देख सकते हैं।

लेकिन हाँ, आयरनपीथन।

+0

मैं हर रोज एक नया परिवर्णी सीखता हूं ...डीएसएल अब मेरी शब्दावली (दो बार) में है। धन्यवाद, आपने मेरी Google को एक टन की खोज में मदद की है :) – cgyDeveloper

10

आप Boo पर देख सकते हैं, सीएलआर पर चलने वाली एक और प्रबंधित भाषा, और जो डीएसएल बनाने के लिए विशेष रूप से उपयुक्त है और आपके अनुप्रयोगों को स्क्रिप्ट करने योग्य बनाती है।

संकलन पाइपलाइन भाषा से सीधे विस्तार योग्य है।

Boo Manifesto पढ़ना एक अच्छा प्रारंभिक बिंदु है यदि आप इसके बारे में अधिक जानना चाहते हैं। Building Domain Specific Languages in Boo

4

यह काम इस तरह की के लिए PowerShell पर विचार के लायक हो सकता है:

[संपादित] मुझे लगता है कि Ayende Rahien विषय पर एक पूरी किताब लिख रहा है उल्लेख करना भूल गया। वह .NET में किसी भी डीएलआर भाषाओं के रूप में कॉल कर सकता है, और इसके cmdlet (कमांड-लेट) अवधारणा में कार्यों के लिए एक और अधिक प्राकृतिक भाषा प्रकार है। आपको v1 में संकलित भाषा में cmdlets लिखना है - v2 में जिसे Win7 से शुरू किया जा रहा है और अगले कुछ महीनों में पुरानी रिलीज के लिए काम कर रहा है (Vista/Win2k8 के लिए v2 अब आरसी पर है), आप उनको बना सकते हैं PowerShell में सीधे।

2

डीएसएल से आप जा रहे हैं, मैं IronRuby के साथ CUCUMBER का उपयोग करने की सलाह दूंगा।

ककड़ी के साथ, परीक्षकों परीक्षण है कि ऐसा ही कुछ देखने के बारे में:

Scenario: See all vendors 
Given I am logged in as a user in the administrator role 
And There are 3 vendors 
When I go to the manage vendors page 
Then I should see the first 3 vendor names 

यह इस भाषा आपकी आवश्यकताओं को बनाने के लिए बहुत आसान है। बस Google "ककड़ी और IronRuby" गूगल और आपको शुरू करने के लिए आपको कई गाइड और ब्लॉग पोस्ट मिलेंगे।

2

हम हमारी परियोजना में से एक में मूल्य निर्धारण सूत्र के लिए एम्बेडेड आयरन पायथन का उपयोग कर रहे हैं। इस तरह यह एक वास्तविक नमूना है कि यह कैसा दिखता है।

E_DOCUMENT_CHECK = DCPAV * ADS_NUM 
E_SPECIFIC_TAX = STV 
E_RESOURCE_DEV = RDV 
E_LP_ISSUANCE = LPIV 
E_ANNUAL_FEES = APFCV * SA * SIDES_NUM 
E_SERVICE_FEES= MAX(
MINSFV, 
E_DOCUMENT_CHECK+E_SPECIFIC_TAX+E_RESOURCE_DEV+E_LP_ISSUANCE+E_ANNUAL_FEES) 
TOTAL= E_DOCUMENT_CHECK+E_SPECIFIC_TAX+E_RESOURCE_DEV+E_LP_ISSUANCE+E_ANNUAL_FEES+E_SERVICE_FEES 

यह लागू करने के लिए वास्तव में सरल है। उदाहरण के लिए मैक्स() फ़ंक्शन कस्टम सी # विधि में से एक है जिसे हम आयरनपीथन इंजन में आयात करते हैं और यह कॉन्फ़िगरेशन सेटिंग्स में उपयोग करने के लिए प्राकृतिक लग रहा है।

+0

यह वास्तव में बहुत अच्छा लगता है। आप MAX() फ़ंक्शन को स्क्रिप्ट के इतने देशी कैसे दिखने में सक्षम थे? मेरी समस्या अब यह है कि मैं जगह पर .NET शैली कक्षाएं नहीं चाहता हूं। प्रत्येक उदाहरण SomeClass.Max() जैसा दिखता है और मैं बस आपके जैसे मूल स्क्रिप्टिंग चाहता हूं ... – cgyDeveloper

+0

यदि आपको यह टिप्पणी दिखाई देती है, तो शायद आप http://stackoverflow.com पर अपने नए/संबंधित प्रश्न का उत्तर दे सकते हैं।/प्रश्न/1348188/सरलीफिंग-डीएसएल-लिखित-के-एसी-ऐप-लोहेपीथॉन – cgyDeveloper

0

तुम बस सी # में ही पटकथा भाषा के रूप में के रूप में यहाँ वर्णित CrowsProgramming - Runtime Scripting in .Net

+0

मैंने इसे पहले किया है, और यह वास्तव में वह नहीं है जिसे मैं ढूंढ रहा हूं। सी # शैली का उपयोग कर मेरे उदाहरण की तरह एक स्क्रिप्ट प्राप्त करने का कोई तरीका नहीं है क्योंकि आपको सी # शैली वाक्यविन्यास का उपयोग करके कम से कम एक वर्ग और एक सदस्य फ़ंक्शन घोषित करने की आवश्यकता है। – cgyDeveloper

+0

@ किकनेट, यह दुर्भाग्यपूर्ण है। वेबैक मशीन के माध्यम से आप अभी भी इसे प्राप्त कर सकते हैं: https://web.archive.org/web/20150303092513/http://www.crowsprogramming.com/archives/99 – Chris

0

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

आप IronRuby में अपने नमूना स्क्रिप्ट लिख सकता है और इसे इस तरह दिखेगा:

TURN_POWER_ON 
TUNE_FREQUENCY frequency 
WAIT 5 
if GET_FREQUENCY == frequency 
    REPORT_PASS "Successfully tuned to " + frequency 
else 
    REPORT_FAIL "Failed to tune to " + frequency 
end 
TURN_POWER_OFF 

यहाँ एक डीएसएल हमारे परीक्षक वर्तमान में हमारे यूआई के खिलाफ स्वचालित परीक्षण लिखने के लिए उपयोग कर रहे हैं का एक नमूना है

window = find_window_on_desktop "OurApplication" 
logon_button = window.find "Logon" 
logon_button.click 

list = window.find "ItemList" 
list.should have(0).rows 

add_button = window.find "Add new item" 
add_button.click 
list.should have(1).rows 

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

मैं दृढ़ता से अपने स्वयं के कस्टम भाषा बनाने के ऊपर या तो IronPython या IronRuby के साथ जा रहा अनुशंसा करते हैं ... आप प्रयास की एक अकल्पनीय राशि (और कीड़े)

+0

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

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