domingo, 10 de agosto de 2008

Esos pequeños lenguajes...

Hay veces en los que esos lenguajes de programación tan poco conocidos te sorprenden y te preguntas por qué no es popular. Squirrel es un lenguaje de script, sí posiblemente otro más del montón, pero es orientado a objetos y tiene una sintaxis parecida a la de C/C++/Java/etc... He hecho un estudio personal sobre 3 lenguajes de scripts: Python, Lua y Squirrel.
Python pretende ser un lenguaje de propósito general para RAD y como lenguaje pegamento. Muy fácil de usar, la verdad y viene con una extensa biblioteca estándard.
Lua pretende también ser lenguaje de propósito general y también como lenguaje pegamento, aunque sin soporte "nativo" de objetos y la sintaxis algo más limitada. Sin embargo se integra de manera más simple con la aplicación que Python. Tiene el mismo soporte de módulos que de Python, aunque no tan completo.
Y por último Squirrel. Este lenguaje pretende nada más que ser usado para empotrar, nada más que eso. Relativamente es fácil de aprender debido a su sintaxis, parecida a la de C/C++ y demás.
Muestro pruebas de rendimiento de cada respectivo intérprete de estos lenguajes. En el caso de Squirrel sería cómo de rápida es la ejecución de su biblioteca. Las pruebas se han hecho en un AMD Athlon de 64 bits a 2 GHz, corriendo código de 32 bits. Muestro el código de las pruebas, que consiste en mostrar cada ciclo por segundo que hace en un bucle "mientras" infinito. También se muestra la memoria que ocupa el intérprete cuando anda en ejecución.

-Python:

import time

def main():
tiempo = time.time
antes = despues = tiempo()
marcos = 0
while(1):
if (despues - antes) > 1.0:
print "Marcos/s: ", marcos
marcos = 0
antes = despues
else:
marcos += 1
despues = tiempo()

if __name__ == "__main__": main()


Nota: Python en verdad no requiere de una función principal para ejecutar código. Esto se hace por convenio.

Memoria: 2.3 MB. Ciclos/s: ~1300000

-Lua:

marcos = 0;
tiempo = os.time;
formatear = string;
antes = tiempo();
despues = antes;
while(1) do
if despues ~= antes then
print(formatear("Marcos/s: %d", marcos));
marcos = 0;
antes = despues;
else
marcos = marcos + 1;
despues = tiempo();
end
end

Memoria: 0.8 MB. Ciclos/s: ~1550000

-Squirrel:

local antes = 0, despues = 0, marcos = 0;
antes = despues = time();
while(1){
if(despues != antes){
print(format("\nMarcos/s: %d", marcos));
marcos = 0;
antes = despues;
}
else{
marcos++;
despues = time();
}
}

Memoria: 1.1 MB. Ciclos/s: ~1870000

Vamos, yo me quedo flipando con Squirrel ante su buen equilibrio de rendimiento y uso de memoria. Para colmo orientado a objetos y con una sintaxis parecida a la de C (no implica esto que sea fácil de aprender, solamente es familiar). Por contra, tan solo sirve para empotrar, nada más que para eso. No tiene soporte de módulos como Python y Lua.
Su autor tiene pensado en un futuro hacer de Squirrel de propósito de general con soporte de módulos llamado "Fat Squirrel". Espero que se haga realidad manteniendo ese buen rendimiento con buen uso de memoria.

P.D.: Lo siento por la desorganización del código.

No hay comentarios: