इस प्रश्न के साथ एक सामान्य समस्या है कि यह बहुत निरपेक्ष है। यह वास्तव में कहने का कोई मतलब नहीं है "भाषा X भाषा Y से तेज है"। एक कंप्यूटर भाषा स्वयं "तेज़" या "धीमी" नहीं है क्योंकि यह केवल एक एल्गोरिथ्म को व्यक्त करने का तरीका है। वास्तविक प्रश्न "किसी विशेष समस्या डोमेन के लिए भाषा Y के कार्यान्वयन Y1 की तुलना में भाषा X का कार्यान्वयन X1 तेजी से क्यों है" के आदेश पर कुछ होना चाहिए?
कुछ गति अंतर निश्चित रूप से भाषा से बाहर गिरने वाले हैं क्योंकि कुछ भाषाएं कुछ डोमेन को दूसरों की तुलना में लागू करना आसान हैं। लेकिन कार्यान्वयन में तेजी लाने वाली अधिकांश भाषा नहीं है। उदाहरण के लिए, आप वास्तव में यह नहीं कह सकते हैं कि "पायथन जावा की तुलना में धीमा है" यह विचार किए बिना कि क्या आप सीपीथॉन, आयरनपिथॉन या PyPy के बारे में बात कर रहे हैं। यह उन भाषाओं के लिए विशेष रूप से सच है जो VM का उपयोग करते हैं क्योंकि गति सीधे VM की गुणवत्ता से प्रभावित होने वाली है।
एक तरफ, मैं एक ऐसी प्रणाली के साथ काम करता हूं जो विभिन्न कारणों से हमारे डिवाइस पर जेआईटी का उपयोग एक बहुत लोकप्रिय जावास्क्रिप्ट वीएम के साथ नहीं कर सकती है जो सामान्य रूप से इसका समर्थन करती है। इसका मतलब है कि हमारा जावास्क्रिप्ट एक समान प्रोसेसर के साथ पीसी पर दूर, बहुत धीमा चलता है। वह एक परिवर्तन, जो सीधे भाषा से ही संबंधित नहीं है, जावास्क्रिप्ट को "सी ++ की तुलना में कुछ गुना धीमा" होने के कारण "सी ++ की तुलना में परिमाण धीमे के आदेश" के रूप में लेता है।
यह भी विचार करें कि भाषाएँ प्रदर्शन विशेषताओं में भिन्न होती हैं जो सीधे तुलना नहीं होती हैं। बहुत सारे मानक केवल भाषा ए से भाषा बी तक एक कार्यक्रम का अनुवाद करते हैं और इस बात का ध्यान नहीं रखते हैं कि भाषाएं उन विशेषताओं में भिन्न हैं जो तेजी से होती हैं। (आप इसे किसी भी उचित बेंचमार्क तुलना में देख सकते हैं, जैसे कि आप उनसे लिंक करते हैं क्योंकि उनके पास अक्सर "फ़ू-टू-सो-थिंग और मुझे भाषा फू में इसे लागू करने का तरीका दिखाने के लिए धन्यवाद जैसे नोट होते हैं।"
उदाहरण के लिए, यह जावा कोड लें:
for(int i=0;i<10;i++) {
Object o = new Object;
doSomething(o);
}
यह C ++ में इसे "रीराइट" करना लुभाएगा और रन टाइम की तुलना करेगा:
for(int i=0;i<10;i++) {
Object *o = new Object;
doSomething(o);
delete(o);
}
बात यह है, किसी भी सक्षम C ++ प्रोग्रामर को तुरंत दिखाई देगा कि C ++ में, यह कुछ करने का सबसे तेज़ तरीका नहीं है। आप चीजों को आसानी से बदलकर C ++ के लिए अधिक उपयुक्त बना सकते हैं:
for(int i=0;i<10;i++) {
Object o;
doSomething(&o);
}
मुद्दा यह नहीं है कि सी ++ तेज हो सकता है, बल्कि भाषाओं की तुलना करने के लिए बेंचमार्क लिखने के बजाय वास्तव में, वास्तव में कठिन है। इसे उचित रूप से करने के लिए, आपको दोनों भाषाओं का विशेषज्ञ होना चाहिए, और दोनों भाषाओं में स्क्रैच से लिखना होगा। फिर भी, आप आसानी से उन क्षेत्रों में भाग सकते हैं जहां एक भाषा किसी विशेष कार्य में उत्कृष्टता प्राप्त करती है। उदाहरण के लिए, मैं C ++ में हनोई के टावर्स का एक संस्करण लिख सकता हूं जो किसी भी उचित संकलक पर जावा की तुलना में तेजी से चलेगा। मैं यह कर सकता हूं कि अनिवार्य रूप से धोखा देकर, C ++ टेम्पलेट्स का उपयोग करके, संकलन समय पर मूल्यांकन किया गया (http://forums.devshed.com/c-programming-42/c-towers-of-hanoi-use-templates-424148.html)
वह बिंदु यह नहीं है कि मैं यह कह सकता था कि "C ++ जावा की तुलना में तेज़ है" क्योंकि मेरा प्रोग्राम तुरंत वापस आ गया जबकि जावा संस्करण मिनटों के लिए चला गया (और उम्मीद है कि किसी ने भी देखा कि मेरे कार्यक्रम को बनाने में आधा घंटा नहीं लगा।) मुद्दा यह है कि इसके लिए। अलग-अलग संकीर्ण मामले, C ++ तेज है। अन्य संकीर्ण मामलों के लिए यह चारों ओर का दूसरा रास्ता हो सकता है। तो यह "C ++ अधिक तेज़ नहीं है", यह "C ++ ऐसे उदाहरणों में तेज़ है जहाँ आप समय के निर्माण के दौरान अभिव्यक्ति का मूल्यांकन कर सकते हैं।" कम संतोषजनक, लेकिन सच है।
भाषाओं में गति अंतर ज्यादातर कार्यान्वयन के बारे में हैं। संकलित भाषाओं की व्याख्या की गई भाषाओं की तुलना में तेज़ होने जा रही है। मूल कोड का संकलन बाइट कोड के संकलन की तुलना में अधिक तेज़ होने वाला है। यह उन प्रश्नों की तुलना में बहुत अधिक प्रभावकारी होगा जैसे कि भाषा की तुलना में सांख्यिकीय रूप से टाइप किया गया है या नहीं। और निश्चित रूप से, अच्छे कार्यान्वयन बुरे लोगों की तुलना में तेज होने जा रहे हैं।
और यह मत भूलो कि अच्छे प्रोग्रामर खराब प्रोग्रामर की तुलना में तेजी से कोड का उत्पादन करने जा रहे हैं, अक्सर एक हद तक यह काफी भिन्नता है भाषा के मतभेद।