• Publicidad

Duda sobre velocidad de ejecución (C <--> Perl).

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Duda sobre velocidad de ejecución (C <--> Perl).

Notapor fgalves » 2007-06-08 10:00 @458

Hola a todos,

Una duda muy simple:
¿Cual sería la diferencia en terminos de velocidad de ejecución de una instrucción del tipo "print(string)" tomando como base los lenguajes C y Perl?
Perl es un lenguaje interpretado, C compilado con lo cual se ahorra dicha tarea, pero quisiera que alguien me explicara si dicha instrucción se ejecuta mucho más deprisa en C que en Perl.

Otra duda más general: me imagino que debe ser muy variable y depende del algoritmo a implementar, pero ¿cuantas veces es C más rápido que Perl de media?

¡Muchas gracias y un saludo!
Felipe
fgalves
Perlero nuevo
Perlero nuevo
 
Mensajes: 210
Registrado: 2006-09-25 13:54 @621

Publicidad

Notapor creating021 » 2007-06-08 17:36 @775

Pues...

Código: Seleccionar todo
#include <stdio.h>
int main (void)
{
  printf ("Hola Mundo\n");
  return 0;
}


Con eso, en en GNU/Linux toma 0m0.003s compilado con gcc

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict;

pritn "Helo World\n";
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Con perl 5.8.8, toma 0m.0.011s
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor

Notapor explorer » 2007-06-08 18:51 @827

Lo primero, deberías leerte
http://es.wikipedia.org/wiki/Perl#Compa ... ionamiento

En resumen, lo que se dice es que cuanto más larga es la ejecución de un programa, más se iguala el de Perl al de otros lenguajes de scripting.

Y Perl no es 'interpretado'. Tiene dos fases: compilación del fuente en bytecode y ejecución de ese bytecode.

Si hablamos de print, las diferencias son muy grandes, como te ha mostrado creating021.

Si necesitas velocidad, siempre puedes usar la técnica XS, o, mucho mejor, la técnica del Inline::C, con lo que escribes código C dentro de Perl.

C siempre será más rápido que Perl en ejecución, pero... ¿cuanto más rápido es el desarrollo del programa en Perl sobre C? Cualquier programador de Perl puede escribir en unos segundos código Perl que en C ocuparían muchas líneas.

Cuando le hables al jefe le dices: "El print del C es 8 milésimas de segundo más rápido que en Perl, pero si el programa lo tengo que hacer en C tardaré tres veces más y será 10 veces más largo (con diez veces más posibilidades de error, claro). ¿Qué prefiere? ¿Pagarme una día programando en Perl o cinco días programando en C?". A ver qué te contesta :-)
(Leer primer párrafo de http://es.wikipedia.org/wiki/Perl#Dise.C3.B1o)

Yo tuve la necesidad de procesar millones de datos en unos segundos. Si hubiéramos sido un pequeño ejército de programadores, lo habríamos hecho en C o C++, pero éramos dos y con poquísimo tiempo. La opción obvia era Perl, claro. Pero, para obtener el máximo rendimiento, usamos PDL y muy de vez en cuando, Inline::C.

* Ejemplo de uso con PDL
* Artículo de Xavier Calbet sobre PDL
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14482
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor creating021 » 2007-06-08 19:28 @852

Por otro lado...

http://fabrice.bellard.free.fr/tcc/

Si eres bueno con los dolores de cabeza, puedes usar C script o puedes intentar re-compilar perl con este compilador o con un GCC más nuevo y tener mejor resultado (según uno de esos links de wikipedia, que está buena la reforma :D )

Aunque la alternativa de explorer es la más usada y creo que puede ser la mejor (pues, el lo dice por experiencia)
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor

Notapor fgalves » 2007-06-09 10:03 @460

Hola a todos,

Mi pregunta iba exactamente por ahí... Me explico:
Estoy trabajando actualmente en un proyecto escrito íntegramente en Perl el cual debe procesar millones de entradas al día. Dichas entradas son procesadas progresivamente, cada X minutos, y los resultados relativos a dichas entradas escritos en un fichero de texto temporal, el cual es cerrado al terminar el día.
Mi duda básicamente era esa: saber si incluyendo código en C para todo lo concerniente a la escritura de los resultados en ficheros (I/O), me haría ganar mucho en tiempo o no.
Soy plenamente consciente de que programar en C es más engorroso que hacerlo en Perl. De hecho, antes de "llegar" a dicho proyecto, toda mi experiencia como programador la tenía en Java y en C, y no ha sido hasta ahora que he tenido la ocasión de entrar en contacto con Perl. La verdad es que hasta ahora me tiene bastante sorprendido en cuanto a posibilidades y flexibilidad de uso.
De hecho, usé el profiler de perl y pude constatar que las operaciones más costosas eran precisamente las de entrada/salida.
Creo que no sería mala idea hacer algunas pruebas y ver si puedo ganar algo usando Inline::C.

¡Muchas gracias por vuestras opiniones y consejos!
Saludos,
Felipe
fgalves
Perlero nuevo
Perlero nuevo
 
Mensajes: 210
Registrado: 2006-09-25 13:54 @621

Notapor explorer » 2007-06-09 12:46 @573

Sería interesante ver en detalle el problema... es decir, darnos más pistas de tamaño y tipo de los ficheros y algún detalle del procesamiento que haces. No darnos los detalles exactos porque seguramente serán secreto de empresa o por motivos de seguridad, pero nos pueden valer datos falsos.

Es posible que te sorprendas más :-)

Revisando tus últimos mensajes, no me cabe duda de que el proyecto es muy grande. Trabajando en Solaris, ejecución de módulos de forma condicional y dinámica (algo que me recuerda mucho al módulo Module::Pluggable), procesamiento en paralelo, XML... muy interesante.

Los programadores de Java que se enfrentan a Perl tienen la desventaja de seguir usando -durante un tiempo- las mismas estructuras de control de flujo (heredadas del C, por supuesto, a mí también me ha pasado). Y tienen la ventaja de su mayor control en lo relativo a la POO.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14482
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

cron