Bu sorunun genel bir sorunu var, çünkü çok mutlak. "X dili Y dilinden daha hızlıdır" demek pek mantıklı değildir. Bir bilgisayar dilinin kendisi "hızlı" veya "yavaş" değildir, çünkü sadece bir algoritmayı ifade etmenin bir yoludur. Asıl soru, "X dilinin X1 uygulaması neden bu özel sorun alanı için Y dilinin Y1 uygulamasından daha hızlı?"
Bazı hız farklılıkları, belirli alanların uygulanması diğer alanlara göre daha kolay olduğundan, dilin kendisinden ayrılacaktır. Ancak uygulamayı hızlı kılan şeylerin çoğu dil değildir. Örneğin, CPython, IronPython veya PyPy hakkında konuşup konuşmayacağınızı düşünmeden gerçekten "Python Java'dan daha yavaştır" diyemezsiniz. Bu, özellikle VM'nin kalitesinden doğrudan etkileneceği için VM kullanan diller için geçerlidir.
Bir yana, çeşitli nedenlerden ötürü cihazımızda JIT'i normalde destekleyen çok popüler bir JavaScript VM ile kullanamayan bir sistemle çalışıyorum. Bu, JavaScript'imizin benzer bir işlemciye sahip bir bilgisayarda olduğundan çok daha yavaş çalıştığı anlamına gelir. Doğrudan dilin kendisi ile ilgili olmayan bu değişiklik, JavaScript'in "C ++ 'dan birkaç kat daha yavaş" olmasını, önem verdiğimiz görevler için "C ++' dan daha yavaş büyüklük sıraları" olmasını sağlar.
Ayrıca, dillerin performans özelliklerinde doğrudan karşılaştırılamayacak şekillerde farklılık gösterdiğini düşünün. Çok fazla ölçüt, bir programı yalnızca A dilinden B diline çevirir ve hangi özelliklerin hızlı olduğu konusunda dillerin farklı olduğunu dikkate almaz. (Bunu, Foo dilinde nasıl uygulayacağımı gösterdiğiniz için "teşekkürler" gibi sık sık not aldıkları gibi bağlantı kurduğunuz gibi makul bir karşılaştırma karşılaştırmasında görebilirsiniz.)
Örneğin, şu Java kodunu alın:
for(int i=0;i<10;i++) {
Object o = new Object;
doSomething(o);
}
Bunu C ++ ile "yeniden yazmak" ve çalışma sürelerini karşılaştırmak cazip olurdu:
for(int i=0;i<10;i++) {
Object *o = new Object;
doSomething(o);
delete(o);
}
Mesele şu ki, herhangi bir yetkili C ++ programcısı hemen C ++ 'da bunun bir şey yapmanın en hızlı yolu olmadığını görecektir. İşleri C ++ için daha uygun olacak şekilde değiştirerek kolayca hızlandırabilirsiniz:
for(int i=0;i<10;i++) {
Object o;
doSomething(&o);
}
Mesele, C ++ 'ın hızlı olabileceği değil, dilleri karşılaştırmak için kıstaslar yazmaktan çok, gerçekten zor. Uygun şekilde yapmak için her iki dilde de uzman olmanız ve her iki dilde de sıfırdan yazmanız gerekir. O zaman bile, bir dilin belirli bir görevde üstün olduğu alanlara kolayca girebilirsiniz. Örneğin, herhangi bir makul derleyicide Java'dan daha hızlı çalışacak C ++ 'ta Hanoi Towers'ın bir sürümünü yazabilirim. Bunu derleme zamanında değerlendirilen C ++ şablonlarını kullanarak hile yaparak yapabilirim (http://forums.devshed.com/c-programming-42/c-towers-of-hanoi-using-templates-424148.html)
Buradaki nokta, "C ++ Java'dan daha hızlı" diyemediğim için, programımın Java sürümü dakikalar boyunca çalışırken anında geri döndü (ve hiç kimse programımın yarım saat sürdüğünü fark etmesini umuyordu.) dar durumda değişir, C ++ daha hızlıdır. Diğer dar durumlar için bunun tersi olabilir. Yani "C ++ daha hızlıdır" değil, "C ++ şablonları kullanarak ifadeyi oluşturma zamanında değerlendirebileceğiniz durumlarda daha hızlıdır." Daha az tatmin edici, ama gerçek.
Dillerdeki hız farklılıkları çoğunlukla uygulama ile ilgilidir. Derlenen diller yorumlanan dillerden daha hızlı olacaktır. Yerel koda derleme, bayt koda derlemekten daha hızlı olacaktır. Bunun, dilin statik olarak yazılıp yazılmamasından daha fazla etkisi olacaktır. Ve elbette, iyi uygulamalar kötü olanlardan daha hızlı olacaktır.
Ve unutmayın ki iyi programcılar kötü programcılardan daha hızlı kod üreteceklerdir, çoğu zaman dil farklılıklarından oldukça ağır basar.