Actualización 11/12/2008: Antonio ha realizado una rectificación y los resultados cambian sensiblemente.
Antonio Cangiano publicó ayer una nueva entrega de su famoso Great Ruby Shootout. En pocas palabras, se trata de una comparativa de rendimiento de las diferentes implementaciones de Ruby existentes, basándose en la Ruby Benchmark Suite.
JRuby y Ruby 1.9.1, los vencedores
Los resultados de esta edición encumbran a JRuby como la mejor implementación de Ruby 1.8, con una proporción de 3.62 a 1 en velocidad de ejecución respecto al intérprete oficial (conocido como MRI, acrónimo de Matz's Ruby Intepreter).
Sin embargo, es el intérprete de la versión 1.9 (basado en YARV) el que ofrece mejores resultados en general, siendo casi cinco veces más rápido que Ruby 1.8 MRI. A este respecto, Charles Oliver Nutter (uno de los autores de JRuby) comentó cuando se finalize el soporte para la versión 1.9 en JRuby las diferencias deberían reducirse de forma sensible.
Importante mejora respecto al año anterior
A tenor de los resultados, podría decirse que tanto Ruby 1.9 como JRuby han experimentado una importante mejora en términos de rendimiento. Sin embargo, hay un factor importante que, en cierto modo, invalida esta comparación: la suite utilizada en las pruebas es diferente (aunque muchas de sus pruebas conserven el nombre).
|
Ruby 1.9 |
JRuby |
Rubinius |
| 2007 |
3.32 |
1.32 |
0.73 |
| 2008 |
4.90 |
3.62 |
1.03 |
Ruby Enterprise Edition, una agradable sorpresa
Una de las sorpresas más agradables en esta edición la protagoniza Ruby Enterprise Edition. Simplificando, se trata de una modificación del intérprete oficial que usa menos memoria. Según sus autores, combinado con Passenger, reduce hasta en un 33% el uso de memoria de una aplicación Rails.
La sorpresa es que en términos de velocidad también parece superar de forma importante al intérprete oficial, con una proporción de 2 a 1.
De hecho, nosotros estamos empezando a adoptar Passenger y Ruby Enterprise Edition para nuestras aplicaciones Rails y, de momento, estamos más que satisfechos.
Otras implementaciones entran en el juego
Además de las habituales y las ya mencionadas (Ruby 1.9, JRuby, Rubinius y Ruby Enterprise Edition), Antonio Cangiano ha incluido otras implementaciones menos maduras pero a las que no conviene perder de vista, como MagLev (cuya presentación en la RailsConf 2008 causó un importante revuelo), IronRuby o MacRuby.
Conclusiones
Siempre hay que tomar con cuidado los resultados arrojados por esta clase de comparativas. Se trata de pruebas sintéticas y no de aplicaciones reales, por lo que una proporción de 5 a 1 no quiere decir que nuestras aplicaciones vayan a ir cinco veces más rápido.
Además, tampoco se tienen en cuenta otros parámetros que pueden resultar importantes como, por ejemplo, el gasto de memoria.
En cualquier caso, parece que hay lugar para el optimismo. En palabras del propio Antonio:
Overall I think these are great results. Ruby 1.8 (MRI), with its slowness and memory leaks, belongs to the past. It’s time for the community to move forward and on to something better and faster - and we don’t lack interesting alternatives to do so at this stage.