2015-09-18 9 views
5

मैं एक वेब अनुप्रयोग के लिए सी # .NET का उपयोग कर रहा हूँ। मैंने पढ़ा है कि जेआईटी संकलन रन-टाइम पर होता है, जिसका मतलब है (अगर मैं गलत हूं तो मुझे सही करें) कि संकलन तब होगा जब अनुरोध आईआईएस को हिट करेगा।अगली बार (एओटी) संकलन कब होता है?

एक और संकलन समाधान MSBuild का उपयोग कर सीआईएल को उच्च स्तरीय कोड में परिवर्तित करने के निर्माण के चरण के दौरान csc.exe का उपयोग कर होता है।

अगर कोई JIT था और हम AOT उपयोग करना चाहता था, जहां यह सब में फिट AOT हैं?

मेरा प्रश्न पहले अनुरोध करने के लिए कोड के निर्माण से पूरे चरण में किस बिंदु, AOT संकलन होता है पर है? (मंच/रूपरेखा कोई फर्क नहीं पड़ता)

+1

"बिल्डिंग" तब होता है जब एओटी संकलन सी, सी ++ ऐप्स की तरह होता है, सी # कोड को "बिल्डिंग" के दौरान निर्दिष्ट विशिष्ट प्लेटफ़ॉर्म के लिए सीधे मशीन कोड पर संकलित किया जाएगा। – shashi

+2

ठीक है, मंच/ढांचा महत्वपूर्ण है। सामान्य उपयोगकर्ता प्रोग्राम चलाने से कुछ सप्ताह पहले .NET में एकमात्र पूर्ण शुद्ध एओटी होता है। रेडमंड में एक स्टोर सर्वर पर, .NET मूल का उपयोग कर। वेब ऐप के साथ कुछ भी करने के लिए नहीं है, आप केवल Ngen का उपयोग कर सकते हैं। प्रतिबिंब कोड और कुछ जेनेरिक अभी भी जब्त कर रहे हैं। –

उत्तर

10

Googling और अनुसंधान के एक बहुत बाद, मुझे पता चला है कि compilers के अपने बुनियादी समझ गलत था।

एक संकलक एक प्रोग्राम है जो भाषा वाई में भाषा एक्स एक कार्यक्रम में एक कार्यक्रम परिवर्तित करता है। भाषा वाई कुछ भी (देशी मशीन कोड, मध्यवर्ती कोड/बाईटकोड, कुछ अन्य भाषा जेड, या खुद को एक ही भाषा) हो सकता है।

एक संकलक जरूरी एक प्रोग्राम है जो एम-कोड के लिए भाषा एक्स में एक कार्यक्रम धर्मान्तरित नहीं है।

उदाहरण के लिए, एक संकलन उच्च संकलन सी # कोड से सीआईएल को एक कंपाइलर csc.exe का उपयोग करके होता है। (मुझे लगता है कि कैसे याद कर सकता है? ओह!)

इसके अलावा, समय आगे-के समय और बस-इन-टाइम compilers क्रम को संदर्भित करता है में। तो, आगे के समय संकलक में, प्रोग्राम चलाने से पहले संकलन होता है, आमतौर पर एक बिल्ड चरण के रूप में जोड़ा जाता है। जबकि जस्ट-इन-टाइम कंपाइलर में, प्रोग्राम चल रहा है, जबकि संकलन हो रहा है।

सी # नेट परिप्रेक्ष्य में कहें और मेरे सवाल का जवाब करने के लिए, कोल इंडिया द्वारा MSBuildCsc.exe उपयोग कर किसी भी विचार CLR JIT या AOT संकलक का उपयोग करता है कि क्या बिना उत्पन्न होता है। यह कार्यक्रम चलाने के समय है कि जेआईटी या एओटी कंपाइलर कार्रवाई में आता है। AOT संकलक देशी मशीन कोड (भाषा वाई) से पहले कार्यक्रम चलाया जाता है में पूरे विधानसभाओं (सीआईएल में , या भाषा एक्स) संकलित करता है। JIT कम्पाइलर देशी मशीन कोड (भाषा वाई) जब पद्धतियों को बुलाया जाता में अलग-अलग तरीकों और वर्गों (सीआईएल में , या भाषा एक्स) संकलित करता है।

CLR डिफ़ॉल्ट रूप से JIT कम्पाइलर प्रदान करता है लेकिन यह भी Native Image Generator(Ngen.exe) का उपयोग कर AOT संकलन का समर्थन करता है।

+0

अच्छा शोध। ध्यान दें कि एओटी शब्द आमतौर पर तब प्रयोग किया जाता है जब संकलन समय पर होता है। एक अच्छा उदाहरण एंड्रॉइड 5.0+ में नया एंड्रॉइड रनटाइम (एआरटी) है, जो जेआईटीइंग के बजाए इंस्टॉल किए जाने पर ऐप्स को संकलित करता है। @shashi ने विंडोज स्टोर ऐप्स के बारे में आपकी मूल पोस्ट पर टिप्पणी की। एमएस एओटी को .NET विंडोज फोन ऐप संकलित कर रहा है, लेकिन इंस्टॉल समय पर फोन पर संकलन करने की बजाए, यह विंडोज स्टोर सर्वर पर डाउनलोड और स्थापित होने से पहले है। ऐप्पल ऐप्पल वॉच ऐप के साथ कुछ ऐसा ही करता है। – LearningFast

+0

जब यह वास्तव में होता है: * एओटी कंपाइलर प्रोग्राम चलाने से पहले देशी असेंबली (सीआईएल, या भाषा एक्स में) देशी मशीन कोड (भाषा वाई) में संकलित करता है * – kravemir

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