[Madrid-pm] Optimizando el valor de vuelta de una subrutina

JJ Merelo jjmerelo en gmail.com
Dom Mayo 27 08:03:28 PDT 2012


El 27 de mayo de 2012 16:42, pancho horrillo <pancho en pancho.name> escribió:

> On Sun, May 27, 2012 at 03:13:19PM +0200, JJ Merelo wrote:
> > Hola
> Buenas.
>
> > Pregunta corta: ¿Cómo se hace para que Perl no devuelva un valor de una
> > subrutina?
> AFAIK, return; devuelve undef.
>

En realidad, devolver undef no es devolver nada. Es edvolver undef, y sigue
tardando más o menos lo mismo que si haces return 1 o return 0.

>
> > Pregunta larga: en el MasterMind hay subrutinas que se llaman millones (o
> > miles de millones) de veces. El profiler dice que, curiosamente, el
> > devolver el valor de la misma es el cuello de botella. Igual hay otra
> forma
> > de solucionarlo, como meterlas inline (la verdad, no sé como hacerlo)
> pero
> > lo que he hecho ha sido declarar el prototipo como que devuelvan void y
> > hacer que se les pase el hashref de vuelta como parámetro. Marginalmente
> > mejora algo, pero sigue devolviendo el valor devuelto por la última
> función
> > en la subrutina (un map). Añadir return; no mejora prácticamente nada, y
> > declararla como void con prototipo tampoco. ¿Alguna idea?
> >
> Se me ocurre hacer un inline manual, construyendo código programáticamente
> que
> incruste el código de la función llamada en la llamante, y luego haciendo
> eval
> de ello.
>

No vas a ganar mucho si tienes que hacer un eval. Estamos hablando de
microsegundos en cada vuelta, más o menos.


>
> No tengo tiempo de explicarlo más, cuando vuelva luego intentaré
> explayarme un
> poco más.
>
> Hope that it helps.
>
> Eso siempre. Gracias.
-- 
JJ
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.pm.org/pipermail/madrid-pm/attachments/20120527/aad82b5d/attachment.html>


Más información sobre la lista de distribución Madrid-pm