C'è un problema generale con questa domanda in quanto è troppo assoluto. Non ha davvero senso dire "la lingua X è più veloce della lingua Y". Un linguaggio informatico in sé non è "veloce" o "lento" perché è semplicemente un modo di esprimere un algoritmo. La vera domanda 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 problematico?"
Alcune differenze di velocità cadranno sicuramente dalla lingua stessa poiché alcune lingue sono più facili da implementare in determinati domini rispetto ad altre. Ma molto di ciò che rende veloce un'implementazione non è la lingua. Ad esempio, non puoi davvero dire "Python è più lento di Java" senza considerare se stai parlando di CPython, IronPython o PyPy. Ciò è particolarmente vero per le lingue che utilizzano una macchina virtuale poiché la velocità sarà direttamente influenzata dalla qualità della macchina virtuale.
A parte questo, lavoro con un sistema che per vari motivi non può usare JIT sul nostro dispositivo con una VM JavaScript molto popolare che normalmente lo supporta. Ciò significa che il nostro JavaScript funziona molto, molto più lentamente rispetto a un PC con un processore simile. Quella modifica, che non è direttamente correlata al linguaggio stesso, porta JavaScript da "alcune volte più lento del C ++" a "ordini di grandezza più lenti del C ++" per i compiti che ci interessano.
Si consideri inoltre che le lingue differiscono per caratteristiche prestazionali in modi che non sono direttamente comparabili. Troppi benchmark traducono semplicemente un programma dalla lingua A alla lingua B e non tengono conto del fatto che le lingue differiscono in quali funzioni sono veloci. (Puoi vederlo in qualsiasi confronto comparativo ragionevole come quelli a cui ti colleghi in quanto spesso hanno note come "grazie a così e così per avermi mostrato come implementarlo nel 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 vedrà immediatamente che in C ++ questo non è il modo più veloce per fare qualcosa. Puoi velocizzare facilmente le cose cambiandole per renderle più appropriate al C ++:
for(int i=0;i<10;i++) {
Object o;
doSomething(&o);
}
Il punto non è che il 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 una determinata attività. Ad esempio, posso scrivere una versione di Towers of Hanoi in C ++ che funzionerà più velocemente di Java su qualsiasi compilatore ragionevole. Posso farlo essenzialmente barando, usando modelli C ++, valutati in fase di 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 all'istante mentre la versione Java funzionava per minuti (e sperando che nessuno notasse che il mio programma ha impiegato mezz'ora per essere costruito). Il punto è che per questo varia caso stretto, C ++ è più veloce. Per altri casi ristretti potrebbe essere il contrario. Quindi non è "C ++ è più veloce", è "C ++ è più veloce nei casi in cui è possibile valutare l'espressione in fase di 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 di domande come se la lingua sia tipizzata staticamente o meno. E, naturalmente, le buone implementazioni saranno più veloci di quelle cattive.
E non dimenticare che i buoni programmatori produrranno un codice più veloce rispetto ai cattivi programmatori, spesso in una misura che supera abbastanza le differenze linguistiche.