Bu cevapların birçoğu, C'nin neden daha hızlı (veya daha hızlı) olmasının geçerli nedenlerini vermektedir (genel olarak veya belirli senaryolarda). İnkar edilemez:
- Diğer birçok dil, bize verdiğimiz otomatik özellikleri sağlar. Örneğin, sınır denetimi, çalışma zamanı türü denetimi ve otomatik bellek yönetimi ücretsiz olarak gelmez. Bu özellikleri kullanan kod yazarken düşünemeyeceğimiz, hatta farkına varamayacağımız bu özelliklerle ilişkili en azından bir miktar maliyet vardır .
- Kaynaktan makineye adım genellikle diğer dillerde C dilinde olduğu gibi doğrudan değildir.
- OTOH, derlenmiş C kodunun diğer dillerde yazılmış diğer kodlardan daha hızlı çalıştığını söylemek her zaman doğru olmayan bir genellemedir. Karşı örnekleri bulmak kolaydır (veya devam eder).
Tüm bunlara rağmen, fark ettim ki, C'nin diğer birçok dil ile karşılaştırmalı performansını diğer tüm faktörlerden daha fazla etkilediğini fark ettim. Zekâ için:
Diğer diller genellikle daha yavaş çalışan kod yazmayı kolaylaştırır. Çoğu zaman, dilin tasarım felsefeleri tarafından bile teşvik edilir. Sonuç: C programcısının gereksiz işlemler yapmayan kod yazma olasılığı daha yüksektir.
Örnek olarak, tek bir ana pencerenin oluşturulduğu basit bir Windows programını düşünün. AC sürümü, geçilecek bir WNDCLASS[EX]
yapıyı doldurur RegisterClass[Ex]
, ardından CreateWindow[Ex]
bir mesaj döngüsü çağırır ve girer. Son derece basitleştirilmiş ve kısaltılmış kod aşağıdaki gibidir:
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 # 'daki eşdeğer bir program sadece bir kod satırı olabilir:
Application.Run(new Form());
Bu bir kod satırı, yaklaşık 20 satır C kodunun yaptığı tüm işlevleri sağlar ve hata kontrolü gibi dışarıda bıraktığımız bazı şeyleri ekler. Daha zengin, daha dolgun kütüphane (tipik bir C projesinde kullanılanlara kıyasla) bizim için çok fazla iş yaptı, bize kısa görünen ama sahnelerin arkasında birçok adım içeren daha fazla kod parçacığı yazma zamanımızı serbest bıraktı.
Ancak kolay ve hızlı kod şişkinliğini mümkün kılan zengin bir kütüphane gerçekten benim açımdan değil. Küçük tek astarımız gerçekten çalıştığında gerçekte ne olduğunu incelemeye başladığınızda benim açımdan daha belirgin. Eğlenmek için, Visual Studio 2008 veya daha yüksek bir sürümde .NET kaynak erişimini etkinleştirin ve yukarıdaki basit one-linef'e adım atın. Karşılaşacağınız eğlenceli küçük taşlardan biri, alıcıdaki bu yorumu 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();
}
On kez . Bir depoladıklarınızı toplamına kabaca eşdeğer bilgi WNDCLASSEX
yapısı ve hangi geçirilen CreateWindowEx
alınır Control
sınıf on kez önce bir saklanan WNDCLASSEX
yapısı ve geçirilir RegisterClassEx
ve CreateWindowEx
.
Sonuçta, bu çok temel görevi gerçekleştirmek için yürütülen talimatların sayısı C # 'da C'den daha fazla 2-3 büyüklük sırasıdır. Bunun bir kısmı, zorunlu olarak genelleştirilmiş, zenginleştirilmiş bir kütüphanenin kullanılmasından kaynaklanmaktadır. tam olarak ihtiyacımız olan şeyi ve daha fazlasını yapan basit C kodumuz. Ancak bunun bir kısmı, .NET çerçevesinin modülerleştirilmiş, nesneye yönelik doğasının, genellikle prosedürel bir yaklaşımla kaçınılması gereken çok sayıda yürütme tekrarına borç vermesidir.
C # veya .NET framework almaya çalışmıyorum. Ben de modülerleşme, genelleme, kütüphane / dil özellikleri, OOP, vs.'nin kötü şeyler olduğunu söylemiyorum . Gelişimimin çoğunu C, daha sonra C ++ ve son zamanlarda C # ile yapıyordum. Benzer şekilde, C'den önce çoğunlukla montaj kullandım. Ve her adım "daha yüksek" benim dilim gider, daha kısa sürede daha iyi, daha sürdürülebilir, daha sağlam programlar yazıyorum. Bununla birlikte, biraz daha yavaş yürütme eğilimindedirler.