Hace tiempo hice algo parecido con los lenguajes de programación que entonces conocía, probando aquellos que eran de scripting, compilados y probando sobretodo, lo que tardan en levantar y hacer una operación tan simple como enumerar 100.000 números sacando por pantalla el número con un elevado a 2 de la posición en el que sale la impresión. Por ejemplo:
Hola 1
Hola 4
Hola 9
Hola 16
...
He realizado las pruebas en los lenguajes: C, Perl, Ruby, Python, PHP, Lua, Shell script, Erlang script y Java.
C
En lenguaje C se ha realizado el siguiente código:
#include <stdio.h>
main() {
int i;
for (i=0; i<0100000; i++) {
printf("Hola %d\n", i*i);
}
}
Perl
En el lenguaje Perl, se ha implementado el código siguiente:
#!/usr/bin/perl
for ($i=0; $i<100000; $i++) {
print "Hola " . ($i*$i) . "\n";
}
Ruby
En Ruby, el código escrito ha sido:
#!/usr/bin/ruby
(1..100000).each do |i|
puts "hola " + (i*i).to_s
end
Python
En Python, el código ha sido:
#!/usr/bin/python
for i in range(1, 1000000):
print "Hola " + str(i*i)
PHP
En PHP el código escrito ha sido:
#!/usr/bin/php -q
<?php
for ($i=0; $i<100000; $i++) {
print "Hola " . ($i*$i) . "\n";
}
Lua
El código de Lua escrito ha sido:
#!/usr/bin/lua
for i=1,100000 do
print("Hola " .. (i*i))
end
Shell script
En shell script (en bash) se ha implementado lo siguiente:
#!/bin/bash
for i in $(seq 1 100000); do
let RESULT=$i*$i
echo "Hola $RESULT"
done
Erlang (Script)
Erlang también puede emplearse como lenguaje de scripting usando el intérprete escript. El código escrito para este intérprete ha sido:
#!/usr/bin/escript
main(_Args) ->
loop(100000).
loop() -> ;
loop(I) ->
io:format("Hola ~p~n", [I*I]),
loop(I-1).
Java
El código que se ha usado para la prueba de Java ha sido:
public class loop {
public static void main(final String[] args) {
for (int i=0; i<100000; i++) {
System.out.println("Hola " + (i*i));
}
}
}
Resultado de las pruebas
Tras ejecutar 5 veces cada script, controlando el tiempo que toma cada uno hemos obtenido, según el equipo en el que se ha ejecutado. El equipo 1 es un Intel vPro con Debian GNU/Linux Lenny:
Lenguaje | 1 | 2 | 3 | 4 | 5 | Media |
---|---|---|---|---|---|---|
C (4.1.3) | 0,02 | 0,02 | 0,02 | 0,02 | 0,02 | 0,02 |
Perl (5.10.0) | 0,04 | 0,03 | 0,03 | 0,03 | 0,03 | 0,03 |
Ruby (1.8.7-p72) | 0,16 | 0,15 | 0,16 | 0,16 | 0,15 | 0,16 |
Lua (5.1.3) | 0,21 | 0,22 | 0,21 | 0,21 | 0,21 | 0,21 |
PHP (5.3.1) | 0,41 | 0,47 | 0,43 | 0,33 | 0,29 | 0,38 |
Python (2.6.5) | 1,13 | 1,11 | 1,15 | 1,16 | 1,14 | 1,13 |
Java (1.6.0_20-b02) | 1,37 | 1,39 | 1,40 | 1,36 | 1,34 | 1,37 |
Erlang (R13B04) | 3,65 | 3,62 | 3,65 | 3,65 | 3,56 | 3,62 |
Bash (3.2.39) | 7,27 | 7,26 | 7,46 | 7,40 | 7,25 | 7,32 |
En el equipo 2, un Apple iBook G4 (PowerPC):
Lenguaje | 1 | 2 | 3 | 4 | 5 | Media |
---|---|---|---|---|---|---|
C (4.0.1) | 0,22 | 0,34 | 0,55 | 0,32 | 0,35 | 0,35 |
Perl (5.8.9) | 0,67 | 0,83 | 0,68 | 0,68 | 0,78 | 0,72 |
Ruby (1.8.6-p386) | 2,91 | 3,21 | 3,20 | 3,13 | 3,52 | 3,19 |
Lua (5.1.4) | 1,51 | 1,64 | 1,64 | 1,65 | 2,43 | 1,77 |
PHP (5.2.14) | 2,51 | 2,48 | 2,55 | 2,37 | 2,77 | 2,53 |
Python (2.5.1) | 17,49 | 16,91 | 17,41 | 17,40 | 16,92 | 17,22 |
Java (1.5.0_26-156) | 7,60 | 5,92 | 5,72 | 5,90 | 6,02 | 6,23 |
Erlang (R14A, 5.8) | 22,10 | 23,13 | 22,76 | 21,94 | 21,80 | 22,34 |
Bash (4.1.9) | 135,19 | 223,56 | 181,40 | 136,19 | 133,46 | 161,96 |
Ordenados por velocidad, se ve que el lenguaje C, como cabía esperar, es el más rápido, seguido de Perl, como el lenguaje de scripting más rápido.