¿Por qué algunos lenguajes de programación son más rápidos que otros?

La velocidad de ejecución del programa (rendimiento del software) en función de la elección del lenguaje de programación está relacionada con una serie de factores:

  • instrucciones de máquina ejecutadas por declaración de idioma.
  • Eficiencia de implementación del compilador o intérprete.
  • sobrecarga de tiempo de ejecución de idioma, según lo requiera una definición de idioma o una implementación de idioma en particular.
  • hasta cierto punto, arquitectura de conjunto de instrucciones de CPU (algunos ISA son más adecuados para algunos idiomas que otros; algunos están optimizados aún más, por ejemplo, máquinas Lisp).

Las abstracciones y la ocultación de información pueden ser virtudes tal como se enseñan en los cursos universitarios de informática, pero tienen un inconveniente: a menos que comprenda lo que está sucediendo debajo de la abstracción, corre el riesgo de escribir software que parece sencillo y simple pero que funciona atrozmente .

Es por eso que la selección del lenguaje de programación es un paso inicial importante en toda la ingeniería de software.

Esta respuesta podría ser muy larga, pero aquí hay una versión corta que describe algunos factores importantes:

Algunos idiomas se interpretan , lo que significa que todas sus declaraciones se leen y analizan en tiempo de ejecución. Esto hace que su código se ejecute más lentamente, pero los idiomas interpretados tienen una serie de ventajas cuando no necesariamente necesita esa velocidad bruta, incluida la portabilidad, la legibilidad del código, la depuración fácil y otros. Ejemplos de lenguajes interpretados comunes incluyen Perl, Python, PHP y JavaScript.

Se compilan otros idiomas, lo que significa que su código se traduce en algo más cercano a lo que la máquina puede ejecutar directamente, haciendo que su código se ejecute significativamente más rápido, especialmente si el compilador está escrito para hacer optimizaciones. El código de “objeto” resultante es hardware (CPU ISA) y depende del sistema operativo. C y C ++ son buenos ejemplos de lenguajes compilados.

Sin embargo, otros idiomas se encuentran en el medio. Java precompila su código en un bytecode independiente de la plataforma que luego es interpretado por una máquina virtual. Esto significa que su código se ejecuta rápidamente, pero hay una gran sobrecarga para iniciar su código si la máquina virtual no se está ejecutando.

También es posible en algunos casos compilar código de idiomas interpretados tradicionalmente o interpretar código de idiomas compilados tradicionalmente. En estos casos, puede estar restringido en las operaciones que tiene permitido realizar dentro del idioma.

Además de compilado frente a interpretado, también hay lenguajes de alto y bajo nivel (y todo lo demás).

  • Como regla general, los lenguajes de nivel superior usan más abstracciones, lo que permite una mayor legibilidad humana de su código, pero generalmente una ejecución más lenta de la máquina.
  • El uso de idiomas de nivel inferior le permite controlar mejor cómo se almacenan sus datos en la memoria y cómo se ejecuta su código, lo que significa que (si es bueno para optimizar su código para la ejecución de la máquina en su sistema operativo y hardware en particular) puede escribir en una forma de lograr la misma tarea más rápido. El mayor inconveniente es que la legibilidad humana de su trabajo se ve afectada y pierde la portabilidad conveniente / eficiente a otras plataformas.

Un enfoque común para equilibrar los beneficios es escribir bucles intensivos en procesador (p. Ej., FFT, compresores de datos, renderizado 3D, etc.) en un lenguaje de bajo nivel y resumirlos como una llamada de función o algún otro tipo de biblioteca o paquete , y luego use un lenguaje de nivel superior para escribir el resto de la interfaz para facilitar la lectura.