¿El lenguaje de programación más eficiente?

La razón nos dice que no existe un lenguaje de programación mejor que los demás, sino que hay que escoger el lenguaje más apropiado para cada tarea (“use the right tool for the job”). Sin embargo, las preferencias en lenguajes de programación tienen algo de emocional, casi de fervor religioso. Preguntarle a cualquier informátic@ cuál es su lenguaje favorito es un buena pregunta para romper el hielo…

Empezamos una serie de artículos revisando los lenguajes de programación según diferentes criterios. Empezamos preguntándonos: ¿cuál es el lenguaje de programación más eficiente?

El tiempo de ejecución y los recursos consumidos por un programa (memoria, acceso a la red, …) dependen por encima de todo del algoritmo utilizado. Puede haber varios órdenes de magnitud de diferencia entre un algoritmo y otro, por ejemplo, pasando de un tiempo de ejecución de segundos a otro de años. Por ejemplo, aquí podéis encontrar una comparativa entre diferentes programas para resolver Sudokus, con tiempos de ejecución que pasan de 0.25 segundos a 7 horas.

Por otro lado el mismo algoritmo puede comportarse de forma muy diferente dependiendo del lenguaje de programación utilizado para su implementación. Por ejemplo, un artículo reciente de un ingeniero de Google mostraba variaciones de 12x en los tiempos de ejecución de un algoritmo concreto en función del lenguaje utilizado.

La comparación entre diferentes lenguajes puede ser un tema bastante más complejo de lo que parecería a simple vista:

  • La eficiencia del lenguaje puede depender de parámetros cómo cuál es la plataforma sobre la que se ejecuta, la versión de las librerías,  la versión del compilador/intérprete/máquina virtual y los parámetros de optimización que sele suministran.
  • Dado que depende del compilador/intérprete/máquina virtual, la eficiencia de un lenguaje puede evolucionar con el tiempo. Por ejemplo, los motores de ejecución de Javascript se han vuelto mucho más eficientes con el tiempo( aquí podéis encontrar la comparativa actual).
  • En algunos casos, puede ser necesario reescribir parte del algoritmo para utilizar eficientemente las posibilidades del lenguaje en concreto. Sin embargo, esto también hace que la comparación sea injusta en cierto sentido.
  • Un lenguaje puede ser muy eficiente para un tipo de problemas en concreto y ser muy ineficiente para otros. Por ejemplo, Perl está pensado para el tratamiento de cadenas de caracteres y Fortran para el cálculo matemático.

Dicho esto, enlazamos a continuación con algunas comparativas (benchmark) para comparar el rendimiento de los lenguajes de programación:

Los resultados muestran las tendencias esperables: C y C++ destacan respecto al resto de lenguajes, con Fortran liderando los programas de cálculo numérico. Sin embargo, hay algunas sorpresas, como algunos programas donde Haskell o Javascript son más rápidos que C. Así pues, hay tantos factores a considerar (el tipo de problema, la plataforma, …) que no es posible identificar a un lenguaje como el claro ganador.

Así pues, ante la pregunta inicial “¿Cuál es el lenguaje de programación más eficiente?” la respuesta tendrá que ser un ingenieril “Depende“…

2 Comments

  1. Hola.

    Soy desarrollador de software de gestión desde hace más de 20 años, y en ese tiempo he desarrollado en BASIC, en C/C++, en COBOL, en Pascal, en PHP, en C#, en Java, en Assembler (x86), en JavaScript, en Visual BASIC … Al final me llevo la impresión de que en todos se puede hacer de todo, si se es suficientemente hábil y se sabe dónde está el manual de la librería de turno.

    En cuanto al rendimiento, evidentemente que hay diferencias entre lenguajes y plataformas, pero éstas sólo tienen sentido si el programa se va a ejecutar siempre en máquinas similares.

    Sin embargo, mi empresa tiene 14.000 clientes, cada uno con máquinas de distintas características, y eso hace que medir el rendimiento de los algoritmos sea, por decirlo de alguna manera, poco útil. Esto es debido a que el rendimiento pasa a menudo a depender más de la combinación hardware/sistema operativo/”otras aplicaciones en ejecución” que de lo bien que se lo curre el compilador.

    Hacer tests de rendimiento está bien, es “muy ingenieril”, didáctico y hasta divertido. Pero su aplicación en el mundo real tiene muchos “dependes” de los que depende, valga la redundancia.

    Depende del lenguaje y de la plataforma. También depende del conocimiento que el programador tenga de los recursos que le ofrece el lenguaje y la plataforma. Pero también, ineludiblemente, del entorno en el que se vaya a ejecutar ese algoritmo.

    Saludos.

    Reply
    • Gracias por aportar tu experiencia, Miguel Ángel.

      Como muy bien dices, la experiencia del programador impacta mucho a la eficiencia de un programa. De hecho, en uno de los artículos enlazados también afirman que la habilidad del programador es un factor tan crítico o más que el lenguaje utilizado.

      Ciertamente hay muchos “dependes” en el mundo de la eficiencia. Si la aplicación se ejecuta en plataformas tan diversas como en el escenario que planteas, seguramente el rendimiento pasa a un segundo plano. Aunque otr@s compañer@s que trabajen en aplicaciones basadas en un servidor central tendrán que fijarse más en el rendimiento y la escalabilidad. No sería la primera vez que una aplicación tiene que reprogramarse en otro lenguaje por cuestiones de eficiencia. Por ejemplo, Twitter tuvo que pasar de Ruby a Scala por este motivo.

      Un saludo.

      Reply

Trackbacks/Pingbacks

  1. ¿El lenguaje de programación más popular? | iNFoRMáTiCa++ - [...] con nuestro repaso a los lenguajes de programación, iniciado en otra entrada. En este caso, en vez de centrarnos…
  2. ¿El lenguaje de programación más expresivo? | iNFoRMáTiCa++ - [...] nuestro repaso al mundo de los lenguajes de programación. Si antes nos fijamos en la eficiencia y la popularidad…
  3. ¿El lenguaje de programación más antiguo? | iNFoRMáTiCa++ - [...] de repasar la eficiencia, popularidad y expresividad de los lenguajes de programación, desempolvamos los libros de historia [...]

Comentar

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Leer entrada anterior
“Infraestructuras a la carta” en la nube

Receta para un Virtual Cloud MegaCluster Ingredientes : 3809 máquinas virtuales con 8 núcleos y 7 gigas de memoria cada...

Cerrar