2015-10-16 12 views
6

मुझे यहां कुछ बुनियादी याद आ रही है। स्रोत भाषा से बाइटकोड (जावा) या इंटरमीडिएट भाषा (.NET) में संकलित करने और फिर उन्हें JVM या CLR के अंदर से चलाने का क्या उपयोग है?हमें प्रबंधित कोड (मूल पर) की आवश्यकता क्यों है?


प्रबंधित कोड का उपयोग करने के प्रदर्शन (हालांकि मामूली या बड़ी) में कमी है, लेकिन क्या फायदे हैं? मुझे पता है कि कचरा संग्रह और मेमोरी प्रबंधन है, लेकिन क्या इस स्रोत को बिना किसी मध्यवर्ती स्तर की आवश्यकता के सीधे स्रोत को मूल रूप से संकलित करना बेहतर होगा?

इसके अलावा (मैं इसे यहां से जोड़ रहा हूं क्योंकि यह सीधे प्रश्न से संबंधित है) - स्पष्ट रूप से विंडोज 10 यूनिवर्सल ऐप्स .NET Native के साथ संकलित किए गए हैं जो मूल मशीन कोड में संकलित होते हैं। मैं उत्सुक हूं कि यह सभी .NET कार्यक्रमों के साथ पहले क्यों नहीं किया गया था।

+1

बाइटकोड का एक बड़ा लाभ इसे चलाने में सक्षम है वैसे भी आपने वीएम लागू किया है।इसके लिए स्कोप विंडोज़ में सीमित है क्योंकि आप केवल कुछ हद तक आर्किटेक्चर (परमाणु, x86 इत्यादि) को लक्षित कर रहे हैं – Sammy

+0

.NET मूल "मशीन कोड को संकलित नहीं करता" यह अनिवार्य रूप से जित जल्दी करता है, ताकि इसकी आवश्यकता न हो बाद में जुटाने के लिए। यह अभी भी सटीक उसी मशीन कोड में परिवर्तित हो गया है जो यह जिट ​​के दौरान होगा; इसके आपके अत्यधिक विस्तार ने इसे ध्वनि बना दिया जैसे आपने सोचा कि यह जादुई रूप से देशी सी ++ बन गया है। – Krythic

+0

@ क्रिस्टिक मैं देखता हूं। लेकिन वे शब्दों की मेरी पसंद नहीं हैं, मैं उस लिंक से उद्धृत कर रहा था जिसका उल्लेख मैंने किया था ([.NET मूल] (https://msdn.microsoft.com/en-us/vstudio/dotnetnative.aspx))। –

उत्तर

2

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

उस मामले पर विचार करें जहां कोई मध्यवर्ती भाषा नहीं है; आपको प्रत्येक समर्थित भाषा और प्रत्येक समर्थित प्लेटफ़ॉर्म के लिए एक कंपाइलर को विकसित और संयोजित करने की आवश्यकता होगी। आप भाषाओं एल 1, एल 2 और L3 और प्लेटफार्मों P1, P2 और पी 3 है कहो। इसका मतलब यह होगा कि आप को विकसित करने और 9 विभिन्न compilers mantain पूरे करने होंगे: सी 1 (एल 1, पी 1), सी 2 (एल 1, P2), सी 3 (एल 1, पी 3), सी 4 (एल 2, P1) , आदि

दूसरी ओर, एक मध्यवर्ती आम भाषा मैं की सुविधा देता है होने आप को विकसित 3 भाषा विशिष्ट compilers सी 1 (एल 1, मैं), सी 2 (एल 2, मैं) और सी 3 (एल 3, I) और 3 प्लेटफार्म विशिष्ट कंपाइलर सी 4 (आई, पी 1), सी 5 (आई, पी 2) और सी 6 (आई, पी 3)

जाहिर है, आपकी समर्थित भाषा और प्लेटफार्म आधार जितना बड़ा होगा, उतना ही अधिक लागत कम लागत होगी।

यह आपको समर्थित प्लेटफॉर्म या भाषाओं के भविष्य के अतिरिक्त में लचीलापन भी देता है; कोई भी नई भाषा एल 4 केवल एक सिंगल कंपाइलर सी (एल 4, आई) के विकास की आवश्यकता होगी और आप तुरंत एक विकास की कीमत के लिए सभी प्लेटफार्मों का समर्थन करेंगे। इसके विपरीत, यदि आप एक नया मंच है पी 4, आप सी (मैं, पी 4) विकसित करने की आवश्यकता ही होगाऔर, बिंगो, आप एल 1, एल 2 और L3 सब पी 4 में काम कर रहे।

यह मूल रूप से एक जीत जीत स्थिति है।

-1

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

दूसरी तरफ, यदि आप जानते हैं कि आप केवल एक मंच के लिए प्रोग्रामिंग कर रहे हैं और अतिरिक्त प्रदर्शन चाहते हैं, तो जहां एम्बेडेड सॉफ्टवेयर डेवलपमेंट (या निम्न-स्तरीय भाषाएं) आती हैं। जावा और .NET सबसे अच्छा उपयोग किया जाता है जब आप जानते हैं प्रदर्शन इतना महत्वपूर्ण नहीं है।

0

ऐसा इसलिए है क्योंकि देशी कोड से संकलन आपके प्रोग्राम प्लेटफॉर्म को निर्दिष्ट करेगा। हालांकि, इंटरमीडिएट भाषा के रूप में संकलन के साथ, आपका प्रोग्राम पोर्टेबल है और यदि प्लेटफॉर्म निर्दिष्ट जेवीएम/सीएलआर है तो प्रत्येक प्लेटफॉर्म पर चलाया जा सकता है।

जावा और नेट दोनों जावा-इन-टाइम संकलन का उपयोग करते हैं ताकि वे पोर्टेबिलिटी प्रदान कर सकें लेकिन दुभाषिया का उपयोग करने के मुकाबले बेहतर प्रदर्शन कर सकें।

इसके अलावा, माइक्रोसॉफ्ट पहले से ही NGEN एक साथ दृश्य स्टूडियो के साथ मूल कोड को नेट कोड संकलन के लिए प्रदान की गई है:
https://msdn.microsoft.com/en-us/library/6t9t5wcf(v=vs.110).aspx
NGEN और नेट मूल निवासी के बीच एक मुख्य अंतर यह है कि NGEN अभी भी नेट फ्रेमवर्क और नेट पर निर्भर करता है नेटिव प्रोग्राम के साथ नेट के आवश्यक कोड को संकलित करता है इसलिए नेट फ्रेमवर्क की स्थापना की आवश्यकता नहीं है।

-1

जब जावा बाइट कोड उत्पन्न होता है, जो किसी विशेष प्रकार के आर्किटेक्चर के लिए विशिष्ट होता है, तो जावा को 'संकलन को एक बार चलाने' की क्षमता प्राप्त करने में मदद मिलती है। इसके अलावा, यह बहुत कम स्मृति लेता है।

2

यह MSDN से है:

प्रबंधित कोड के लाभ

प्रबंधित भाषाओं भूमि के ऊपर की एक छोटी राशि की कीमत पर, स्मृति प्रबंधन और कचरा संग्रहण के विवरण प्रबंधित करने एक सामान्यीकृत तरीका प्रदान करते हैं। यह व्यापार-बंद आपको त्रुटि-प्रवण कार्यों से मुक्त करता है, और आपको अधिक कॉम्पैक्ट, पठनीय और त्रुटि मुक्त प्रोग्राम लिखने की अनुमति देता है।

संयुक्त राष्ट्र प्रबंधित कोड

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

हालांकि, डेवलपर्स अक्सर अप्रबंधित कोड पसंद करते हैं क्योंकि यह तेजी से निष्पादित करता है, पॉइंटर्स के उपयोग में अधिक लचीलापन देता है, और हार्डवेयर का प्रत्यक्ष नियंत्रण देता है।

+2

ऐसा लगता है कि अनिरुद्ध वर्मा का सवाल प्रबंधित/अप्रबंधित कोड के बारे में कुछ नहीं है। वह सोच रहा है कि जावा/नेट प्रोग्राम में मध्यवर्ती भाषा का उपयोग क्यों किया जाता है। –

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