कोई भी Microsoft "Roslyn" में समय क्यों लगाएगा?


37

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

रोसलिन को "स्क्रिप्ट" कोड की क्षमता भी दिखाई देती है और इसे मक्खी (कोडडोम के समान) पर संकलित / निष्पादित करने की क्षमता है लेकिन मैं अपने अनुभव में उस प्रकार की कार्यक्षमता के लिए सीमित उपयोग करता हूं।

जबकि कोड विश्लेषण और मेट्रिक्स तत्व एक दिलचस्प स्थान है ... यह एक ऐसी चीज है जो बहुत लंबे समय से आसपास है और कई प्रदाता हैं जो पहले से ही कोड विश्लेषण और रीफैक्टरिंग टूल (जैसे ReSharper, CodeRush) में बहुत पैसा लगा चुके हैं , nCover, आदि) और वे इसका एक बहुत अच्छा काम करते हैं!

कोई भी कंपनी मौजूदा उपकरणों में से एक के लिए लाइसेंस खरीदने के माध्यम से लागत के एक अंश पर प्रदान की जा सकने वाली किसी चीज़ को लागू करने के लिए अपने रास्ते से बाहर क्यों जाएगी?

हो सकता है कि मैंने रोसलिन परियोजना की कुछ प्रमुख कार्यक्षमता को याद किया हो जो इसे उल्लेखित उपकरणों के डोमेन के बाहर रखता है ...


4
रोसलिन का मुख्य बिंदु अधिक Microsoft इंटर्न है - एक आसान एक्स्टेंसिबल प्रबंधित C # संकलक बनाना। इस तरह से टीम नई भाषा सुविधाओं को कार्यान्वित और आज़मा सकती है। इसके अलावा नए अनुकूलन एल्गोरिदम को लागू करना आसान हो जाएगा।
JustAnotherUserYouMayKnowOrNot

1
हां पेनफोल्ड - मुझे संदेह है कि आप कुछ चीजें याद कर सकते हैं। क्या आपने Channel9 पर डस्टिन कैंपबेल साक्षात्कार देखा है? Channel9.msdn.com/Events/Ch9Live/…
जेम्स स्नेल

3
यह Microsoft उत्पादों के सफल / लाभदायक ऐड-ऑन विकसित करने का जोखिम है, वे इसे अगले संस्करण में डाल सकते हैं।
जेफ़ो

10
इसके अलावा, आप सुनिश्चित कर सकते हैं कि ReSharper के पीछे वाले लोग अतिरिक्त कार्यक्षमता के विचारों पर खुद को गीला कर रहे हैं, जिसमें वे प्लग इन कर सकते हैं। हाँ, उन्होंने C # parser / विश्लेषक लिखा है, लेकिन यदि वे इसका लाभ उठा सकते हैं, तो प्रति फीचर लागत में काफी गिरावट आएगी। वास्तविक MS C # इंजन।
बाइनरी वॉरियर

2
रोजलिन के एक दिलचस्प उपयोग के लिए स्क्रिप्ट देखें। github.com/scriptcs/scriptcs
Ashley Davis

जवाबों:


53

रोसलिन को "स्क्रिप्ट" कोड की क्षमता भी दिखाई देती है और इसे मक्खी (कोडडोम के समान) पर संकलित / निष्पादित करने की क्षमता है लेकिन मैं अपने अनुभव में उस प्रकार की कार्यक्षमता के लिए सीमित उपयोग करता हूं।

ऑन-द-फ्लाई संकलन और निष्पादन रोसलिन का प्रमुख लाभ है। मुझे लगता है कि आप इस सुविधा के लाभ को कम कर सकते हैं क्योंकि आप अपने अनुभव में उपयोग के मामले में कभी नहीं आए हैं जहां यह वास्तव में चमकता है। और यह समझ में आता है; गतिशील संकलन की आवश्यकता शायद एक आला विशेषता है, लेकिन यह कुछ शक्तिशाली अनुप्रयोगों के लिए प्रदान करता है जो इसके बिना बहुत अधिक कठिन होगा।

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

  • प्लगइन फ़ाइलें जो रनटाइम पर लोड की जाती हैं, संकलित की जाती हैं और "पैरेंट" एप्लिकेशन के निष्पादन में शामिल होती हैं।
  • एक DSL बनाने के लिए जो तब रनटाइम पर C # में अनुवादित होता है और Roslyn का उपयोग करके संकलित किया जाता है।
  • प्रोग्रामर-ओरिएंटेड एप्लिकेशन बनाना जो C # लेता है, उसका विश्लेषण करता है, उसका अनुवाद करता है, आदि।
  • संकलन के बाद उनके मतभेदों के लिए कोड के दो विखंडन की तुलना में, व्हॉट्सएप जैसे "सतह" मतभेदों के विपरीत। इसे सिमेंटिक डिफ के रूप में जाना जाता है ।

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


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

@RationalGeek - उदाहरणों के लिए धन्यवाद, मैंने DSL => C # मार्ग उदाहरण पर विचार नहीं किया था ... मैं कुछ सीनाज़ोरी की कल्पना कर सकता हूं कि व्यावसायिक अनुप्रयोगों में यह बहुत शक्तिशाली होगा। बहुत सारे अन्य उदाहरण जो मैंने देखे हैं (न सिर्फ आपके) मैंने पहले बताए रिफ्लेक्टरिंग टूल्स के साथ बहुत अधिक ओवरलैप किया। मेरे मूल प्रश्न का दूसरा भाग यह था कि कोई व्यक्ति इस विश्लेषण को करने के लिए उपकरणों को विकसित करने के लिए पैसे का निवेश क्यों करेगा जब लागत के कुछ अंशों में कुछ उत्कृष्ट एक पूर्व-लुढ़का हुआ हो ... लेकिन मुझे लगता है कि हमेशा दूसरे के लिए जगह है (उम्मीद है कि बेहतर) उपकरण का सेट! :)
रिचर्ड हूपर

@Penfold में हमेशा नए डेवलपर टूल के लिए जगह होती है ... :-)
RationalGeek

1
शब्दार्थ भेद केवल संकलन के उद्देश्यों के लिए नहीं है। प्रत्येक संस्करण नियंत्रण प्रणाली को एक अंतर की आवश्यकता होती है, और अधिकांश एक बेवकूफ अंतर का उपयोग करते हैं। बस 2 कार्यों की अदला-बदली करें और गड़बड़ को देखें, जब अंतर सोचता है कि यह कुछ मेल कर सकता है (और {
MSalters

यहाँ एक बड़ा है: ASP.NET ऐप लिखते समय स्वचालित पुन: संकलन, वेब ऐप के पुनर्निर्माण और पुन: निर्माण के बिना। अंत में ASP.NET vNext में घोषणा की गई, यह काफी हद तक C # स्क्रिप्टिंग भाषा की तरह ही काम करेगा ... सिवाय इसके कि यह दोनों ही प्रकार के असुरक्षित और प्रदर्शनकारी हैं। मैं इसे इस सामान्य दृष्टिकोण की शुरुआत के रूप में देखता हूं, अंततः अमीर-ग्राहक एप्लिकेशन (मोबाइल, डेस्कटॉप) में अपना रास्ता बना लेगा ताकि आप रनटाइम पर अपना कोड बदल सकें। यह वेब ऐप्स के साथ बहुत आसान है क्योंकि परिभाषा के अनुसार प्रत्येक अनुरोध स्टेटलेस है - लेकिन समय के साथ यह अन्य ऐप आर्किटेक्चर में भी अपना रास्ता बना लेगा।
मार्च्य

12

मुझे यकीन है कि कंपनियां टूलींग प्रदान करती हैं (जैसे, JetBrains *) रोज़लिन में बहुत रुचि रखते हैं। Microsoft टूलिंग बनाना आसान बनाना चाहता है, क्योंकि अच्छी टूलिंग Microsoft के पारिस्थितिकी तंत्र के उपयोग को प्रोत्साहित करती है।

* JetBrains ब्लॉग ( इस प्रविष्टि ) के अनुसार, JetBrians ने घोषणा की है कि वे रोज़लिन का उपयोग नहीं करेंगे। हालाँकि, मुझे लगता है कि JetBrains के किसी भी नए प्रतियोगी (जिनके पास काम करने के लिए पहले से मौजूद कोडबेस नहीं है) रोजलिन का उपयोग करेगा; यह उन्हें एक शुरुआत देता है।

प्रश्न १० में ६ , १० जवाब रोजलिन पर :

6: रोजलिन के कुछ व्यावहारिक उपयोग क्या हैं? एक डेवलपर के रूप में यह मेरी मदद कैसे करेगा?

रोज़लिन के पहले उपयोगों में से एक जो दिमाग में आता है, वह है बिजनेस रूल्स इंजन। रोजलिन से पहले, उपयोगकर्ता मैक्रोज़ का मूल्यांकन आम तौर पर अनुप्रयोगों के लिए विजुअल बेसिक (VBA) को लागू करना, रूबी अभिव्यक्तियों के साथ DLR को कॉल करना, या डायनामिक रूप से उत्पन्न विज़ुअल बेसिक या सी # कोड के साथ कमांड-लाइन कंपाइलर को बाहर करना और चलाने का परिणाम प्राप्त करना है। वह कोड। ये तरीके आदर्श से कम थे।

Roslyn आसानी से C # और (अंततः) विजुअल बेसिक कोड को मूल्यांकन () फ़ंक्शन के साथ गतिशील संकलन और निष्पादन की अनुमति देगा, जैसा कि एरिक वोगेल के लेख "C # में रोज़लिन स्क्रिप्टिंग एपीआई का उपयोग करके" प्रदर्शित किया गया है। उपयोगकर्ता मैक्रोज़ को उसी भाषा में लिखा जाता है, जो एप्लिकेशन डेवलपर्स के लिए व्यावसायिक नियमों का प्रतिनिधित्व करने वाले उपयोगकर्ता मैक्रोज़ का समर्थन करना आसान बना देगा।

रोजलिन के साथ कोड रीफैक्टरिंग बहुत आसान हो जाता है। रोसलिन से पहले, DevExpress CodeRush और Refactor Pro और JetBrains ReSharper जैसे टूल के डेवलपर्स को अपने उत्पादों की नींव के रूप में संकलक के कई ऑपरेशनों को फिर से बनाना पड़ा। रोसलिन के साथ, रिफ्लेक्टरिंग डेवलपर्स सीधे मौजूदा संकलक क्षमताओं का लाभ उठा सकते हैं। रोजलिन व्यापक रूप से उपलब्ध होने के बाद, मैं व्यक्तिगत रिफैक्टरिंग नियमों को स्थापित करने के लिए नूगेट पैकेज की उपस्थिति की कल्पना कर सकता हूं।


4
"उपयोगकर्ता मैक्रोज़ को उसी भाषा में लिखा जाता है, जो एप्लिकेशन डेवलपर्स के लिए व्यावसायिक नियमों का प्रतिनिधित्व करने वाले उपयोगकर्ता मैक्रोज़ का समर्थन करना आसान बना देगा।" - क्या गलत होने की सम्भावना है!
gbjbaanb

10

मैं बेसब्री से उस दिन का इंतजार करता हूं जब सभी कंपाइलर कंपाइलर को सेवा (सीएएएस) के रूप में पेश करते हैं। हमें यह सोचना बंद करना होगा कि कंपाइलर केवल प्री-लिंकर कोड का उत्सर्जन करते हैं और यह सोचने लगते हैं कि कंपाइलर उन पेड़ों का उत्सर्जन करते हैं जिन्हें कई लक्ष्यों में बदला जा सकता है। सभी संकलक के पास पेड़ों और वैकल्पिक रूप से JSON / XML का उत्सर्जन करने की सुविधा होनी चाहिए। तब आउटपुट कई प्रकार के लक्ष्यों में बदल सकता है जैसे कि सुशोभित समान भाषा, सी, आईएल स्रोत, आईएल बाइनरी, जावा, जावास्क्रिप्ट, एलएलवीएम, पीआईसी निष्पादन योग्य, और यहां तक ​​कि पूर्व-लिंकर कोड भी।

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

मैं वास्तव में निराश हूं कि Microsoft ने बहुत समय पहले सीएएएस लागू नहीं किया है। उदाहरण के लिए, इसका उपयोग VB6 के लिए माइग्रेशन पथ के रूप में कुछ और, या .net से C ++ के लिए किया जा सकता है।


1

MSFT रोजलिन में निवेश क्यों कर रहा है, इसका सरल उत्तर यह है कि C # कंपाइलर के लिए उनका मौजूदा कोडबेस अब 5 साल पुराना है - 11 साल। यह एक है लंबे समय किसी भी codebase प्रबंधनीय रहने के लिए के लिए। इसके अलावा, जब से वे फिर से लिख रहे हैं, उन्होंने इसे करने में निवेश करने का फैसला किया ताकि इसके सभी इंटर्न को एपीआई के रूप में उजागर किया जाए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.