2008-09-11 23 views
49

मैं लगभग बीस वर्षों के लिए सी/सी ++ कोड लिख रहा हूं, और मुझे पर्ल, पायथन, PHP और कुछ जावा भी पता है, और मैं खुद को जावास्क्रिप्ट पढ़ रहा हूं। लेकिन मैंने कभी भी .NET, VB, या C# सामान नहीं किया है। प्रबंधित किया गया कोड का मतलब क्या है?वास्तव में "प्रबंधित" कोड क्या है?

विकिपीडिया describes it बस के रूप में

कोड है कि एक आभासी मशीन

के प्रबंधन के तहत कार्यान्वित और यह विशेष रूप से कहते हैं जावा है कि (आमतौर पर) कोड है, इसलिए कामयाब

  • यह शब्द केवल सी #/.NET पर लागू क्यों होता है?
  • क्या आप सी # को एक .exe में संकलित कर सकते हैं जिसमें वीएम भी शामिल है, या क्या आपको इसे पैकेज करना है और इसे किसी अन्य को देना है .exe (a la java)?

एक समान नस में,

  • एक या भाषा एक ढांचे, और वास्तव में क्या करता है "रूपरेखा" यहाँ मतलब नेट रहा है?

ठीक है, इतना है कि एक से अधिक सवाल है, लेकिन कोई है जो जब तक मेरे पास है के रूप में इस उद्योग में किया गया है के लिए, मैं नहीं बल्कि n00b-ish महसूस कर रहा हूँ अभी ...

+1

संभावित डुप्लिकेट [सी # में प्रबंधित/अप्रबंधित कोड क्या है?] (Http://stackoverflow.com/questions/334326/what-is-managed-unmanaged-code-in-c) – nawfal

+0

ब्रैड एडम्स [ सर्वोत्तम स्पष्टीकरण मैंने पढ़ा है] (http://blogs.msdn.com/brada/archive/2004/01/09/48925.aspx) – JamesSugrue

उत्तर

34

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

अपने दूसरे प्रश्न का उत्तर देने के लिए, .NET एक ढांचा है, जिसमें यह पुस्तकालयों, कंपाइलर्स और वीएम का एक सेट है जो भाषा विशिष्ट नहीं है। तो आप सी #, वीबी, सी ++ और .NET कंपाइलर वाले किसी भी अन्य भाषाओं में .NET ढांचे पर कोड कर सकते हैं।

https://bitbucket.org/brianritchie/wiki/wiki/.NET%20Languages

ऊपर पेज भाषाओं जो नेट संस्करण है, साथ ही उनके पृष्ठों के लिंक हैं की एक सूची है।

+0

.NET में संकलन एक दो चरण प्रक्रिया है, क्या हम कह सकते हैं कि आईएल कोड में भाषा संकलक (उदाहरण के लिए सी # कंपाइलर) द्वारा संकलित कोड को "प्रबंधित कोड" भी कहा जाता है? –

+1

आपके उत्तर का लिंक अब काम नहीं करता – overcomer

+0

लिंक बदल दिया गया था: [यहां] (https://bitbucket.org/brianritchie/wiki/wiki/.NET%20 भाषाएं) – Jude

0

नेट है एक ढांचा। इसका उपयोग कई भाषाओं (VB.NET, C#, IronPython, Boo, आदि) से किया जा सकता है

.NET हमेशा व्याख्या के रूप में निष्पादित करता है, और आप .exe के अंदर 'VM' शामिल नहीं कर सकते हैं। कोई भी उपयोगकर्ता जो आपके .NET ऐप को चलाने की इच्छा रखते हैं, में फ्रेमवर्क स्थापित होना चाहिए।

+0

वस्तुतः जो भी आपने कहा वह गलत है। – Jeremy

3

शब्द प्रबंधित आमतौर पर केवल .NET पर लागू होता है क्योंकि माइक्रोसॉफ्ट शब्द का उपयोग करता है। माइक्रोसॉफ्ट आमतौर पर .NET प्रबंधित निष्पादन वातावरण के संदर्भ में "आभासी मशीन" शब्द का उपयोग नहीं करता है।

.NET का "बाइटकोड" (आईएल) जावा बाइटकोड से कुछ अलग है जिसमें इसे स्पष्ट रूप से प्रबंधित वातावरण में निष्पादन से पहले देशी कोड में संकलित करने के लिए डिज़ाइन किया गया था, जबकि जावा को व्याख्या करने के लिए डिज़ाइन किया गया था, लेकिन अवधारणा मंच-स्वतंत्र कोड समान है।

".NET Framework" मूल रूप से माइक्रोसॉफ्ट द्वारा प्रदान की गई पुस्तकालयों का एक विशाल सेट है, जिसमें हजारों कक्षाएं हैं जिनका उपयोग अनुप्रयोगों को विकसित करने के लिए किया जा सकता है।

एक संकलित सी # .exe में प्लेटफार्म-स्वतंत्र कोड होता है जिसे मोनो समेत किसी भी .NET- संगत वातावरण में चलाया जा सकता है। हालांकि, रनटाइम आमतौर पर उन अनुप्रयोगों से अलग रूप से वितरित किया जाता है जो इसका उपयोग करते हैं।

9

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

1

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

1

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

3

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

9

अधिकतर इस तथ्य का जिक्र करते हैं कि आपके सभी मेमोरी आवंटन आपके लिए "प्रबंधित" हैं। यदि आप प्रबंधित कोड का उपयोग कर रहे हैं तो आपको अपने ऑब्जेक्ट्स को फ्री करने के बारे में चिंता करने की ज़रूरत नहीं है जब आप उनके साथ काम करते हैं। बस उन्हें दायरे से बाहर जाने की इजाजत देने का मतलब यह होगा कि वीएम अंततः यह पहचान लेगा कि अब उनके लिए कोई संदर्भ नहीं है और कचरा उन्हें स्मृति में सिस्टम को वापस लाने के लिए एकत्र करेगा।

दूसरी तरफ अप्रबंधित कोड केवल "रिसाव" होगा जब तक आप संदर्भों को त्यागने से पहले अपने पॉइंटर्स को स्पष्ट रूप से मुक्त नहीं करते।

0

यह सीपीयू द्वारा सीधे वर्चुअल मशीन द्वारा निष्पादित किसी भी कोड को संदर्भित कर सकता है।

मुझे लगता है कि यह कचरा संग्रह और सरणी सीमाओं की जांच जैसी चीजों को सक्षम बनाता है।

2

कुछ को अपमानित करने के जोखिम पर, मुझे संदेह है कि प्रबंधित शब्द का उपयोग किया गया था ताकि वे संकलित के बजाय अप्रबंधित शब्द का उपयोग कर सकें। प्रबंधित होने पर अधिक मतलब हो सकता है, वास्तविकता यह है कि ऐसा लगता है कि ज्यादातर समय संकलन में काफी अधिक है (जैसा कि एक बार व्याख्या किया गया था या पीकोड था) और मूल संकलित कोड के बीच में काफी अंतर है।

या एक और तरीका है, जो आप उपयोग करना चाहते हों डाल:

क) अप्रबंधित कोड प्रणाली के लिए बेकाबू बातें करते हैं सकता है।

बी) मूल संकलित कोड जो तेज़, ठोस है और ओएस के करीब है।

बेशक, वे वास्तव में वही बात हैं।

6

विशेष रूप से .NET और Visual C++ के तहत, आपके पास अप्रबंधित और प्रबंधित कोड दोनों हो सकते हैं। शर्तें उस तरीके को संदर्भित करती हैं जिसमें स्मृति आवंटित की जाती है और 'प्रबंधित' होती है।

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

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

जैसा कि मैंने ऊपर बताया है, यह कोड लिखना संभव है जो प्रबंधित और अप्रबंधित दोनों है।

अप्रबंधित:

class Bar : public Foo { 
    private: 
      int fubar; 
    public: 
      Bar(int i) : fubar(i) {} 
      int * getFubar() { return * fubar; } 
} 

प्रबंधित:

public ref class Bar : public Foo 
    private: 
      int fubar; 
    public: 
      Bar(int i) : fubar(i) {} 
      int^getFubar() { return^fubar; } 
} 

सूचना रेफरी? वह बहुत प्रबंधित एक प्रबंधित वर्ग को नामित करता है। जब आप दो प्रकार के कोड को मिलाते हैं तो यह बहुत भ्रमित हो जाता है। उदाहरण के लिए, आप एक संदर्भ सूचक, (^) एक पॉइंटर के प्रबंधित समकक्ष को सहेजना चाहते हैं, अपने अप्रबंधित वर्ग के भीतर एक चित्र बॉक्स नियंत्रण में। चूंकि कचरा कलेक्टर स्मृति को चारों ओर स्थानांतरित कर सकता है, अगली बार जब आप चित्र बॉक्स को हटाना चाहते हैं तो यह नहीं मिल सकता है। रन-टाइम आपके अप्रबंधित कोड को इसके स्मृति परिवर्तनों के बारे में नहीं बताता है।

इसलिए आपको अपने अप्रबंधित कोड को ट्रैक रखने की अनुमति देने के लिए प्रबंधित ऑब्जेक्ट को स्मृति में पिन करने की आवश्यकता है। फिर वहां अनबॉक्सिंग और अन्य प्रकार के अन्य क्विर्क हैं जो आपको दोनों को इंटरमीक्स करने की अनुमति देते हैं। कोड जटिलता बहुत बड़ी है!

आधिकारिक तौर पर, प्रबंधित/अप्रबंधित .NET स्टैक पर कोड निष्पादित करने के तरीके के नीचे आ सकता है। हालांकि, अगर आप सी ++ पृष्ठभूमि से आ रहे हैं, तो मुझे उम्मीद है कि यह आपके लिए थोड़ा अधिक प्रासंगिक होगा।

2

एक समान नस में, एक भाषा या एक रूपरेखा नेट जाता है, और वास्तव में क्या करता है "रूपरेखा" यहाँ क्या मतलब है? < <

नेट माइक्रोसॉफ्ट के वर्तमान उद्यम सॉफ्टवेयर मंच है। विंडोज कार्यक्षमता तक पहुँचने के लिए

• एक एकल सार्वभौमिक इंटरफ़ेस:: यह के होते हैं

o The .NET Framework Class Library (FCL). 
o The FCL provides a rich set of high-level functionality for developers. 

एक एकल सार्वभौमिक भाषा और क्रियान्वित करने के लिए क्रम •।नेट अनुप्रयोग:

o Common Language Runtime (CLR) executes Common Intermediate Language (CIL). 
o The CLR is God: it runs, controls, and polices everything. 

NET अनुप्रयोगों के विकास के लिए कई भाषाओं की पसंद •:

o Every development language is compiled to CIL, which is run by the CLR. 
o C# and VB are the two main development languages. 
10

मुझे नहीं लगता कि आप क्या नेट है के बारे में उलझन होने में अकेले हैं है। पहले से ही ऐसे अन्य उत्तर हैं जिन्हें आपने कवर किया होगा, लेकिन मैं दूसरों के लिए जानकारी की इस जानकारी को फेंक दूंगा।

देखने के लिए क्या नेट "वास्तव में" बस ग करने के लिए जाना जाता है: \ Windows \ Microsoft.Net \ फ्रेमवर्क

वहाँ में आप फ़ोल्डर संस्करण (रों) द्वारा स्थापित किए गए करने के लिए specfic दिखाई देंगे। V2.0.xxxxx फ़ोल्डर में जाएं यदि आपने इसे उदाहरण के लिए इंस्टॉल किया है।

उस फ़ोल्डर में ढांचा है। आप मूल रूप से .exe फ़ाइलों और .dll फ़ाइलों का एक समूह देखेंगे। सिस्टम के साथ शुरू होने वाली सभी डीएलएल फाइलें। *। डीएल अनिवार्य रूप से नेट फ्रेमवर्क है।

उस फ़ोल्डर में आप देखे गए .exe फ़ाइलें डेवलपर्स के साथ-साथ कंपाइलर्स के लिए उपयोगिताओं हैं। आपने सी # का उल्लेख किया है। Csc.exe फ़ाइल खोजें। यह आपका सी # कंपाइलर है।

एक प्रोग्राम बनाना वास्तव में सरल है। निम्न कोड को hello.cs फ़ाइल में फेंक दें।

using System; 
class Program 
    { 
     static void Main(string[] args) 
     { 
      Console.WriteLine("hello world"); 
     } 
    } 

तो कमांड लाइन प्रकार पर> सीएससी hello.cs

है कि आप एक exe फ़ाइल उत्पन्न होगा। इसे चलाएं और यह स्पष्ट रूप से 'हैलो वर्ल्ड' थूक जाएगा।

कंसोल। राइटलाइन() फ्रेम रेखा में कॉल कर रहा है। कंसोल एक ऑब्जेक्ट है जो सिस्टम नेमस्पेस और WriteLine() के भीतर रहता है एक स्थिर विधि है।

यह है कि Console.WriteLine() विधि के लिए disassembled कोड है:

[HostProtection(SecurityAction.LinkDemand, UI=true)] 
public static void WriteLine(string value) 
{ 
    Out.WriteLine(value); 
} 

जब लोगों की तरह, बातें कहते हैं, या "मैं अजगर या का उपयोग करना चाहिए" मैं PHP या नेट का उपयोग करना चाहिए? "। नेट "आप देखना शुरू करते हैं कि चर्चा करने के लिए यह गलत बात है। वे स्पष्ट रूप से एक फ्रेमवर्क के लिए एक भाषा की तुलना कर रहे हैं। सी # एक भाषा है और यह कई भाषाओं में से एक है जिसका उपयोग नेट प्लेटफ़ॉर्म के शीर्ष पर कोड लिखने के लिए किया जा सकता है। Console.WriteLine() की वही विधि सी #, वीबी.Net, पास्कल, सी ++, रूबी, पायथन, एफ # और किसी भी अन्य भाषा से लागू की जा सकती है जिसे नेट प्लेटफॉर्म के शीर्ष पर काम करने के लिए बनाया गया है।

मुझे उम्मीद है कि इससे मदद मिलती है।

-Keith

0

व्यक्तिगत रूप से, मुझे लगता है कि शब्द "ढांचा" एक मिथ्या नाम का एक सा है।

.NET एक "प्लेटफॉर्म" है, जिसमें एक निष्पादन वातावरण (सीएलआर आभासी मशीन) और पुस्तकालयों का एक समूह शामिल है। यह जावा या पर्ल या पायथन के समान है (इनमें से कोई भी कभी "ढांचे" के रूप में जाना जाता है)।

ज्यादातर मामलों में, "फ्रेमवर्क" शब्द का प्रयोग स्प्रिंग या स्ट्रूट्स या क्यूटी जैसी परियोजनाओं के लिए किया जाता है, जो एक लाइब्रेरी की तरह प्लेटफॉर्म (यानी, स्वयं का निष्पादन वातावरण प्रदान नहीं करते) के शीर्ष पर बैठते हैं।

लेकिन "लाइब्रेरी" के विपरीत, एक ढांचा अंतर्निहित प्लेटफॉर्म के मौलिक संचालन को फिर से परिभाषित करना चाहता है।(स्प्रिंग की निर्भरता इंजेक्शन सामान्य जावा कोड के कन्स्ट्रक्टर-कॉलिंग तर्क को खारिज कर देती है। क्यूटी के सिग्नल-एंड-स्लॉट कार्यान्वयन सामान्य सी ++ कोड को खारिज करते हैं।)

मुझे पता है कि मैं सिर्फ एक पैडेंटिक बेस्टर्ड हूं, लेकिन मेरे लिए, .NET है एक ढांचा नहीं। यह एक मंच है।

-1

प्रबंधित कोड - एमएसआईएल और आईएल और प्रबंधित कोड समान हैं। जब हम अपना आवेदन बनाते हैं तो .dll या .exe फ़ाइलें बिन फ़ोल्डर में उत्पन्न होती हैं। इन फ़ाइलों को प्रबंधित कोड कहा जाता है। इन फ़ाइलों को इन्हें दिया जाता है सीएलआर मूल कोड उत्पन्न करने के लिए जो ओएस द्वारा समझा जाएगा।

+0

यह पहले से ही अन्य उत्तरों में शामिल है। केवल तभी जोड़ें जब आपकी पोस्ट अतिरिक्त मूल्य विज्ञापन देती है। – Raju