2009-12-18 21 views
7

पहला .NET कोड MSIL को संकलित करता है और फिर जेआईटी इसे मशीन आश्रित कोड में परिवर्तित करता है। क्या कोई मुझे बता सकता है कि 2 लाभ संकलन के कारण सभी लाभकारी क्या हैं। धन्यवादक्यों .NET कोड MSIL को संकलित करता है?

+2

ठीक है, जावा ने उस साल पहले किया था .NET का जन्म हुआ था। तो मुझे लगता है कि .NET ने उस विचार की प्रतिलिपि बनाई है। :) –

+1

खैर, यूसीएसडी पास्कल ने 1 9 70 के दशक में और जावा (और कई अन्य) में "प्रतिलिपि बनाई"। आ जाओ! :-) – CesarGon

उत्तर

20

कुछ कारण हैं। सबसे पहले और सबसे महत्वपूर्ण यह संभवतः पार मंच बनाने के लिए है। यदि सी # या अन्य .NET भाषाओं को मूल कोड में सीधे संकलित किया जाता है, तो उन्हें चलाने वाले प्रत्येक प्लेटफ़ॉर्म के लिए उन्हें पुन: संकलित करना होगा। एक वीएम के साथ, सभी कोड एक मध्यवर्ती प्रारूप में रखा जा सकता है, और आपको केवल प्रत्येक मंच के लिए एक वीएम कार्यान्वयन लिखना होगा।

इसके अलावा, एक भाषा-अज्ञेय मध्यस्थ भाषा होने के साथ, आप कई भाषाओं में लिखी गई सभी संदर्भित असेंबली असेंबली कई उच्च स्तरीय भाषाओं (सी #, वीबी.नेट, पायथन आदि) प्राप्त कर सकते हैं। चूंकि वे सभी एक ही चीज़ में संकलित होते हैं, इसलिए वे एक-दूसरे के साथ सहजता से काम कर सकते हैं।

प्रदर्शन लाभ भी हैं। जेआईटी कंपाइलर विशेष रूप से उस मशीन के लिए आक्रामक अनुकूलन कर सकता है जिस पर कोड उस समय चल रहा है। मुझे नहीं पता कि .NET JIT कंपाइलर इस अर्थ में कितना अनुकूलन करता है, लेकिन बहुत बड़े सैद्धांतिक लाभ हो सकते हैं।

+2

क्रॉस-प्लेटफ़ॉर्म वास्तव में .NET ढांचे पर बहुत अधिक लागू नहीं होता है क्योंकि यह केवल विंडोज़ पर चलने के लिए था, लेकिन अभी भी एक वैध बिंदु है। +1 –

+8

वास्तव में? फिर मोनो समझाओ। :) –

+0

@ मैट क्या आप कृपया समझ सकते हैं कि मैं अलग-अलग मंच पर अपना .NET कोड चलाने के लिए कैसे संभव बना सकता हूं? मतलब है कि मैं अपने .net एप्लिकेशन को लिनक्स पर चलाने के लिए चाहता हूं? क्या यह संभव है? – Siddiqui

1
  • एक निष्पादन मंच के लिए बाध्य नहीं है पर पाया जा सकता। उदाहरण के लिए एक्सएनए पीपीसी (एक्सबॉक्स 360) और x86 प्रोसेसर दोनों को लक्षित करता है। कुछ कार्यक्रम लिनक्स या ओएसएक्स पर मोनो पर चलेंगे।

  • यह आप बेहतर लक्ष्य मशीन के लिए अनुकूलित या लापता कार्यों को बदलने के लिए अनुमति देता है:

    • उदाहरण के लिए OSX> = OpenCL साथ रनटाइम पर GPU निर्देश लापता में 10.5 संकलित करता है।
    • आइए कहें कि आप एक सीपीयू पर फ्लोटिंग पॉइंट सपोर्ट के बिना काम कर रहे हैं, तो आप पूर्ण कोड पुनर्लेखन की आवश्यकता के बिना इसे JIT के साथ अनुकरण कर सकते हैं।
    • भविष्य में किसी बिंदु पर GPU या अन्य लक्ष्यों को गतिशील रूप से प्रसंस्करण करना संभव हो सकता है (मुझे संदेह है कि कार्यात्मक भाषाएं इसके लिए कुछ बेहतर अनुकूल हैं)।
+0

आप कार्यात्मक भाषा सम्मिलन के बारे में सही हैं। * निश्चित * स्थितियों के लिए जीपीयू वास्तव में शक्तिशाली हैं। कार्यात्मक भाषाएं बुनियादी ढांचे के लिए यह तय करती हैं कि ये स्थितियां कब आती हैं। –

+0

मुझे लगता है कि भविष्य दोनों एफपी + बड़े पैमाने पर थ्रेड समांतर कोड (जीपीजीपीयू) का मिश्रण होगा। – Stringer

1

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

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