उद्देश्य-सी व्यापक रूप से कोको के वातावरण से परे क्यों नहीं उपयोग किया जाता है?


24

ऑब्जेक्टिव-सी में अच्छी वस्तु अभिविन्यास, सरलता, लालित्य और (सी के एक सुपरसेट के रूप में), निम्न स्तर की क्षमता है। यह सी ++ के लिए सरल, आधुनिक विकल्प की तरह लग सकता है जो कई लोग गो में ढूंढते हैं और खोजने की कोशिश करते हैं। लेकिन यह सिर्फ कोको और अगले-नेस्टेप पर्यावरण पर उपयोग किया जाता है, और यहां तक ​​कि इस मामले में ऐतिहासिक कारणों के लिए एक इष्टतम विकल्प के रूप में अधिक बोझ के रूप में देखा जाता है।

फिर इसका अधिक व्यापक रूप से उपयोग क्यों नहीं किया जाता है? इसकी समस्याएं क्या हैं?


5
"ऐतिहासिक कारणों" का अर्थ है "बहुत सारे पुस्तकालय"

@vartec आप ऐसा करने के लिए मजबूर नहीं हैं। उदाहरण के लिए मोनोऑच देखें, यह C # है। ओह और फिर आपके पास ऑब्जेक्टिव-सी, सी और सी ++ के बारे में एप्पल का नियम है, है ना? उन्होंने पहले ही उसको छोड़ दिया।
11

जवाबों:


28

IMO, ऑब्जेक्टिव-सी के साथ समस्या इतनी बड़ी कमियां नहीं हैं, जितनी कि छोटी कमियों (विशेष रूप से जल्दी) और कथित फायदों की कमी।

ऑब्जेक्टिव-सी, सी का एक शुद्ध सुपरसेट था, इसलिए सी कोड उद्देश्य-सी में आसानी से संक्रमण कर सकता था। उद्देश्य-सी का उपयोग करने की मानसिकता , हालांकि, सी मानसिकता से बहुत भिन्न थी । C से ऑब्जेक्टिव-सी में परिवर्तन कोड के लिए आसान है लेकिन कई प्रोग्रामर के लिए बिल्कुल भी आसान नहीं है। एसी प्रोग्रामर आसानी से ऑब्जेक्टिव-सी में कुछ नई सुविधा सुविधाओं को आसानी से नहीं चुन सकता है और लगभग तुरंत बेहतर उत्पादकता प्राप्त कर सकता है - इससे पहले कि वह कहीं भी मिल सके उससे पहले उसे कई नए "सामान" सीखने की जरूरत है।

C ++ ने कुछ कोड के लिए संक्रमण को थोड़ा और कठिन बना दिया, लेकिन अधिकांश प्रोग्रामर के लिए संक्रमण बहुत आसान था। C प्रोग्रामर जो अपने कोड के हर विवरण से निपटने के आदी हैं, वे अभी भी C ++ में ऐसा कर सकते हैं, जैसा वे चाहते थे। C ++ ने कुछ नई सुविधाओं का उपयोग करना भी आसान बना दिया (जैसे, अपने ढांचे के सदस्यों को स्वचालित रूप से प्रारंभ करने के लिए एक Ctor जोड़ना) वास्तव में आपके सोचने के तरीके को बदले बिना। बहुत से OO शुद्धतावादियों ने सोच में आमूल परिवर्तन किए, लेकिन बहुत से C प्रोग्रामर C ++ को बिना किसी प्रकार के (कम से कम अभी - और अक्सर कभी, चीजों की शक्ल से) किए बिना स्विच करते हैं।

सी ++ भी देखा सबसे C प्रोग्रामर से बहुत अधिक परिचित। इसमें कुछ नए कीवर्ड जोड़े गए, लेकिन (विशेष रूप से जल्दी) कोड अभी भी ज्यादातर परिचित लग रहे थे। अपने 'शुद्ध superset "स्थिति के बावजूद, सबसे ऑब्जेक्टिव-सी कोड दिखता है काफी सबसे C प्रोग्रामर से विदेशी। C ++ में बहुत सी चीज़ों को समझाने और समझने में भी काफी आसान है कि सी में चीजें कैसे काम करती हैं। Objective-C में स्विच करने के लिए और भी बहुत सी जगहें हैं जिनके बारे में आप बस इतना ही कह सकते हैं “बस मुझ पर भरोसा करो और जो कुछ भी तुम सोचते हो उसे भूल जाओ। "

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

इन सभी ने C ++ को बहुत जल्दी अपना लिया, क्योंकि इसने "क्रिटिकल मास" को काफी जल्दी प्राप्त कर लिया, इसलिए (अन्य बातों के अलावा) यह बहुत सारी परियोजनाओं के लिए स्पष्ट पसंद बन गया, क्योंकि यह पहले से ही एक व्यापक रूप से इस्तेमाल किया जाने वाला, प्रसिद्ध था मात्रा।

ऑब्जेक्टिव-सी उस बिंदु तक कभी नहीं पहुंचा। वास्तव में, यह अस्पष्टता में लुप्त होने की ओर था जब एप्पल ने इसे अपने सिस्टम के लिए विकसित करने की इच्छा रखने वाले किसी व्यक्ति पर मजबूर कर दिया। Apple का बाजार हिस्सा इतना बड़ा नहीं है कि वास्तव में इसे महत्वपूर्ण जन दिया जा सके, हालांकि - सिर्फ एक बड़ा आला। यह केवल "डिफ़ॉल्ट" विकल्प है जहां / क्योंकि Apple ऐसा करता है।

मैं यह भी कहना चाहता हूं कि कम से कम मेरी राय में, Objective-C की स्मालटाक जैसी ऑब्जेक्ट मॉडल का मतलब है कि वास्तव में यह C ++ की तुलना में जावा के लिए एक सीधा प्रतियोगी है। हां, इसमें अभी भी C अंडरपिनिंग्स है, और हाँ आप अभी भी एक अलग भाषा का उपयोग किए बिना निम्न-स्तरीय कोड लिख सकते हैं - लेकिन शुद्ध C और वास्तविक उद्देश्य-सी पर्याप्त भिन्न हैं कि यह एक ही भाषा की तरह दो पूरी तरह से भिन्न भाषाओं से कम है दोनों को एक ही कंपाइलर द्वारा संभाला जाए (हालांकि यह आसान है कि दोनों एक दूसरे से बिना जेएनआई की तरह बात कर सकते हैं)।


एक उत्कृष्ट ऐतिहासिक समीक्षा। मैंने पहले 90 के दशक में वाइट बॉक्स नेक्स्टस्टेप मशीनों पर ऑब्जेक्टिव-सी में कोड किया और पहले से ही यूनिवर्सिटी में सी ++ पढ़ाया जा रहा था, ऑब्जेक्टिव-सी का विचित्र सिंटेक्स से नफरत करता था। जैसे कि मैं आपके द्वारा कहे गए कई कामों की सराहना कर सकता हूं।
मार्क बूथ

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

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

+1, उत्कृष्ट व्याख्या!
चैन

11

खैर, मूल रूप से, Apple कुछ समय से ऑब्जेक्टिव-सी के पीछे की प्रेरणा शक्ति है:

  • जबकि अंतिम संस्करण वस्तुतः छोड़ दिया गया है, वस्तुनिष्ठ-सी 2.0 वास्तव में तेजी से कुछ मूल आधार वर्गों / प्रोटोकॉल से बंधा हुआ होने लगा है, जिसका अर्थ है, भाषा सुविधाओं और ढांचे के बीच एक अंतर्निहित कड़ी है, NSFastEnumum मेरे दिमाग में वसंत , जो वस्तुओं के लिए छोरों में ठीक से प्रतिक्रिया के लिए आवश्यक है। इसका मतलब है, भाषा और मंच के बीच एक बढ़ती हुई कड़ी है।
  • कोको के लिए वास्तव में कोई वास्तविक विकल्प नहीं है। और कोको बारी में अधिक से अधिक OSX सुविधाओं पर निर्भर करना शुरू कर रहा है। तकनीकी रूप से, आप किसी भी कोर फ्रेमवर्क के साथ किसी भी OS पर चलने वाला एक Objective-C कार्यान्वयन कर सकते हैं, किसी अन्य प्लेटफ़ॉर्म के लिए वास्तव में बहुत अधिक सामान नहीं है।

जैसा कि अभी है, Apple का उद्देश्य-सी पर पूर्ण नियंत्रण है और अपनी आवश्यकताओं के अनुसार भाषा को चलाता है, जबकि इस ग्रह पर कोई संगठन नहीं है जो एक गैर-ऐप्पल डिवाइस पर ऑब्जेक्टिव-सी को चलाने में रुचि रखता है, जो कि एक प्रदान करने के लिए पर्याप्त रूप से बड़ा होगा मानक पुस्तकालय और टूलकिट के साथ शुरू करने के लिए, जो .NET / मोनो, C ++ या जावा द्वारा प्रस्तुत पारिस्थितिकी प्रणालियों को दूरस्थ रूप से प्रतिद्वंद्वी कर सकता है।


3
वहाँ GNUStep है। वे Apple के साथ बने रहने की कोशिश करते हैं, हालांकि मैंने कुछ समय तक जाँच नहीं की कि वे कितना अच्छा कर रहे हैं।
प्रति जोहानसन

1
और वहाँ Cocotron भी है।
ysdx

1
लिखित उत्तर के इस बिंदु पर, गैर-Apple प्लेटफ़ॉर्म पर ऑब्जेक्टिव-सी 2.0 चलाने के लिए वास्तव में कुछ भी संभव नहीं था। वैसे भी, उसके बाद बहुत प्रयास किए गए, और अब हम GNUstst काफी सुगमता से FreeBSD पर Objective-C 2.0 चलाने की उम्मीद कर सकते हैं।
Eonil
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.