2008-10-29 9 views
13

क्या उद्देश्य-सी का समर्थन करने के लिए .NET CLR के लिए यह संभव है? क्या कोई कारण हैं (या तो कानूनी या कार्यान्वयन से) दृष्टिकोण यह क्यों संभव नहीं होगा?.NET सामान्य भाषा रनटाइम में उद्देश्य-सी समर्थन जोड़ने के लिए क्या होगा?

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

उत्तर

1

कोई वास्तव में नहीं हैं। आईईएल (या सीआईएल या एमएसआईएल) के लिए .NET संकलित करता है जो मूल रूप से वर्चुअल मशीन के लिए मशीन कोड है। आप आईएल में प्रोग्राम कर सकते हैं जैसे आप असेंबली में करते हैं (ऐसा नहीं है कि मैंने इसे देखा है)। यदि आपके पास अनुभव, ज्ञान और गम्प्शन था, तो आईएल कंपाइलर को उद्देश्य-सी लिखने में कोई समस्या नहीं होगी। नरक, .NET के लिए functional programming languages (F#) भी हैं। मैसेजिंग क्षमताओं और पुस्तकालयों के अलावा, यह सी #, वीबी.नेट, आदि से बहुत अलग नहीं है

क्या एक शानदार विचार है! उद्देश्य-सी # या कुछ ऐसे। यह संकेत है कि नेट पर खराब अनुवाद जैसी सुविधाओं की एक बहुत कुछ मिला है Wikiepedia on Microsoft's IL.

6

ऑब्जेक्टिव-सी जैसे सी का एक सख्त superset है,:

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

मान लीजिए कि यह उद्देश्य है, उद्देश्य-सी का विधि प्रेषण भाग DLR की गतिशील क्षमताओं के लिए एक प्राकृतिक फिट है। मैंने वास्तव में ऐसा बंदरगाह बनाने पर विचार किया है।

+0

क्या सी ++ को .NET बाइटकोड में संकलित किया जा सकता है? यदि ऐसा है, तो .NET के लिए उद्देश्य-सी संकलक लिखना संभव होना चाहिए। (मैं .NET से बहुत परिचित नहीं हूं, हालांकि; मैं _think_ आप .NET के लिए C++ संकलित कर सकता हूं, लेकिन क्या यह वास्तव में .NET बाइटकोड को संकलित करता है, या कुछ और करता है?) – mipadi

+0

नहीं, मनमाने ढंग से C++ संकलित नहीं किया जा सकता आईएल के लिए, हालांकि इसका एक अजीब सबसेट हो सकता है। यह मेरी टिप्पणी का स्रोत है। :) –

+0

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

4

सीएलआर के उद्देश्य सी ऑनटॉप को होस्ट करने में कोई समस्या नहीं होनी चाहिए। आप शायद डीएलआर के रनटाइम ऑनटॉप को लागू कर सकते हैं, या सबसे खराब मामले में अपना खुद का कार्यान्वयन कर सकते हैं। सीएलआर के लिए किसी भी महत्वपूर्ण उद्देश्य सी कोड बेस को संकलित करने से यह अभी भी काफी अलग है, क्योंकि उद्देश्य सी कोड के विशाल बहुमत में आपको दिलचस्पी होने की संभावना है, जो ऐप्पल के ढांचे पर निर्भर करता है।

अंत में आपको या तो उन्हें पुन: कार्यान्वित करने की आवश्यकता होगी, या .NET फ्रेमवर्क पर उद्देश्य सी को पुल करें, जो आपको उद्देश्य सी कोड लिखने की अनुमति देगा, लेकिन यह किसी भी मौजूदा उद्देश्य सी के साथ संगत ढांचे का उपयोग नहीं करेगा कोड। आप Cocotron पर एक नज़र डालना चाहते हैं जो एक क्रॉस संकलन वातावरण है जो मैक डेवलपर्स को कुछ उद्देश्य सी ऐप्स को विंडोज़ में स्थानांतरित करने की अनुमति देता है। यह विंडोज के लिए ऑब्जेक्टिव सी रनटाइम का एक उचित उदाहरण प्रदान करना चाहिए, साथ ही साथ संभावित सी कोड को उचित बनाने के लिए आवश्यक कुछ फ्रेमवर्क प्रदान करना चाहिए, जब आप एक कंपाइलर लाएंगे जो .NET

3

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

हालांकि क्या ऑब्जेक्टिव-सी विकास पर मैक महान बनाता है नहीं वाक्य रचना, यह अन्य एपीआई है कि एप्पल प्रदान करता है जैसे:

इन एपीआई के अतिरिक्त जो कार्यान्वित करना बहुत कठिन होगा, आपको Bindings समर्थन और Key Value Observing जैसी चीजों के बारे में भी सोचना होगा जो सीएलआर में लागू करना बहुत कठिन होगा।

+0

, उम्मीद है कि यह डब्ल्यूपीएफ के डेटा बाइंडिंग सिस्टम और इनोटिफ़ाईप्रॉपर्टी चेंज पर एक कोको जैसी रैपर होगी। – Jimmy

1

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

इसके अलावा, आप पहले से ही विंडोज पर ऑब्जेक्टिव सी लिख सकते हैं - मुझे विश्वास है कि जीसीसी, जिसे आम तौर पर एक्सकोड के साथ प्रयोग किया जाता है, विंडोज़ पर ओब्जे सी को संकलित करेगा, साथ ही साथ जीएनयूस्टेप भी होगा।

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

1

नोब्रेक्टीव पुल का उपयोग करके आप सी # में मौजूदा उद्देश्य-सी कक्षाओं के साथ काम करने में सक्षम हैं या नए बना सकते हैं। 'विजुअल स्टूडियो 2010' और '.NET 4' की अंतिम रिलीज के बाद भी मैं नोबजेक्टिव के लिए डीएलआर समर्थन जोड़ूंगा।

+0

क्या यह अभी तक किया गया है? :) – bzlm

0

उद्देश्य-सी और कोको के बजाय, नेट के लिए उद्देश्य-जे और कैप्चिनो के बारे में क्या? ऑब्जेक्टिव-जम्मू है सिर्फ ObjC के रूप में अपील के रूप में, हालांकि, ObjJ ObjC से सी # के करीब (कोई संकेत, जीसी, आदि) है

मैं हाल ही में Cappuccino डेवलपर्स मंच पर इस बारे में पूछा, और वे मेरे जुरासिक की ओर इशारा किया (.NET के लिए एक जावास्क्रिप्ट कंपाइलर)। उन्होंने यह भी कहा कि कैप्चिनो आयरनजेएस पर ठीक काम करता है। तो, ऐसा लगता है कि घटक वहां हैं (ObjJ -> जावास्क्रिप्ट -> .Net), लेकिन उन्हें एक साथ जोड़ने वाला पुल बनाया जाना है।

क्या कोई और इस में कोई मूल्य देखता है?

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