इनमें से कई जवाब सी के लिए वैध कारण देते हैं, या नहीं है, तेज (या तो सामान्य या विशिष्ट परिदृश्य में)। यह निर्विवाद है कि:
- कई अन्य भाषाएं स्वचालित सुविधाएँ प्रदान करती हैं जिन्हें हम प्रदान करते हैं। उदाहरण के लिए, सीमा जाँच, रन-टाइम टाइप जाँच और स्वचालित स्मृति प्रबंधन, मुफ्त में नहीं आते हैं। इन विशेषताओं के साथ कम से कम कुछ लागत जुड़ी हुई है, जिसके बारे में हम सोच भी नहीं सकते हैं - या इन सुविधाओं का उपयोग करने वाले कोड लिखते समय भी महसूस नहीं कर सकते हैं।
- स्रोत से मशीन तक का कदम अक्सर अन्य भाषाओं में उतना सीधा नहीं है जितना कि सी में है।
- OTOH, यह कहना कि संकलित C कोड अन्य भाषाओं में लिखे गए कोड की तुलना में तेजी से निष्पादित होता है, एक सामान्यीकरण है जो हमेशा सच नहीं होता है। काउंटर-उदाहरणों को खोजना आसान है (या कंट्रास्ट)।
इस सब के बावजूद, मैंने देखा है कि कुछ और है, मुझे लगता है कि सी बनाम कई अन्य भाषाओं के तुलनात्मक प्रदर्शन को किसी भी अन्य कारक से बहुत अधिक प्रभावित करता है। अर्थात:
अन्य भाषाओं में अक्सर कोड लिखना आसान होता है जो अधिक धीरे-धीरे निष्पादित होता है। अक्सर, यह भाषा के डिजाइन दर्शन द्वारा भी प्रोत्साहित किया जाता है। कोरोलरी: एक सी प्रोग्रामर कोड लिखने की अधिक संभावना है जो अनावश्यक संचालन नहीं करता है।
उदाहरण के रूप में, एक साधारण विंडोज प्रोग्राम पर विचार करें जिसमें एक एकल मुख्य विंडो बनाई गई है। एसी संस्करण एक WNDCLASS[EX]
संरचना को पॉप्युलेट करेगा जिसे पास किया जाएगा RegisterClass[Ex]
, फिर कॉल करें CreateWindow[Ex]
और एक संदेश लूप दर्ज करें । अत्यधिक सरलीकृत और संक्षिप्त कोड निम्नानुसार है:
WNDCLASS wc;
MSG msg;
wc.style = 0;
wc.lpfnWndProc = &WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = NULL;
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1);
wc.lpszMenuName = NULL;
wc.lpszClassName = "MainWndCls";
RegisterClass(&wc);
CreateWindow("MainWndCls", "", WS_OVERLAPPEDWINDOW | WS_VISIBLE,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
while(GetMessage(&msg, NULL, 0, 0)){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
C # में एक समतुल्य कार्यक्रम कोड की सिर्फ एक पंक्ति हो सकती है:
Application.Run(new Form());
कोड की यह एक पंक्ति सभी कार्यक्षमता प्रदान करती है जो C कोड की लगभग 20 पंक्तियों ने की थी, और कुछ चीजें जो हमने बाहर छोड़ दी थीं, जैसे त्रुटि जाँच। अमीर, फुलर लाइब्रेरी (एक विशिष्ट सी परियोजना में इस्तेमाल किए गए लोगों की तुलना में) ने हमारे लिए बहुत काम किया, कोड के कई और अधिक स्निपेट लिखने के लिए अपना समय खाली कर दिया जो हमें कम लगते हैं लेकिन पर्दे के पीछे कई चरणों को शामिल करते हैं।
लेकिन आसान और त्वरित कोड ब्लोट को सक्षम करने वाला एक समृद्ध पुस्तकालय वास्तव में मेरी बात नहीं है। मेरी बात तब और स्पष्ट होती है जब आप जांचना शुरू करते हैं कि वास्तव में क्या होता है जब हमारे छोटे से एक-लाइनर वास्तव में निष्पादित होते हैं। मज़ेदार समय के लिए, Visual Studio 2008 या उच्चतर में .NET स्रोत का उपयोग सक्षम करें , और ऊपर दिए गए सरल एक-पंक्ति में कदम रखें। मज़ेदार छोटे रत्नों में से एक जो आप भर में आएंगे, उसके लिए इस टिप्पणी में है Control.CreateParams
:
// In a typical control this is accessed ten times to create and show a control.
// It is a net memory savings, then, to maintain a copy on control.
//
if (createParams == null) {
createParams = new CreateParams();
}
दस बार । जानकारी मोटे तौर पर क्या एक में संग्रह किया गया है की राशि के बराबर WNDCLASSEX
संरचना और क्या करने के लिए पारित किया है CreateWindowEx
से लिया गया है Control
वर्ग में दस गुना से पहले यह एक में संग्रह किया गया है WNDCLASSEX
संरचना और को दे दिया RegisterClassEx
और CreateWindowEx
।
सभी में, इस बहुत ही मूल कार्य को करने के लिए निष्पादित निर्देशों की संख्या सी में # की तुलना में सी # में परिमाण के 2 से 3 आदेश हैं। इसका एक हिस्सा एक सुविधा संपन्न पुस्तकालय के उपयोग के कारण है, जो आवश्यक रूप से सामान्यीकृत है, बनाम। हमारा साधारण सी कोड जो हमें वही चाहिए जो और कुछ नहीं चाहिए। लेकिन इसका एक हिस्सा इस तथ्य के कारण है कि .NET फ्रेमवर्क की मॉड्यूलर, ऑब्जेक्ट-ओरिएंटेड प्रकृति, खुद को निष्पादन के बहुत पुनरावृत्ति के लिए उधार देती है जो अक्सर एक प्रक्रियात्मक दृष्टिकोण से बचा जाता है।
मैं C # या .NET ढाँचे को चुनने की कोशिश नहीं कर रहा हूँ। न ही मैं यह कह रहा हूं कि मॉडर्नाइजेशन, सामान्यीकरण, पुस्तकालय / भाषा की विशेषताएं, ओओपी, आदि बुरी चीजें हैं । मैं अपना अधिकांश विकास C में करता था, बाद में C ++ में, और हाल ही में C # में करता था। इसी तरह, सी से पहले, मैंने ज्यादातर असेंबली का इस्तेमाल किया। और प्रत्येक चरण "उच्च" के साथ मेरी भाषा जाती है, मैं कम समय में बेहतर, अधिक बनाए रखने योग्य, अधिक मजबूत कार्यक्रम लिखता हूं। हालांकि, वे थोड़ा और धीरे-धीरे निष्पादित करते हैं।