पहला, (IMO) पायथन से तुलना करना लगभग व्यर्थ है। केवल उद्देश्य-सी के साथ तुलना सार्थक है।
- एक नई प्रोग्रामिंग भाषा इतनी तेज कैसे हो सकती है?
Objective-C एक धीमी भाषा है। (केवल C भाग तेज़ है, लेकिन ऐसा इसलिए है क्योंकि यह C है) यह कभी भी बहुत तेज़ नहीं रहा है। यह उनके (एप्पल के) उद्देश्य के लिए पर्याप्त तेज था, और तेजी से तब उनके पुराने संस्करण। और यह धीमा था क्योंकि ...
- क्या ऑब्जेक्टिव-सी का परिणाम खराब कंपाइलर से है या स्विफ्ट की तुलना में ऑब्जेक्टिव-सी में कुछ कम कुशल है?
उद्देश्य-सी ने गतिशील रूप से भेजे जाने की हर विधि की गारंटी दी। कोई स्थिर प्रेषण नहीं। इससे उद्देश्य-सी कार्यक्रम को और अधिक अनुकूलित करना असंभव हो गया। खैर, शायद JIT तकनीक से कुछ मदद मिल सकती है, लेकिन AFAIK, Apple को वास्तव में अप्रत्याशित प्रदर्शन विशेषताओं और वस्तु जीवनकाल से नफरत है। मुझे नहीं लगता कि उन्होंने कोई जेआईटी सामान अपनाया था। स्विफ्ट में ऐसी डायनेमिक प्रेषण गारंटी नहीं है जब तक कि आप ऑब्जेक्टिव-सी संगतता के लिए कुछ विशेष विशेषता नहीं रखते हैं।
- आप 40% प्रदर्शन वृद्धि कैसे समझाएंगे? मैं समझता हूं कि कचरा संग्रहण / स्वचालित संदर्भ नियंत्रण कुछ अतिरिक्त ओवरहेड का उत्पादन कर सकता है, लेकिन यह बहुत ज्यादा है?
जीसी या आरसी यहाँ कोई फर्क नहीं पड़ता। स्विफ्ट आरसी को मुख्य रूप से नियोजित कर रहा है। कोई GC नहीं है, और जब तक GC तकनीक पर कुछ विशाल वास्तु छलांग नहीं है, तब भी नहीं होगा। (IMO, यह हमेशा के लिए है) मेरा मानना है कि स्विफ्ट में स्थैतिक अनुकूलन के लिए बहुत अधिक जगह है। विशेष रूप से निम्न स्तर के एन्क्रिप्शन एल्गोरिदम, क्योंकि वे आमतौर पर विशाल संख्यात्मक गणनाओं पर भरोसा करते हैं, और यह सांख्यिकीय रूप से प्रेषण भाषाओं के लिए एक बड़ी जीत है।
वास्तव में मुझे आश्चर्य हुआ क्योंकि 40% बहुत छोटा लगता है। मुझे और अधिक उम्मीद थी। वैसे भी, यह प्रारंभिक रिलीज है, और मुझे लगता है कि अनुकूलन प्राथमिक चिंता नहीं थी। स्विफ्ट भी नहीं है फीचर-कम्प्लीट! वे इसे बेहतर बनाएंगे।
अपडेट करें
कुछ मुझे तर्क देते हैं कि जीसी तकनीक बेहतर है। हालांकि नीचे दी गई चीजें तर्कपूर्ण हो सकती हैं, और सिर्फ मेरी बहुत पक्षपाती राय है, लेकिन मुझे लगता है कि मुझे इस अनावश्यक तर्क से बचने के लिए कहना होगा।
मुझे पता है कि रूढ़िवादी / अनुरेखण / जनरेशनल / वृद्धिशील / समानांतर / रीयलटाइम जीसी क्या हैं और वे कैसे भिन्न हैं। मुझे लगता है कि अधिकांश पाठक पहले से ही जानते हैं। मैं यह भी मानता हूं कि जीसी कुछ क्षेत्र में बहुत अच्छा है, और कुछ मामलों में उच्च थ्रूपुट भी दिखाता है।
वैसे भी, मुझे संदेह है कि GC throughput का दावा हमेशा RC से बेहतर है। आरसी के अधिकांश ओवरहेड रेफरी-काउंटिंग ऑपरेशन से आते हैं और रिफ-काउंट नंबर वेरिएबल की सुरक्षा के लिए लॉकिंग होते हैं। और आरसी कार्यान्वयन आमतौर पर गिनती के संचालन से बचने का एक तरीका प्रदान करता है। उद्देश्य-सी में, __unsafe_unretained
स्विफ्ट में (और हालांकि यह अभी भी कुछ हद तक मेरे लिए अस्पष्ट है) unowned
सामान। यदि रेफ-काउंटिंग ऑपरेशन लागत स्वीकार्य नहीं है, तो आप यांत्रिकी का उपयोग करके उन्हें चुनिंदा रूप से बाहर करने का प्रयास कर सकते हैं। सैद्धांतिक रूप से, हम आरसी ओवरहेड से बचने के लिए गैर-अनुरक्षण संदर्भों का बहुत आक्रामक तरीके से उपयोग करके लगभग अद्वितीय-स्वामित्व परिदृश्य का अनुकरण कर सकते हैं। इसके अलावा, मुझे उम्मीद है कि संकलक कुछ स्पष्ट अनावश्यक आरसी संचालन को स्वचालित रूप से समाप्त कर सकता है।
RC सिस्टम, AFAIK के विपरीत, संदर्भ-प्रकार के आंशिक ऑप्ट-आउट GC प्रणाली पर एक विकल्प नहीं है।
मुझे पता है कि कई जारी किए गए ग्राफिक्स और गेम हैं, जो जीसी आधारित प्रणाली का उपयोग कर रहे हैं, और यह भी जानते हैं कि उनमें से ज्यादातर नियतत्ववाद की कमी से पीड़ित हैं। न केवल प्रदर्शन विशेषता के लिए, बल्कि जीवन भर के प्रबंधन पर भी। एकता ज्यादातर सी ++ में लिखी गई है, लेकिन छोटे सी # भाग सभी अजीब प्रदर्शन मुद्दों का कारण बनता है। HTML हाइब्रिड ऐप्स और अभी भी किसी भी सिस्टम पर अप्रत्याशित स्पाइक्स से पीड़ित हैं। व्यापक रूप से इसका मतलब यह नहीं है कि बेहतर है। इसका मतलब है कि यह आसान और लोकप्रिय लोगों के लिए है जिनके पास कई विकल्प नहीं हैं।
अपडेट २
अनावश्यक तर्क या चर्चा से बचने के लिए, मैं कुछ और विवरण जोड़ता हूं।
@ आसिक ने जीसी स्पाइक्स के बारे में एक दिलचस्प राय प्रदान की। यही हम मान-प्रकार-हर जगह दृष्टिकोण को जीसी सामान को चुनने के तरीके के रूप में मान सकते हैं । यह बहुत आकर्षक है, और यहां तक कि कुछ प्रणालियों (उदाहरण के लिए विशुद्ध रूप से कार्यात्मक दृष्टिकोण) पर भी उल्लेखनीय है। मैं सहमत हूं कि यह सिद्धांत रूप में अच्छा है। लेकिन व्यवहार में इसके कई मुद्दे हैं। सबसे बड़ी समस्या इस चाल का आंशिक अनुप्रयोग है जो सही स्पाइक-मुक्त विशेषताओं को प्रदान नहीं करता है।
क्योंकि विलंबता मुद्दा हमेशा या सभी समस्या है। यदि आपके पास 10 सेकंड (= 600 फ्रेम) के लिए एक फ्रेम स्पाइक है, तो पूरी प्रणाली स्पष्ट रूप से विफल हो रही है। यह कितना बेहतर या बुरा है, इसके बारे में नहीं है। यह सिर्फ पास या फेल है। (या फिर 0.0001%) जीसी स्पाइक का स्रोत कहां है? यह जीसी लोड का खराब वितरण है। और ऐसा इसलिए है क्योंकि जीसी मौलिक रूप से अनिश्चितकालीन है। यदि आप कोई कचरा बनाते हैं, तो यह जीसी को सक्रिय करेगा, और स्पाइक अंततः होगा। बेशक, आदर्श दुनिया में जहां जीसी लोड हमेशा आदर्श होगा, ऐसा नहीं होगा, लेकिन मैं काल्पनिक आदर्श दुनिया के बजाय वास्तविक दुनिया में रह रहा हूं।
फिर यदि आप स्पाइक से बचना चाहते हैं, तो आपको पूरे सिस्टम से सभी रेफ-प्रकारों को निकालना होगा । लेकिन यह .NET कोर सिस्टम और लाइब्रेरी जैसे unremovable part के कारण कठिन, पागल और असंभव है। सिर्फ गैर-जीसी प्रणाली का उपयोग करना कहीं अधिक आसान है ।
जीसी के विपरीत, आरसी मौलिक रूप से नियतात्मक है, और आपको केवल स्पाइक से बचने के लिए इस पागल अनुकूलन (केवल विशुद्ध रूप से मूल्य-प्रकार) का उपयोग करने की आवश्यकता नहीं है। आपको जो करना है, वह नीचे ट्रैक कर रहा है और स्पाइक का कारण बनने वाले हिस्से का अनुकूलन कर रहा है। आरसी सिस्टम में, स्पाइक स्थानीय एल्गोरिथ्म मुद्दा है, लेकिन जीसी सिस्टम में, स्पाइक्स हमेशा वैश्विक सिस्टम मुद्दा होते हैं।
मुझे लगता है कि मेरा उत्तर बहुत अधिक विषय से दूर हो गया है, और ज्यादातर मौजूदा चर्चाओं की पुनरावृत्ति है। यदि आप वास्तव में कुछ श्रेष्ठता / हीनता / विकल्प या कुछ और जीसी / आरसी सामानों का दावा करना चाहते हैं, तो इस साइट और स्टैकऑवरफ़्लो में मौजूदा चर्चाएँ बहुत हैं, और आप वहाँ पर लड़ना जारी रख सकते हैं।