Hay un problema general con esta pregunta porque es demasiado absoluta. Realmente no tiene sentido decir "el lenguaje X es más rápido que el lenguaje Y". Un lenguaje de computadora en sí mismo no es "rápido" o "lento" porque es simplemente una forma de expresar un algoritmo. La pregunta real debería ser algo del orden de "¿por qué la implementación X1 del lenguaje X es más rápida que la implementación Y1 del lenguaje Y para este dominio problemático en particular?"
Ciertamente, algunas diferencias de velocidad caerán del lenguaje en sí ya que ciertos idiomas son más fáciles de implementar ciertos dominios que otros. Pero gran parte de lo que hace que una implementación sea rápida no es el lenguaje. Por ejemplo, no se puede decir "Python es más lento que Java" sin considerar si se trata de CPython, IronPython o PyPy. Esto es particularmente cierto para los lenguajes que usan una VM, ya que la velocidad se verá directamente afectada por la calidad de la VM.
Por otro lado, trabajo con un sistema que por varias razones no puede usar JIT en nuestro dispositivo con una máquina virtual JavaScript muy popular que normalmente lo admite. Esto significa que nuestro JavaScript funciona mucho, mucho más lento que en una PC con un procesador similar. Ese cambio, que no está directamente relacionado con el lenguaje en sí, lleva a JavaScript de ser "unas veces más lento que C ++" a ser "órdenes de magnitud más lentos que C ++" para las tareas que nos interesan.
También tenga en cuenta que los idiomas difieren en las características de rendimiento en formas que no son directamente comparables. Demasiados puntos de referencia simplemente traducen un programa del idioma A al idioma B y no tienen en cuenta que los idiomas difieren en qué funciones son rápidas. (Puede ver esto en cualquier comparación de referencia razonable, como las que vincula, ya que a menudo tienen notas como "gracias a tal y tal por mostrarme cómo implementarlo en lenguaje Foo").
Por ejemplo, tome este código Java:
for(int i=0;i<10;i++) {
Object o = new Object;
doSomething(o);
}
Sería tentador "reescribir" esto en C ++ y comparar los tiempos de ejecución:
for(int i=0;i<10;i++) {
Object *o = new Object;
doSomething(o);
delete(o);
}
La cuestión es que cualquier programador competente de C ++ verá de inmediato que en C ++, esta no es la forma más rápida de hacer algo. Puede acelerar las cosas fácilmente cambiándolo para que sea más apropiado para C ++:
for(int i=0;i<10;i++) {
Object o;
doSomething(&o);
}
El punto no es que C ++ pueda ser rápido, sino que escribir puntos de referencia para comparar lenguajes es realmente difícil. Para hacerlo adecuadamente, debes ser un experto en ambos idiomas y escribir desde cero en ambos idiomas. Incluso entonces, puede encontrar fácilmente áreas donde un idioma sobresale en una tarea en particular. Por ejemplo, puedo escribir una versión de Towers of Hanoi en C ++ que se ejecutará más rápido que Java en cualquier compilador razonable. Puedo hacer eso esencialmente haciendo trampa, usando plantillas de C ++, evaluadas en tiempo de compilación (http://forums.devshed.com/c-programming-42/c-towers-of-hanoi-using-templates-424148.html)
El punto no es que podría decir que "C ++ es más rápido que Java" porque mi programa regresó instantáneamente mientras la versión de Java se ejecutó durante minutos (y esperando que nadie se diera cuenta de que mi programa tardó media hora en construirse). El punto es que para esto varía caso estrecho, C ++ es más rápido. Para otros casos estrechos, podría ser al revés. Por lo tanto, no es "C ++ es más rápido", es "C ++ es más rápido en los casos en que puede evaluar la expresión en el momento de la compilación utilizando plantillas". Menos satisfactorio, pero cierto.
Las diferencias de velocidad en los idiomas se refieren principalmente a la implementación. Los idiomas compilados serán más rápidos que los idiomas interpretados. Compilar en código nativo será más rápido que compilar en código de bytes. Esto tendrá mucho más efecto que preguntas como si el idioma está estáticamente escrito o no. Y, por supuesto, las implementaciones buenas serán más rápidas que las malas.
Y no olvide que los buenos programadores producirán un código más rápido que los malos programadores, a menudo en una medida que supera con creces las diferencias de idioma.