Con el precio de la luz por las nubes, tratar de ser más eficientes es un objetivo compartido en todo tipo de ámbitos. Estamos buscando planes B de todo tipo para minimizar dependencias y consumos extra. Y un área en el que también es posible plantear ese objetivo es el desarrollo software. ¿Cómo programar de forma más eficiente?
¿Qué lenguaje de programación gasta menos luz? Un estudio realizado por investigadores portugueses ya trataba de dar respuesta a esa pregunta en 2017. En su análisis —el código utilizado está disponible en GitHub— consideraron tanto el uso de memoria como la energía consumida en la ejecución de un conjunto de programas especial.
Midiendo el consumo. Ese conjunto de programas se llama Computer Language Benchmarks Game y es un proyecto de Software Libre que permite comparar cómo ciertos algoritmos se implementan en diversos lenguajes de programación. En ese proceso se analizan el tiempo de ejecución, el consumo de memoria o el uso de CPU.
27 lenguajes enfrentados. En el análisis se compararon distintos lenguajes de programación que pertenecen a distintos paradigmas: funcionales, imperativos, orientados a objetos y de scripting. Aquí había desde lenguajes clásicos como C o C++ a alternativas más modernas como Rust y también muy conocidas como Javascript, Perl, PHP o Python.

C, Rust y C++ ganan por separado. Al estudiar el consumo de energía, el tiempo de ejecución y la memoria consumida, los datos normalizados muestran como ganadores a C, Rust y C++. Entre los que peor se comportaron estuvieron Python, Perl, Ruby, Lua o PHP. Hay curiosidades también: lenguajes ya muy veteranos como Pascal o Fortran no consumen demasiado, pero llama la atención su bajo uso de memoria, probablemente porque fueron diseñados cuando ese recurso era especialmente limitado. En general los lenguajes compilados parecen ser más eficientes que los interpretados.

Hagamos parejas. Aunque esa era la clasificación general, los investigadores quisieron también dar opciones a quienes buscan resolver problemas combinados de eficiencia. Así, indicaron los mejores lenguajes para ahorrar tiempo de ejecución y memoria (C, Pascal y Go ganan), energía y tiempo (C, Rust y C++), energía y memoria (C y Pascal) o los tres objetivos, energía, tiempo y memoria (C, Pascal y Go destacan).
Un estudio imperfecto. El estudio ya provocó debate en redes sociales como Twitter, y en los comentarios en Hacker News varios desarrolladores indicaban que el código no era ideal para la comparación. Así, un usuario explicaba que ese código "no refleja cómo se comportan en la práctica lenguajes como Python", pero en realidad la cuestión no es esa.
La eficiencia no es la prioridad. Como explicaba otro usuario, si uno quiere ser realmente eficiente lo ideal sería programar en ensamblador. Aunque puede ser interesante saber qué lenguaje es más eficiente, es más importante aún tener claro que ciertos lenguajes de programación son perfectos para unas cosas, mientras que otros lo son para otras. De hecho en este ámbito lo que está claro es que los lenguajes de programación que más gustan no son los más populares —Rust es el que más de moda está, por ejemplo— ni los que dan más dinero.
Imagen | James Harrison
Ver 20 comentarios
20 comentarios
jlmartin
Lo que no tiene en cuenta el estudio, es el tiempo de "edicion" y compilacion, un programa en ensamblador puede ser ultra-eficiente pero si tardas el doble en escribirlo no se si "energeticamente" te es rentable, lo mismo con el compilado, si el programa es pesado son segundo/minutos que se van sumando.
Lo mas eficiente es lo que uno sepa, aprender un nuevo lenguaje te va a hacer perder una buena cantidad de tiempo y ademas por muy optimizado que este el lenguaje tu escaso conocimiento hara que sea mas ineficiente que tu lenguaje habitual.
Hoy en dia casi no importa, pero hubo un tiempo que tener un programa eficiente, dada las multiples limitaciones, era la unica manera de programar, hablo de la epoca de los 8-bits.
Tu podias hacer 4 cosas con el basic que venia "de fabrica" pero te dabas cuenta de que los juegos no se hacian con basic, porque como todos los lenguaje interpretados no era muy rapido.
Falk
El tiempo que tardes en desarrollarlo o en compilar esa más o menos despreciable si se tiene en cuenta q como mucho trabajarán en el código una decena de personas y lo pueden ejecutar miles o millones entiendo.
chandlerbing
En ese caso todos a Electron, que no requiere esfuerzo y se usaría muy poco la PC.
Toda la energía ahorrada en programar se desperdiciaría con su excesivo consumo de RAM y CPU.
El problema va en que el hardware cada vez pide mas energía (CPU y GPU), lo cual hace inexistente el avance de otros componentes cuyo consumo es muy bajo (RAM y SSD)
deidian
Hay como 2 millones de variables en esto: la primera desde 5 años atrás a hoy todos estos runtimes han cambiado. La segunda son los recursos de un runtime y conocerlo en profundidad si la necesidad de optimizar es tan grande. P.ej:
intento simple de árbol en C# con "struct":
struct Node
{
public Node Left;
public Node Right;
}
RESULTADO: no compila porque estás creando una recursión infinita. Las "struct" no pueden ser "null" y tienen que inicializar a un valor.
Entonces resuelves:
class Node
{
public Node Left;
public Node Right;
}
Y funciona y usas el GC: lo cual dependiendo de la situación puede no ser suficiente.
Pero también puedes:
unsafe struct Node
{
public Node* Left;
public Node* Right;
}
Y si compila: si cada "struct" contiene punteros a otras, esos si pueden ser "null" y por tanto ya no hay recursión infinita. Y no tienes consumo de recursos del GC para tu árbol.
Sin contar que comparar en un benchmark de creación de objetos intensiva los resultados de lenguajes con GC y sin es obvio: en los lenguajes con GC en un benchmark que crea 1 instancia rastreada por el GC para hacer "1+1" resulta en que te cuesta 200 veces más el uso del GC que el cálculo que haces por lo que tu benchmark es en realidad un benchmark de "GC overhead"
pumuki17599243
Lo de java no te lo crres ni de broma. En el momento que uses un hilo se va el rendimiento a la mierda
sr.lobo.
Nueva chorrada absurda e infantil, de importancia nula.
Al nivel de ponerse o no ponerse una corbata.
saelyth
Python no se usa por su eficiencia si no porque da un mayor valor de desarrollo a los programadores, y para las empresas. Algo que con C++ tardarías 1 mes en sacarlo, y con java tardarías 20 días en sacarlo, con python lo tienes en una semana. Al final si tienes que sacar cientos y cientos de proyectos adelante (que valen dinero), usar las herramientas de trabajo más eficientes es lo que hace que un desarrollador (o una empresa) destaque en ello. Es la diferencia para la empresa entre ganar 4.000 euros al mes, o ganar 30.000 euros al mes.
Las únicas excepciones a esta regla son los mercados niche donde es casi obligatorio utilizar tecnología que ofrezcan otras prestaciones. Por ejemplo para el analisis en tiempo real de los coches Tesla, no usaría python, ya que el tiempo de ejecución y de analisis que necesita el vehículo debe ser lo más reducido posible. ¿Para videojuegos? Tampoco usaría python, ya que nos interesa tener cuantos más FPS posible, si no la experiencia del usuario final se resiente.
Pero para un programa o script que te transforme un archivo en otro tipo de archivo, o un programa con una interfaz sencilla para consultar el tiempo, un ERP, las ETL, modelos de machine learning, exploradores de API, parseadores de o365 o algo que no dependa de nanosegundos, obviamente python destaca.