• Publicidad

Pregunta sobre módulos

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

Pregunta sobre módulos

Notapor ManuelPerl » 2013-09-02 18:06 @796

¿Es cierto que los módulos de Perl están escritos en lenguaje C? ¿Y que luego se compilan para que el intérprete de Perl pueda utilizarlos? Si esto es así, entonces es necesario aprender C si queremos hacer módulos para Perl, ¿estoy en lo cierto?. Cuanto más sepamos de C más potencia podemos darle a Perl, ¿es así?. Si esto es así me vendría muy bien porque ya conozco lo básico de C. Una pregunta más, ¿el compilador que compila ese código C, que está en la versión de Perl que tenemos instalada?. Perdonarme si hago tantas preguntas, pero es que estoy empezando y tengo que ir aclarándome.

Gracias de nuevo
ManuelPerl
Perlero nuevo
Perlero nuevo
 
Mensajes: 41
Registrado: 2011-06-21 16:23 @724

Publicidad

Re: Pregunta sobre módulos

Notapor explorer » 2013-09-02 18:47 @824

ManuelPerl escribiste:¿Es cierto que los módulos de Perl están escritos en lenguaje C?
Algunos sí. Pero puedes hacer módulos en Perl. De hecho, es lo que se suele hacer. El usar otros lenguajes como C, se dejan a cosas como por ejemplo cuando necesitas una interfaz para dialogar con alguna biblioteca externa que ya está compilada en C, o cuando necesitas acelerar una rutina, porque tienes o necesitas cumplir unos requerimientos muy altos de rendimiento. Si visitas CPAN, verás que hay muchos módulos que solo están escritos en Perl (a eso se le llama en "puro Perl").

ManuelPerl escribiste:¿Y que luego se compilan para que el intérprete de Perl pueda utilizarlos? Si esto es así, entonces es necesario aprender C si queremos hacer módulos para Perl, ¿estoy en lo cierto?
No es necesario, pero aprender siempre es bueno. Para empezar a hacer un módulo en Perl, basta con abrir un nuevo archivo de texto, y escribir: package Mi::Modulo; Más información en tu propio ordenador en perldoc perlmod, y en la Web (traducido al español).

ManuelPerl escribiste:Cuanto más sepamos de C más potencia podemos darle a Perl, ¿es así?
Hay situaciones en las cuales la velocidad de procesamiento de C compensa el tiempo que vamos a tardar en desarrollar la subrutina en ese lenguaje. Quiero decir que, un buen programador de Perl es capaz de encontrar una solución en un determinado tiempo. Si, después, vemos que nos compensa pagar a otro programador de C unas cuántas horas más para que haga una versión de alguna parte del programa, para conseguir una aceleración, pues eso lo tiene que decidir el jefe, ya que es él el que paga esas horas extra.

Pero esto solo es necesario hacerlo en determinadas situaciones: la solución Perl ya está hecha, y funciona. Si necesitamos una solución más rápida es porque el programa Perl se queda corto en prestaciones de tiempo. Por ejemplo, dar servicio a decenas de miles de usuarios por hora en una página web de juegos.

ManuelPerl escribiste:Si esto es así me vendría muy bien porque ya conozco lo básico de C.
Lo malo es que para integrar C con Perl... puede llegar a ser algo complicado... Más información en tu propio ordenador en perldoc perlxs, y en la Web.

La solución más sencilla que hay es la de usar un módulo como Inline::C. Yo ya he hecho alguna cosa así, cuando cierta rutina tardaba en ejecutarse unas cuantas horas, en Perl. La pasé a C, y el resultado salía en minutos. Pero lo hice porque había poca dificultad en pasar la rutina de Perl a C. Si veo que voy a tardar mucho tiempo, le digo al jefe que sale mucho más barato comprar un ordenador nuevo más rápido.

ManuelPerl escribiste:Una pregunta más, ¿el compilador que compila ese código C, que está en la versión de Perl que tenemos instalada?
Se puede usar cualquiera, porque se usa un C estándar. En el caso de Inline::C, se usa el que esté instalado en ese momento en el sistema. En los Unix/Linux, ejecutará cc, que casi siempre será un alias del gcc.

ManuelPerl escribiste:Perdonarme si hago tantas preguntas, pero es que estoy empezando y tengo que ir aclarándome.

Por dónde empezar.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Pregunta sobre módulos

Notapor ManuelPerl » 2013-09-20 15:01 @667

Quería completar la pregunta que hice con este resultado: Construí un bucle for que imprimía un nombre y el valor numérico del bucle que llegaba hasta 1000000. El resultado fue el siguiente: En Perl lo recorrió en 65 segundos, en lenguaje C con Codeblocks 97 segundos y en Python el mismo bucle se fue allá por los 10 minutos largos. Me ha sorprendido bastante la velocidad de Perl. En cuestión de velocidad no tiene nada que envidiarle a C, por lo menos en este código de un bucle.
ManuelPerl
Perlero nuevo
Perlero nuevo
 
Mensajes: 41
Registrado: 2011-06-21 16:23 @724

Re: Pregunta sobre módulos

Notapor explorer » 2013-09-20 15:42 @696

Repite el experimento, pero esta vez minimizando la pantalla de terminal donde lo estás ejecutando.

Verás que los resultados son distintos.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Pregunta sobre módulos

Notapor ManuelPerl » 2013-09-20 16:07 @713

Pues sí, es cierto, dio una medida de 16 segundos minimizada y sin minimizar 65 segundos. Me imagino que al no tener que mostrar por pantalla, toda la CPU se centra en el cálculo. No sabía yo que había tanta diferencia. Otra cosa nueva aprendida, je,je,je. ¿Hay alguna manera de ocultar la consola por el código sin tener que minimizar?
ManuelPerl
Perlero nuevo
Perlero nuevo
 
Mensajes: 41
Registrado: 2011-06-21 16:23 @724

Re: Pregunta sobre módulos

Notapor explorer » 2013-09-20 18:36 @817

Sí que la hay, pero depende del sistema gráfico que estés usando.

Pero es mucho más cómodo hacer esto:

$ sleep 5; time programa.pl

Y así tienes 5 segundos para minimizar la consola.

:)
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
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 2 invitados