2010-08-31 13 views
9

वह सौदा है: मैं अपने स्नातक पाठ्यक्रम के लिए .NET और जावा प्लेटफॉर्म पर कुछ सैद्धांतिक शोध कर रहा हूं और मैं एक बादल क्षेत्र तक पहुंच गया: क्या सी # को .NET Framework का हिस्सा माना जा सकता है? इसके लिए एनालॉग, जावा (प्रोग्रामिंग भाषा) जावा प्लेटफार्म का हिस्सा माना जाता है?क्या एक प्रोग्रामिंग भाषा मंच का हिस्सा हो सकती है? (सी # और जावा से संबंधित)

मुझे तथ्यों की समीक्षा करें:

  1. नेट ECMA-335 मानक द्वारा निर्दिष्ट एक विकास मंच है, यदि आप करेंगे तो यह इस मानक का कार्यान्वयन है। सी # हालांकि, एक और मानक, ईसीएमए -334 का कार्यान्वयन है जो स्पष्ट रूप से बताता है कि इसके कार्यान्वयन को ईसीएमए -335 मानक के कार्यान्वयन की आवश्यकता नहीं है - माइक्रोसॉफ्ट के मामले में सीएलआर (जो बहुत से लोग गलती से .NET को कॉल करते हैं जब बहुत कुछ होता है सीएलआर की तुलना में इसके लिए अधिक)।

  2. इसके अलावा, हमारे पास मोनो, ईसीएमए -335 का एक अलग कार्यान्वयन है, जिस पर सी # भी चलता है (जो कुछ भी मैंने पढ़ा है, उससे यह संकेत मिलता है कि नोवेल के पास ईसीएमए -334 कार्यान्वयन नहीं है, जो कि पूरी तरह से उचित है), लेकिन सी # मोनो का हिस्सा नहीं है।

  3. तथ्य यह है कि मैंने कहीं पढ़ा है कि एक प्रोग्रामिंग भाषा प्लेटफ़ॉर्म का हिस्सा नहीं है, लेकिन दुर्भाग्य से मुझे स्रोत नहीं मिल रहा है।

  4. यह भी तथ्य है कि विकिपीडिया "कंप्यूटिंग प्लेटफार्म" आलेख बताता है कि एक प्रोग्रामिंग भाषा एक मंच है; विकी, हालांकि, यदि आप अपने शोध को गंभीरता से लेना चाहते हैं तो वस्तुतः बेकार है।

  5. माइक्रोसॉफ्ट .NET के एक हिस्से के रूप में सी # को बढ़ावा देने लगता है, लेकिन .NET एक बहु भाषा प्लेटफॉर्म होने के नाते, यह हर भाषा का समर्थन नहीं करेगा जो इसका समर्थन करता/समर्थित है?

अब तक, मैं केवल नेट की बात की थी, लेकिन मैं यह भी जावा के बारे में एक जवाब की जरूरत है। दरअसल, एक सामान्य प्रतिक्रिया सबसे अच्छी होगी।

तो, क्या कोई मुझे टुकड़ों को एक साथ रखने में मदद कर सकता है? संदर्भ सामग्री की बहुत सराहना की जाती है।


एक अलग मुद्दे पर मैंने पाया वहाँ किताबें है कि CLR की अंदरूनी कामकाज को समझाने की बहुत, JVM के लिए उसी तर्ज पर कुछ भी नहीं है? मेरा मतलब है, निश्चित रूप से विशिष्टता है, लेकिन मैं पचाने के लिए कुछ आसान बनाने का लक्ष्य रख रहा था, मैं जावा संकलक बनाने की योजना नहीं बना रहा हूं ..

+0

आपके शीर्षक में कोई क्रिया नहीं है, ऐसा लगता है? (ओह, यह सिर्फ हो। :) – Nicolas78

+0

@ निकोलस 78 डेमिट ... ¬¬ –

+0

सस्ते, आसान उत्तर यह है: सी # को .NET के साथ इतनी बारीकी से बंधे हुए हैं कि यह प्रभावी रूप से इसका है। – delnan

उत्तर

5

जैसा कि सभी को नोटिस लगता है, यह आपकी परिभाषाओं पर निर्भर करता है।

लेकिन ऐक्मा 334 (और/या कुछ अन्य ऐक्मा doc) भी MSIL (या सीआईएल) निर्दिष्ट करें, और वह निश्चित रूप से मंच के हिस्सा है।

और मुझे लगता है कि सी # प्लेटफ़ॉर्म का हिस्सा नहीं है, एमएस कंपाइलर बस एमएसआईएल को आउटपुट करके सीएलआर को लक्षित करता है। प्रबंधित या अप्रबंधित किसी अन्य प्लेटफार्म के लिए कार्यान्वयन की कल्पना करना इतना मुश्किल नहीं है।

जावा एक मंच और जावा नामक एक भाषा दोनों के द्वारा इस मुद्दे को थोड़ा उलझन में डालता है लेकिन भेद को देखना मुश्किल नहीं है।

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

कई भाषाओं (सी, सी ++) प्लेटफॉर्म पर पोर्टेबल होने के लिए एक सक्रिय प्रयास करते हैं।

+0

लेकिन निश्चित रूप से! अरे आप विभाजन III, मेरे दिमाग को पार नहीं किया था ... धन्यवाद एक गुच्छा! –

1

थोड़ा आगे (1 9 78) वापस जाना, बीच का अंतर UCSD Pascal & यूसीएसडी पी-सिस्टम अक्सर धुंधला हुआ था, जैसे कि अधिकांश उपयोगकर्ता यूसीएसडी पास्कल को ऑपरेटिंग सिस्टम के रूप में पेश करते थे।

1

जावा से संबंधित विषय पर Sun/Oracle's thinking:

जावा प्रौद्योगिकी दोनों एक प्रोग्रामिंग भाषा और एक मंच है।

बाद में:

एक मंच हार्डवेयर या सॉफ्टवेयर वातावरण में एक कार्यक्रम चलाता है। ...जावा प्लेटफ़ॉर्म अधिकांश अन्य प्लेटफार्मों से अलग है जिसमें यह एक सॉफ्टवेयर-केवल प्लेटफ़ॉर्म है जो अन्य हार्डवेयर-आधारित प्लेटफ़ॉर्म के शीर्ष पर चलता है।

तो मैं उनकी परिभाषा के अनुसार कहूंगा, जावा भाषा जावा प्लेटफ़ॉर्म का "भाग" नहीं है। जैसे सी 99 यूनिक्स प्लेटफ़ॉर्म का हिस्सा नहीं है, आदि

अभ्यास में, हालांकि, रेखाएं कुछ हद तक धुंधली हैं। जावा भाषा संभवतः जावा प्लेटफॉर्म के साथ मिलकर अधिक है जो वे स्वीकार करना चाहते हैं। जावा एपीआई (पुस्तकालय) को जावा प्लेटफॉर्म का हिस्सा माना जाता है, न कि भाषा, और फिर भी भाषा कुछ वर्गों या इंटरफेस के साथ मिलती है (उदाहरण के लिए, प्रत्येक लूप java.lang.Iterable और java.util.Iterator पर निर्भर करता है)।

सामान्यतः, डिजाइनर java.lang पैकेज में युग्मन को शामिल करने का प्रयास करते हैं, जो भाषा समर्थन के लिए है। यही कारण है कि आप String, Object, आदि जैसे java.lang में विशेष मामलों को देखते हैं।

+0

मंच जेवीएम है, जबकि प्रोग्रामिंग भाषा जावा है। मैं नहीं देखता कि यह किसी भी प्रश्नकर्ता के प्रश्नों को कैसे संबोधित करता है, हालांकि। –

+0

@ थॉमस: ओपी ने पूछा * "जावा (प्रोग्रामिंग भाषा) जावा प्लेटफार्म का हिस्सा माना जाता है?" *। मैं सिर्फ सूर्य के शब्दों के उपयोग से जुड़ा हूं। निस्संदेह आप इन तकनीकों को लगातार सभी प्रौद्योगिकियों पर इस्तेमाल नहीं कर पाएंगे। –

+0

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

1

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

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

+0

कहीं भी मैंने कहा कि वे सी # के ".NET" कार्यान्वयन थे (एक बयान जो समझ में नहीं आता है), मैंने कहा कि मोनो ईसीएमए -335, सीएलआई का कार्यान्वयन है (सबसे सटीक यह कहना होगा कि मोनो एक सीएलआई कार्यान्वयन है, वास्तव में) –

+0

मैं एक बिंदु बनाने की कोशिश कर रहा था: "सी # .NET के बिना मौजूद हो सकता है"। सैद्धांतिक रूप से कम से कम। यदि मानक को .NET के बिना परिभाषित किया गया था, तो मोनो और इन सभी अन्य सी # आधारित प्लेटफॉर्म वैसे भी मौजूद हो सकते थे। –

+0

तो, फर्नांडो (बासानी ?!) आप मूल रूप से कह रहे हैं कि दोनों भाषाएं संबंधित हैं/उनके संबंधित प्लेटफॉर्म का हिस्सा हैं, है ना? –

2

क्या आप सामान्य रूप से पूछ रहे हैं? यदि ऐसा है तो मुझे लगता है कि निश्चित रूप से उत्तर हाँ है, एक प्रोग्रामिंग भाषा एक प्लेटफ़ॉर्म का हिस्सा हो सकती है। उदाहरण के लिए, ईसीएमए -335 मानक में CIL programming language का विनिर्देश शामिल है। यह ने सी # भाषा को भी इंगित किया है और ईसीएमए -334 मानक का संदर्भ दिया है। यह बस नहीं करता है।

यह वास्तव में एक व्यापक पैमाने पर लागू ढीले बनाम तंग युग्मन का सवाल है। लूज को आमतौर पर डिज़ाइन पसंद के रूप में प्राथमिकता दी जाती है। तंग हमेशा एक विकल्प है।


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

सीएलआई में सी # शामिल नहीं है; उस पर मुझे लगता है कि हम सहमत हो सकते हैं। क्या .NET है?

ईमानदारी से, मुझे सच में यकीन नहीं है। माइक्रोसॉफ्ट द्वारा बनाए गए .NET को उत्पाद माना जाता है, मुझे लगता है कि यह वास्तव में उन पर निर्भर करता है कि सी #, वीबी.नेट, एफ #, आदि हैं या नहीं .नेट का "हिस्सा" हैं। जावा के साथ सूर्य और "जावा प्लेटफ़ॉर्म" के लिए भी यही है।

+0

हाँ, आपको मिल गया। मुझे लगता है कि सभी मामलों के लिए, मैं पर रहूंगा 1. एक प्रोग्रामिंग भाषा एक मंच का हिस्सा हो सकती है (इस तरह, मैं इस विशेष मुद्दे के बारे में कुछ भी कहने से बचना कर सकता हूं और गलत होने का जोखिम नहीं उठा सकता); 2. सी # समुदाय के भीतर सर्वसम्मति नहीं होने के बावजूद .NET का हिस्सा नहीं है; 3।अभी भी जावा मुद्दे पर बाड़ पर, लेकिन अब तक मैं मार्क पीटर के जवाब से निपट रहा हूं। –

1

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

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

0

एक साधारण उत्तर हाँ और नहीं हो सकता है, जैसा कि आपने कहा था, यह एक बादल क्षेत्र है। आपको शायद कुछ तर्क मिलेगा, और कुछ के खिलाफ, दोनों समान रूप से मान्य होंगे।

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

प्रश्न को चालू करें, क्या .NET को C# की आवश्यकता है? सी # आउट फेंक दें और आपके पास अभी भी वीबीएनईटी है, सी # को एक प्लगइन के रूप में सोचा जा सकता है जिसके लिए एक विशिष्ट इंटरफ़ेस वाला मंच आवश्यक है, जहां .NET उस इंटरफ़ेस को लागू करता है।

"हां" तर्क के रूप में आप अशिष्ट सवाल पूछ सकते हैं कि .NET सी # के बिना होगा। क्या यह भी जीवित रहेगा?

0

सी # या जावा से संबंधित नहीं है, उदाहरण के लिए, स्मॉलटाक मंच में न केवल भाषा और वीएम बल्कि आईडीई भी शामिल है। तो मुझे लगता है कि आपके प्रश्न का उत्तर यह है: हाँ - एक प्रोग्रामिंग भाषा एक मंच का हिस्सा हो सकती है।

0

सी # अपने विशेष संरचनाओं को लागू करने के लिए कुछ .NET कक्षाओं (विशेष रूप से, mscorlib में) पर निर्भर करता है, हालांकि मुझे लगता है कि आप एक अलग बैकिंग रनटाइम के लिए समकक्ष बना सकते हैं।

  • foreach निर्भर करता है पर IEnumerable या IEnumerable<T>
  • usingIDisposable
  • लैम्ब्डा भाव पर निर्भर करता है विशेष सामान्य प्रतिनिधित्व करने के लिए हल कर सकते हैं वस्तुओं Expression<>
  • yield return भी नेट गणन मॉडल
में बंधा हुआ है

तो सी # पूरी तरह से स्वतंत्र नहीं है .NET और CLR के कम से कम कुछ पहलुओं में से टी, हालांकि, सिद्धांत रूप में, एक रनटाइम/कंपाइलर बनाकर वही व्यवहार प्राप्त कर सकते हैं जो भाषा सुविधाओं को लागू करने के लिए आवश्यक .NET सुविधाओं का केवल न्यूनतम सबसेट प्रदान करता है। मुझे नहीं लगता कि यह विशेष रूप से उपयोगी होगा, हालांकि, भाषा और रनटाइम एक साथ उगाए और विकसित हुए हैं।

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