13 de agosto de 2015

rperl: de perl a c++

Hola,
el proyecto RPerl acaba de liberar la primera versión en CPAN tras más de dos años de desarrollo en https://github.com/wbraswell/rperl . Su mascota es un correcaminos y a su autor principal (Will Braswell), a tenor de lo que escribe en la página del proyecto, parece que le gusta la literatura fantástica o las películas de semana santa.
 
Volviendo a lo importante, la filosofía del proyecto es hacer un compilador que permita convertir código Perl, siguiendo una versión limitado de su sintaxis, en código C++ que se compila y enlaza con Inline::CPP, del que ya hablamos en otra entrada.

Apenas he hecho algunas pruebas, os dejo mis notas:
  1.  Para instalar RPerl hay instrucciones detalladas en: https://github.com/wbraswell/rperl/blob/master/INSTALL. En mi caso no funcionaron a la primera, pero tras actualizar g++ a la versión 4.7 Io logré con:

    $ cpan -i  Inline::C
    $ cpan -if Inline::CPP
    $ cpan -i RPerl 
    

  2. Los ejemplos más sencillos de uso los encontré en: https://github.com/wbraswell/rperl/tree/master/lib/RPerl/Learning
  3. Para encontrar otros ejemplos más completos tuve que rebuscar en: https://github.com/wbraswell/rperl/tree/master/lib/RPerl/Test. Por ejemplo, para ver la sintaxis RPerl para escribir en un archivo encontré esto, o esto otro para expresiones regulares.
Como ejemplo de la ganancia en velocidad por usar tipos de datos estáticos y algoritmos compilados, los autores muestran un one-liner que ordena 5000 enteros:

$ perl -e 'use RPerl::Algorithm::Sort::Bubble; my $a = [reverse 0 .. 
5000]; use Time::HiRes qw(time); my $start = time; my $s = 
integer_bubblesort($a); my $elapsed = time - $start; print Dumper($s); 
print "elapsed: " . $elapsed . "\n";'

Este experimento, en sus manos, tarda 15s con Perl interpretado y 0.045s con RPerl precompilado. Por tanto parece que para algunas tareas numéricas vale pena complicar un poco el código Perl para obtener estas ganancias, no?

Me queda por ver si también vale la pena en otras tareas habituales en nuestro campo como leer y procesar archivos de gran tamaño y consultar luego datos extraído por medio de hashes, pero eso queda para otro día,
hasta luego,
Bruno