2010-06-04 11 views
10

एंडर्स हेजल्सबर्ग की .NET 4.0 प्रस्तुति में उन्होंने नेट 5.0 ("या कुछ भावी रिलीज") में चर्चा की, वे "एक सेवा के रूप में कंपाइलर" मॉडल पर काम कर रहे हैं।कंपाइलर के सेवा के रूप में

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

मैं एक असली दुनिया का उदाहरण खोजने के लिए संघर्ष कर रहा हूं जहां यह वास्तव में उपयोगी हो सकता है। क्या मैं यहां प्रमुख अवधारणा खो रहा हूं? या यह वास्तव में भाषा का लाभ उठाने जा रहा है?

[1]: एक सेवा

+2

आत्म-संशोधित अनुवांशिक एल्गोरिदम के बारे में कैसे? क्या मैंने बस कुछ buzzwords फेंक दिया? शायद। या शायद हम स्काईनेट के करीब एक कदम हैं .... – Randolpho

उत्तर

4

कुछ समस्याओं के लिए, एक प्रोग्राम लिखना आसान है जो एक प्रोग्राम उत्पन्न कर सकता है जो वास्तविक समस्या को हल करेगा। एक क्षेत्र जहां यह विशेष रूप से उपयोगी है कंपाइलरों के लिए पार्सर्स बनाने के लिए है।

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

उस समस्या का मेरा पहला दृष्टिकोण Reflection.Emit का उपयोग करके एमएसआईएल इंजेक्शन को कोड किया गया था। दूसरा दृष्टिकोण थोड़ा अधिक गतिशील था और अभिव्यक्ति पेड़ पर निर्भर था, जिसे प्रभावी ढंग से बनाया जा सकता है और रनटाइम पर संकलित किया जा सकता है ताकि मेरे हाथ को कोडित एमएसआईएल इंजेक्शन के रूप में समान कार्यक्षमता प्रदान की जा सके। आप देख सकते हैं कि मोरलिंक ट्रंक में महसूस किया गया है (बस मॉडलश्रेडर साइट पर एक नज़र डालें, इसके लिए एक लिंक है)। एक सेवा के रूप में कंपाइलर होने से मुझे वास्तव में अमूर्त स्तर बढ़ाने और सी # कोड उत्सर्जित करने की अनुमति मिल जाएगी जो तब MSIL को संकलित हो जाएगी।

डोमेन विशिष्ट भाषाओं के लिए मामला पहले से ही बनाया जा चुका है, मुझे लगता है कि सी # जैसी एक अनिवार्य भाषा "कमांड लाइन" परिदृश्य के लिए उपयुक्त नहीं है बल्कि बड़ी लिपियों के बजाय उपयुक्त है। FAKE नामक एफ # डीएसएल के आधार पर एक स्वच्छ बनाने प्रणाली है, जो एक सेवा के रूप में कंपाइलर की कई अवधारणाओं को उधार देती है। विजुअलस्टूडियो के अंदर एफ # इंटरेक्टिव विंडो (क्या इसे इस तरह कहा जाता है?) द्वारा समान अवधारणाओं को नियोजित किया जाता है।

4

रूप http://www.simple-talk.com/opinion/geek-of-the-week/anders-hejlsberg-geek-of-the-week/ संकलक यह कैसे उपयोगी खेल के लिए उपयोगकर्ता के तानाना के लिए है हो सकता है की एक वास्तविक दुनिया उदाहरण। अधिकांश आधुनिक गेम स्क्रिप्टिंग भाषाओं के माध्यम से कुछ प्रकार की उपयोगकर्ता-विस्तारशीलता की अनुमति देते हैं, जो अपेक्षाकृत धीमी हो सकती है, या संकलित डीएलएल के माध्यम से विकास मंच (और इसका उपयोग करने के लिए ज्ञान) की आवश्यकता होती है। यह उपयोगकर्ताओं को सी # का उपयोग करके गेम में एक्सटेंशन लिखने की अनुमति देगा, जिसे रनटाइम पर गेम द्वारा संकलित किया जाएगा, उपयोगकर्ता को इसे स्वयं संकलित करने की आवश्यकता के बिना। यह प्रत्येक छोटे बदलाव के लिए गेम को पुनरारंभ किए बिना, इन-गेम कंसोल विंडो में C# कोड दर्ज करके नए विचारों का परीक्षण करने की अनुमति देगा। वर्तमान में इस प्रकार की चीज एम्बेडेड व्याख्या की गई स्क्रिप्टिंग भाषाओं के साथ ही वास्तव में संभव है।

+1

न केवल खेल। कई व्यावसायिक तर्क कच्चे सी # कोड के रूप में एम्बेड किए जा सकते हैं, और यदि आप चाहते हैं कि आप उन्हें रनटाइम पर बदल सकें। –

2

मुझे लगता है कि एक और उदाहरण कॉपी सुरक्षा है। आपके मशीन पर कोड का अनूठा टुकड़ा हो सकता है, जो एक सीपीयू आईडी में प्रोग्राम को जोड़ने के लिए इंस्टॉलेशन पर उत्पन्न होता है।

मान लें कि मैं कर गणना में पैरामीटर के रूप में आपके सीरियल नंबर का उपयोग करता हूं। कार्यक्रम की एक प्रति करना आसान है और पूरी तरह बेकार है।

0

इसके अलावा यह लेखन कार्यक्रम बनाता है जिनके पास लिंककैड की समान कार्यक्षमता वास्तव में आसान है।

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

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