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

24 octubre, 2011

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:

– The Computer Language Benchmarks Game (Linux) y su implementación en un entorno Win32

– An empirical comparison of C, C++, Java, Perl, Python, Rexx, and Tcl (2000)

– Loop Recognition in C++/Java/Go/Scala (2011)

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«…

(Visited 487 times, 1 visits today)
Autor / Autora
Robert Clarisó Viladrosa
Comentarios
Miguel Angel Bueno27 octubre, 2011 a las 10:16 pm

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.

Responder
    robert29 octubre, 2011 a las 8:13 am

    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.

    Responder
Andrés Royuela Antonio16 agosto, 2018 a las 7:54 pm

gracias por vuestro tiempo y experiencia.He creado varias aplicaciones en File Maker pero al llegar a cierta complejidad es lento.., cual sería el lenguaje más afin para adaptar mis programas?

Responder
Deja un comentario