इन तुलनाओं में ऑब्जेक्टिव-सी की तुलना में स्विफ्ट इतनी तेज कैसे हो सकती है?


115

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

यहां छवि विवरण दर्ज करें

RC4 एन्क्रिप्शन एल्गोरिथ्म का उपयोग करते हुए एक प्रदर्शन तुलना के बारे में और भी अधिक अविश्वसनीय ग्राफ था ।

जाहिर है कि यह एक विपणन चर्चा है, और वे इस पर विस्तार से नहीं गए कि यह प्रत्येक में कैसे लागू किया गया था। हालांकि मुझे आश्चर्य हो रहा है:

  1. एक नई प्रोग्रामिंग भाषा इतनी तेज कैसे हो सकती है?
  2. ऑब्जेक्टिव-सी परिणाम खराब कंपाइलर के कारण होता है या क्या स्विफ्ट की तुलना में ऑब्जेक्टिव-सी में कुछ कम कुशल है?
  3. आप 40% प्रदर्शन वृद्धि कैसे समझाएंगे? मैं समझता हूं कि कचरा संग्रहण / स्वचालित संदर्भ नियंत्रण कुछ अतिरिक्त ओवरहेड का उत्पादन कर सकता है, लेकिन यह बहुत ज्यादा है?

13
@MathewFoscarini Obj-C असेंबलर के पास जाता है, लेकिन इसे एक महंगी वस्तु संदेश प्रेषण तंत्र मिला है। ज्यादातर GUI काम के लिए जो मायने नहीं रखता है, लेकिन छंटाई के लिए यह बहुत मायने रखता है।
डोनल फैलो

17
पायथन की तुलना यहाँ असली हेड-स्क्रैचर है।
अष्टमेश

9
@ साइरियन मार्केटिंग, और भाषा अजगर के वाक्य-विन्यास (गोलंग की तरह) से उधार लेती प्रतीत होती है। वे कहने की कोशिश कर रहे हैं "हे, अजगर डेवलपर्स, आप कुछ लिख सकते हैं मैक पर विदेशी भी नहीं है और यह बहुत तेज़ है, यहां तक ​​कि उद्देश्य सी की तुलना में भी तेज है कि आपको वास्तव में कभी भी लटका नहीं मिला"

4
@MichaelT मुझे लगता है कि, लेकिन यह अभी भी अजीब है। जो कोई भी भाषाओं के बारे में कुछ भी जानता है, वह महसूस करेगा कि पायथन, एक व्याख्या की गई भाषा के रूप में, बस उद्देश्य-सी या अन्य संकलित भाषाओं (अधिकांश कार्यों के लिए) के समान बॉलपार्क में नहीं जा सकता है। बेंचमार्क के रूप में इसका उपयोग करना अजीब है।
अष्टस्रोत

7
उन्हें शायद कोड लिखने में लगने वाले समय का मतलब है ...
लुकास ईडर

जवाबों:


62

पहला, (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 के कारण कठिन, पागल और असंभव है। सिर्फ गैर-जीसी प्रणाली का उपयोग करना कहीं अधिक आसान है

जीसी के विपरीत, आरसी मौलिक रूप से नियतात्मक है, और आपको केवल स्पाइक से बचने के लिए इस पागल अनुकूलन (केवल विशुद्ध रूप से मूल्य-प्रकार) का उपयोग करने की आवश्यकता नहीं है। आपको जो करना है, वह नीचे ट्रैक कर रहा है और स्पाइक का कारण बनने वाले हिस्से का अनुकूलन कर रहा है। आरसी सिस्टम में, स्पाइक स्थानीय एल्गोरिथ्म मुद्दा है, लेकिन जीसी सिस्टम में, स्पाइक्स हमेशा वैश्विक सिस्टम मुद्दा होते हैं।

मुझे लगता है कि मेरा उत्तर बहुत अधिक विषय से दूर हो गया है, और ज्यादातर मौजूदा चर्चाओं की पुनरावृत्ति है। यदि आप वास्तव में कुछ श्रेष्ठता / हीनता / विकल्प या कुछ और जीसी / आरसी सामानों का दावा करना चाहते हैं, तो इस साइट और स्टैकऑवरफ़्लो में मौजूदा चर्चाएँ बहुत हैं, और आप वहाँ पर लड़ना जारी रख सकते हैं।


4
कचरा संग्रह, विशेष रूप से जनरेशनल, आमतौर पर संदर्भ गिनती की तुलना में काफी तेज है।
Jan Hudec

9
@JanHudec रियलिटी ग्राफिक्स क्षेत्र में आपका काफी तेज बस अर्थहीन है। इसलिए मैं GC पर भारी छलांग का उल्लेख करता हूं । सैद्धांतिक रूप से और व्यावहारिक रूप से पीढ़ीगत जीसी स्पाइक-फ्री होने के करीब भी नहीं है।
Eonil

5
तेजी से और स्पाइक मुक्त पूरी तरह से रूढ़िवादी श्रेणियां हैं। पीढ़ीगत कचरा संग्रहकर्ता तेज होते हैं । वे स्पाइक फ्री नहीं हैं।
Jan Hudec

4
आप जो बात कर रहे हैं वह थ्रूपुट हैफास्टर हमेशा एक अस्पष्ट शब्द रहा है, और संदर्भ से कुछ भी मतलब हो सकता है। आप शब्दों के अर्थ के बारे में बहस करने चाहते हैं, आप के बजाय अधिक सटीक शब्द का उपयोग करना चाहिए तेजी से वास्तविक समय ग्राफिक्स - विशेष रूप से वर्तमान संदर्भ पर विचार।
Eonil

11
@ जानहुडेक: मोबाइल उपकरणों, या विवश संसाधनों के साथ किसी भी उपकरण पर, जीसी काफी तेज नहीं है और वास्तव में समस्या का एक प्रमुख हिस्सा है।
मेसन व्हीलर

72

अजगर की तुलना में 3.9 गुना तेज होने के कारण, वह भाषा जो लगातार अधिकांश मार्जिन को काफी मार्जिन से खो देती है (ठीक है, यह पर्ल, रूबी और पीएचपी के बराबर है; लेकिन यह कुछ भी वैधानिक रूप से खो देता है), ऐसा कुछ भी नहीं है जिसके बारे में गर्व करना चाहिए।

मानक खेल सी ++ प्रोग्राम हैं जो ज्यादातर मामलों में तेजी से अजगर कार्यक्रमों की तुलना में परिमाण के क्रम से अधिक हैं दर्शाता है। जावा, C # (मोनो पर), OCaml, Haskell और यहां तक ​​कि Clojure के साथ तुलना करते समय यह बहुत बेहतर नहीं है, जो कि सांख्यिकीय रूप से टाइप नहीं किया गया है।

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

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


13
मुझे इस उत्तर की बात समझ में नहीं आई। क्या आप "बेंचमार्क त्रुटिपूर्ण हैं" कहकर "कैसे तेजी से तेजी से" जवाब दे रहे हैं? क्या वह बिंदु जो आप बना रहे हैं? मैं यह नहीं देखता कि उस उत्तर को कैसे पूछा जा रहा है।
ब्रायन ओकले

15
@BryanOakley: मुझे नहीं लगता कि बेंचमार्क त्रुटिपूर्ण हैं, लेकिन संभावना है कि उन्होंने एक बेंचमार्क उठाया जहां स्विफ्ट तेजी से निश्चित रूप से विचार किया जाना था।
जन हुदेक

23
यह संभव है कि "स्विफ्ट कैसे तेज हो?" हो सकता है "यह नहीं है, वास्तव में", @BryanOakley; यही वह सार है जो मुझे जनवरी के उत्तर से मिलता है। "झूठ, लानत झूठ और आँकड़े", सब के बाद।
जोश कैसवेल

4
कुछ समय पहले हमने कोडनामे को बेंचमार्क किया था जो iOS पर चल रहा था और हमारा जावा कार्यान्वयन ऑब्जेक्टिव-सी कोडेनामोने. com/blog/ के मुकाबले बहुत तेज था। जनवरी सही है, डायनामिक डिस्पैच वास्तव में धीमा है, अगर उन्होंने इन्हें थोड़ा सा भी सुधार दिया है तो कुछ संकेत मिलेंगे। एक बड़ा सुधार दिखाओ। यदि वे एक अंश द्वारा भी एआरसी में सुधार करते हैं (बेहतर कोड विश्लेषण के लिए धन्यवाद) वे जटिलता की एक हास्यास्पद राशि से छुटकारा पा सकते हैं। कंपाइलर (जावा को देखने के लिए) और स्विफ्ट के प्रतिबंधों को और अधिक करने के लिए भाषा जितनी अधिक प्रतिबंधित होगी।
शाय अलमोग

7
जनवरी का उत्तर Q1 और शायद Q2 का एक सही उत्तर है। जब मैंने एक मार्केटिंग इवेंट में बेंचमार्क को मुख्य वक्ता के रूप में देखा, तो मैंने सोचा: "वाह, चयनित सर्वश्रेष्ठ मामले में केवल 1,3x। हम औसत परिणाम क्या लेंगे? 0.3x?"
अमीन नेगम-अवध

5

उद्देश्य-सी गतिशील रूप से हर विधि कॉल को भेजता है।

परिकल्पना: स्विफ्ट संकलक compareको sortलूप से बाहर देखने की विधि को फहराने के लिए बेंचमार्क स्थैतिक टाइपिंग का उपयोग करता है । इसके लिए एक संकीर्ण प्रकार के प्रतिबंध की आवश्यकता होती है जो केवल सरणी में जटिल वस्तुओं की अनुमति देता है, न कि कॉम्प्लेक्स के उपवर्गों की।

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

परिकल्पना: स्विफ्ट लूप से बाहर संदर्भ-गिनती कॉल का अनुकूलन करती है।

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

(ऑब्जेक्टिव-सी में आप प्रदर्शन के लिए C / C ++ पर वापस आ सकते हैं, जब तक कि इसमें ऑब्जेक्टिव-सी ऑब्जेक्ट शामिल न हों, उदाहरण के लिए C सरणी का एक प्रकार।


3

ईमानदारी से, जब तक वे उन परीक्षणों के स्रोत को जारी नहीं करते हैं जो मैं उपयोग कर रहा हूं मुझे विश्वास नहीं होगा कि Apple को इस विषय पर कहना है। याद रखें, यह वह कंपनी है जिसने 6 महीने पहले बिजली की चिंताओं के आधार पर पीपीसी से इंटेल पर स्विच किया था, जब वे कह रहे थे कि इंटेल चूसा और वास्तव में एक वाणिज्यिक में इंटेल बनी को टॉर्चर किया। मैं कठिन अकाट्य प्रमाण देखना चाहूंगा कि स्विफ्ट ओबीजीसी से अधिक श्रेणियों में केवल छंटाई से अधिक तेज है।

इसके अलावा आपको किसी भी आँकड़े पर सवाल करना होगा जो डब्ल्यूडब्ल्यूडीसी में जारी किए गए हैं क्योंकि उनके पास विपणन की गंध है।

कहा जा रहा है कि मैंने खुद स्विफ्ट और ओबीजीसी के बीच कोई परीक्षण नहीं किया है, लेकिन जो मुझे पता है कि स्विफ्ट के पास खुद का एलएलवीएम आईआर एक्सटेंशन है, और यह संभव है कि ओबीजीसी की तुलना में संकलन समय पर अधिक अनुकूलन किया जा रहा हो।

पूर्ण प्रकटीकरण: मैं https://ind.ie/phoenix/ पर स्थित एक खुला स्रोत स्विफ्ट कंपाइलर लिख रहा हूं

अगर कोई यह सुनिश्चित करने में मदद करना चाहेगा कि स्विफ्ट सिर्फ Apple हार्डवेयर पर उपलब्ध नहीं है, तो मुझे बताएं और मुझे आपको शामिल करने में खुशी होगी।


2
यह एक भद्दी टिप्पणी की तरह पढ़ता है, देखें कैसे जवाब दें
gnat

2
क्या अब यह बेहतर है? :)
greg.casamento

0

मैंने स्विफ्ट ट्यूटोरियल के माध्यम से खुद को संघर्ष किया है, और यह मुझे लगता है कि स्विफ्ट पृथ्वी से अधिक नीचे है (मुझे विज़ुअल बेसिक के बारे में सोचता है) ऑब्जेक्टिव-सी की तुलना में कम 'ऑब्जेक्ट-इफिकेशन' के साथ। अगर वे सी या सी ++ को ध्यान में रखते थे, तो मुझे लगता है कि बाद में जीत होगी, क्योंकि वे केवल और भी संकलन-समय हैं।

इस मामले में, मुझे लगता है कि ऑब्जेक्टिव-सी ऑब्जेक्ट ओरिएंटेड प्योरनेस (और ओवरहेड) का शिकार है।


13
"जटिल ऑब्जेक्ट सॉर्ट" बेंचमार्क करना C जैसे भाषा में थोड़ा मुश्किल होगा जिसमें ऑब्जेक्ट का मूल कार्यान्वयन नहीं होता है। यह देखते हुए कि इस बात के लिए दर्शकों की संभावना 100% उद्देश्य-सी प्रोग्रामर थी, सी ++ जैसी भाषा से तुलना करने से कोई मतलब नहीं है। तेजी की बात "अरे, यह अब तक की सबसे बड़ी भाषा है!" बल्कि "हे, यह उस भाषा की तुलना में तेज़ है जिसे आप अब OSX / iOS विकास के लिए उपयोग कर रहे हैं"।
ब्रायन ओकले

10
सी में एक पूरी तरह से ठीक है qsortजो जटिल ऑब्जेक्ट को छंटाई करने की अनुमति देगा; यह सिर्फ एक कॉलबैक का उपयोग करता है जो वस्तुओं को हाथ में समझता है। मुझे संदेह है कि C ++ गायब है क्योंकि std::sortस्विफ्ट को शर्मिंदा करेगा। (चूंकि यह एक टेम्प्लेट है, एक C ++ कंपाइलर इसे भारी रूप से अनुकूलित कर सकता है, लूप को
अनियंत्रित कर सकता है

@ दलाल: मैं आपसे पूरी तरह सहमत हूं। C और C ++ दोनों में स्विफ्ट को पछाड़ने की क्षमता है। क्या निष्पादित परीक्षण प्राप्त करना संभव होगा। मैं स्विफ्ट, ऑब्जेक्टिव-सी, सी ++ और सी के साथ एक ही बेंचमार्क को निष्पादित करने के लिए तैयार हूं
चित्रित ब्लैक

@BryanOakley ने भी कहा, "इस भाषा के लिए कम वर्ग कोष्ठक की आवश्यकता होती है!"
निक बेडफोर्ड

1
इस उत्तर में पानी बिल्कुल नहीं है और यह भ्रामक है। OO वास्तव में धीमा नहीं है, वास्तव में सबसे तेज़ सिस्टम जो आप पाएंगे, वह C ++, Java और C # होगा और प्रोग्रामिंग की शैली (भारी OO या नहीं) परिणामी गति के साथ बहुत कम होगी जब तक कि आपके पास वास्तव में नहीं है बुरा कोड।
बिल के
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.