2011-10-21 9 views
94

नई Microsoft Roslyn के बारे में इन्फोवर्ल्ड पर एक press release कल से:माइक्रोसॉफ्ट रोसलिन बनाम CodeDom

"deconstructed" इस तरह का का सबसे स्पष्ट लाभ संकलक है कि यह पूरे संकलन-निष्पादित प्रक्रिया होने की अनुमति देता .NET अनुप्रयोगों के भीतर से आह्वान किया गया। हेजल्सबर्ग ने एक सी # प्रोग्राम का प्रदर्शन किया जो ने सी # कंपाइलर को तारों के रूप में कुछ कोड स्निपेट पास किए; कंपाइलर परिणामस्वरूप आईएल असेंबली कोड को ऑब्जेक्ट के रूप में लौटा, जो तब निष्पादन के लिए सामान्य भाषा रनटाइम (सीएलआर) को पास कर दिया गया था। देखा! Roslyn के साथ, सी # रनटाइम पर कोड उत्पन्न करने और उत्पन्न करने की गतिशील भाषा की क्षमता प्राप्त करता है।

मैं CSharpCodeProvider.CompileAssemblyFromSource साथ नेट 4 की रिहाई जो मैं एक ASP.Net परियोजना थोड़ी देर पहले कि करता है वास्तव में लिखा में तथ्य प्रयोग में के बाद से यह करने के लिए कर लिया है - एक उपयोगकर्ता में कोड में टाइप करने की अनुमति देता है एक टेक्स्टबॉक्स, संदर्भ के लिए असेंबली/नेमस्पेस चुनें, और उसके बाद Windows Azure पर लाइव पर्यावरण कोड परीक्षण के लिए उस कोड से आउटपुट निष्पादित करें और प्रदर्शित करें।

CodeDom Roslyn के लिए एक अग्रदूत का हिस्सा है? CodeDom से Roslyn का विशेष लाभ क्या है?

उत्तर

215

अस्वीकरण: मैं रोज़लिन टीम पर माइक्रोसॉफ्ट के लिए काम करता हूं।

CodeDom रोसलिन का पूर्वाभ्यास है, लेकिन केवल मामूली संबंधित है। अनिवार्य रूप से, कोडडॉम डिजाइनरों (ला ला WinForms) का समर्थन करने के लिए .NET 1.0 में जोड़ा गया कोड उत्पन्न करने के लिए एक सरल और (कुछ हद तक) लंगेज अज्ञेयवादी तरीका है। चूंकि कोडडॉम एक एकीकृत मॉडल प्रदान करने का प्रयास था जो सी #, वीबी और अन्य भाषाओं में कोड उत्पन्न कर सकता है, इसमें किसी भी भाषा के साथ उच्च निष्ठा नहीं है (यही कारण है कि आप कोडडॉम के साथ स्विच स्टेटमेंट नहीं बना सकते हैं)। CSharpCodeProvider.CompileAssemblyFromSource बस csc.exe निष्पादित करने के आसपास एक रैपर है।

रोज़लिन एक पूरी तरह से अलग जानवर है। यह प्रबंधित कोड का उपयोग करके ग्राउंड अप से सी # और वीबी कंपाइलर्स दोनों का पुनः लिखना है - सी # में सी # और वीबी में वीबी (csc.exe के संस्करण और vbc.exe जो आज जहाज को मूल कोड में लिखा गया है)। प्रबंधित कोड में उन्हें बनाने का लाभ यह है कि उपयोगकर्ता असली कंपाइलर को .NET अनुप्रयोगों से पुस्तकालयों के रूप में संदर्भित कर सकते हैं (कोई रैपर आवश्यक नहीं)।

संकलक पाइप लाइन के प्रत्येक घटक निर्माण करते हैं, हम शीर्ष पर सार्वजनिक एपीआई उजागर किया है:

  • पार्सर -> सिंटेक्स ट्री एपीआई
  • प्रतीक मेज/मेटाडाटा आयात -> प्रतीक एपीआई
  • बाइंडर -> बाध्यकारी और फ्लो विश्लेषण एपीआई
  • आईएल Emitter -> उत्सर्जन एपीआई

रोसलिन एक परिष्कृत सी # एक के रूप में इस्तेमाल किया जा सकता एनडी वीबी स्रोत कोड जनरेटर, लेकिन वह जगह है जहां CodeDom की समानता समाप्त होती है। Roslyn कंपाइलर एपीआई कोड का विश्लेषण करने के लिए इस्तेमाल किया जा सकता है, अर्थपूर्ण विश्लेषण प्रदर्शन, संकलित और कोड गतिशील रूप से मूल्यांकन आदि।

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

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

+2

@ डस्टिन: क्या रोज़लिन अन्य भाषाओं का समर्थन कर रहे हैं? जावास्क्रिप्ट (.NET), उदाहरण के लिए? – dbarros

+0

@ डस्टिन: यह एक पूर्ण आईडीई अनुभव बनाने के लिए एकदम सही है जो मेरे संगठन में कोड गुणवत्ता को लागू कर सकता है, हालांकि मुझे मैन्युअल कोड समीक्षा का पूर्ण प्रतिस्थापन नहीं दिख रहा है, लेकिन मुझे गुणवत्ता में काफी वृद्धि दिखाई देती है। शीघ्र! –

+0

यह बहुत अच्छा होगा अगर किसी ने कोडडॉम को कोड में कनवर्ट करने के लिए पहले से ही रोज़लिन आधारित टूल बनाया है जो Roslyn's SyntaxFactory का उपयोग करता है ... (आंशिक रूप से क्योंकि नेट कोर में रोज़लिन है लेकिन कोई कोडडॉम नहीं है और मैं चारों ओर एक lib का उपयोग कर रहा हूं CodeDom) – Emyr

40

कोडडॉम आपको संकलित करने की अनुमति देता है - लेकिन यह आपको वास्तव में कोड के बारे में जानकारी प्राप्त करने की क्षमता नहीं देता है (कंपाइलर त्रुटियों के अलावा)। असल में, यह एक काला बॉक्स है जहां आप कहते हैं "इसे संकलित करें" और यह कहता है "मैं सफल हुआ" या "मैं असफल रहा, यहां कुछ त्रुटियां हैं"।

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

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

6

रोसलिन पूरी प्रक्रिया की बहुत अधिक नियंत्रण की अनुमति देता है - उदाहरण के लिए आप स्ट्रिंग का विश्लेषण कर सकते हैं और (विश्लेषण के आधार पर संकलन प्रक्रिया के भीतर ऑन-द-मक्खी) भी अतिरिक्त कोड उत्पन्न, आदि

CodeDom "बस कंपाइलर का उपयोग कर रहा है" जबकि रोज़लिन "पूरी तरह से (उप-) भागों" के साथ एक सेवा के रूप में कंपाइलर है ... Roslyn के साथ आप "कंपाइलर के अंदर" हैं और देख सकते हैं कि एक कंपाइलर परिप्रेक्ष्य से कोड कैसा दिखता है आप वर्तमान में संभव नहीं तरीकों से चीजों को बदलने के लिए।

उदाहरण के लिए, आप रोज़लिन का उपयोग सी # बढ़ाने के लिए कर सकते हैं - एओपी कार्यान्वयन की वर्तमान स्थिति की तुलना में कुछ बहुत आसान और बेहतर है।

वर्तमान रोसलिन राज्य का अवलोकन और पहुंच के विभिन्न स्तर के लिए

और को नियंत्रित यह प्रदान करता है, को देखने के http://msdn.microsoft.com/en-us/hh500769

अद्यतन

माइक्रोसॉफ्ट बस एक नया CTP अतिरिक्त सुविधाओं और एपीआई के बहुत सारे के साथ उपलब्ध कराया परिवर्तन/परिवर्धन। विवरण के लिए here देखें।

+1

दरअसल, यह सच नहीं है कि आप रोज़लिन का उपयोग अतिरिक्त कीवर्ड के साथ सी # बढ़ाने के लिए कर सकते हैं। –

+0

धन्यवाद ... सही किया गया ... हालांकि पहली रिलीज में नहीं, मैं सुंदर हूं कि यह संभव होगा ... – Yahia

+2

@ डस्टिन कैंपबेल, क्या होगा यदि आपने कोड उत्पन्न करने के कारण छद्म कीवर्ड को जो भी संकलक त्रुटि संभाली है? –

9

एक बड़ा अंतर मैं देख रहा हूँ: CodeDom, हर बार जब आप के साथ संकलन कुछ C# या VB.NET, यह प्रक्रिया से बाहर होता है। सीएससी.एक्सई या वीबीसी.एक्सई दृश्य के पीछे असली श्रमिक हैं।

यदि आप सेवा के निर्माण करने के लिए वास्तुकला, क्षमता, अलगाव, आदि (आप Azure उल्लेख) के मामले में चाहते हैं, यह बहुत अच्छा नहीं है।

रोज़लिन के साथ यह प्रक्रिया में है।

मुझे लगता है इस कारण वे इसे "एक सेवा के रूप संकलक" कहते हैं में से एक है।

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

पीएस: CSC.exe और VBC.exe से एक उल्लेखनीय अंतर: Roslyn शुद्ध .NET लगता है (और CCI का उपयोग करता है)।

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