C'è un problema generale con questa domanda in quanto è troppo assoluto. Non ha molto senso dire "la lingua X è più veloce della lingua Y". Un linguaggio informatico di per sé non è "veloce" o "lento" perché è semplicemente un modo di esprimere un algoritmo. La domanda effettiva dovrebbe essere qualcosa nell'ordine di "perché l'implementazione X1 della lingua X è più veloce dell'implementazione Y1 della lingua Y per questo particolare dominio del problema?"
Alcune differenze di velocità stanno sicuramente andando fuori dal linguaggio in quanto alcune lingue sono più facili da implementare in determinati domini rispetto ad altre. Ma molto di ciò che rende un'implementazione veloce non è la lingua. Ad esempio, non si può veramente dire "Python è più lento di Java" senza considerare se si sta parlando di CPython, IronPython o PyPy. Ciò è particolarmente vero per le lingue che utilizzano una VM poiché la velocità sarà influenzata direttamente dalla qualità della VM.
Per inciso, lavoro con un sistema che per vari motivi non può utilizzare JIT sul nostro dispositivo con una VM JavaScript molto popolare che normalmente la supporta. Ciò significa che il nostro JavaScript funziona molto più lentamente di quanto farebbe su un PC con un processore simile. Quel cambiamento, che non è direttamente correlato al linguaggio stesso, porta JavaScript ad essere "poche volte più lento del C ++" ad essere "ordini di grandezza più lenti del C ++" per le attività che ci interessano.
Considerare anche che le lingue differiscono nelle caratteristiche delle prestazioni in modi che non sono direttamente confrontabili. Troppi parametri di riferimento convertono semplicemente un programma dalla lingua A alla lingua B e non tengono conto del fatto che le lingue differiscono per quanto riguarda le caratteristiche rapide. (Puoi vedere questo in qualsiasi ragionevole confronto comparativo come quelli a cui ti colleghi perché spesso hanno note come "grazie a Tizio per avermi mostrato come implementarlo in linguaggio Foo.)
Ad esempio, prendi questo codice Java:
for(int i=0;i<10;i++) {
Object o = new Object;
doSomething(o);
}
Sarebbe tentato di "riscrivere" questo in C ++ e confrontare i tempi di esecuzione:
for(int i=0;i<10;i++) {
Object *o = new Object;
doSomething(o);
delete(o);
}
Il fatto è che qualsiasi programmatore C ++ competente lo vedrà immediatamente in C ++, questo non è il modo più veloce per fare qualcosa. Puoi facilmente velocizzare le cose cambiandole per essere più appropriate al C ++:
for(int i=0;i<10;i++) {
Object o;
doSomething(&o);
}
Il punto non è che C ++ può essere veloce, ma piuttosto che scrivere benchmark per confrontare le lingue è davvero, davvero difficile. Per farlo in modo appropriato, devi essere un esperto in entrambe le lingue e scrivere da zero in entrambe le lingue. Anche allora, puoi facilmente imbatterti in aree in cui una lingua eccelle in un particolare compito. Ad esempio, posso scrivere una versione di Towers of Hanoi in C ++ che verrà eseguita più velocemente di Java su qualsiasi compilatore ragionevole. Posso farlo essenzialmente imbrogli, usando i modelli C ++, valutati al momento della compilazione (http://forums.devshed.com/c-programming-42/c-towers-of-hanoi-using-templates-424148.html)
Il punto non è che potrei dire che "C ++ è più veloce di Java" perché il mio programma è tornato istantaneamente mentre la versione di Java funzionava per minuti (e spero che nessuno abbia notato che il mio programma ha impiegato mezz'ora per costruire.) Il punto è che per questo caso molto ristretto, il C ++ è più veloce. Per altri casi stretti potrebbe essere il contrario. Quindi non è "C ++ è più veloce", è "C ++ è più veloce nei casi in cui è possibile valutare l'espressione al momento della compilazione utilizzando i modelli." Meno soddisfacente, ma vero.
Le differenze di velocità nelle lingue riguardano principalmente l'implementazione. Le lingue compilate saranno più veloci delle lingue interpretate. La compilazione in codice nativo sarà più veloce della compilazione in codice byte. Ciò avrà molto più effetto delle domande come se il linguaggio sia tipizzato staticamente o meno. E, naturalmente, le buone implementazioni saranno più veloci di quelle cattive.
E non dimenticare che i bravi programmatori produrranno un codice più veloce rispetto ai programmatori malintenzionati, spesso in una misura che supera di gran lunga le differenze linguistiche.