2013-10-14 2 views
2

J'aime au code OO en Perl comme ceci:Perl - POO/Moose - signatures de méthode

use MooseX::Declare; 
use Method::Signatures::Modifiers; 
use v5.14.2; 


class Talker 
{ 
    method talk (Str $text) { 
     $self=>say $text; 

    } 

    my $talk_object = Talker->new(); 
    $talk_object->talk('Hello!'); 
} 

Malheureusement cela est assez lent, je ne pouvais pas trouver un équivalent souris ou Moo lui. Quel dommage que Perl n'ait rien à voir avec PyPy. Est-ce que quelqu'un sait comment archiver la même chose avec les implémentations plus légères?

+1

Qu'en est-il lentement? Si vous parlez des impacts au moment de la compilation de l'utilisation de Moose, il pourrait être préférable d'éviter une compilation répétée en utilisant un type de code persistant. – AKHolland

+0

Oui, c'est l'heure de la compilation. Au moins, autant que je peux voir maintenant. Essayer d'éviter la compilation répétée n'est pas un hack sympa ici ...: /. Jetez un oeil à Moops. OOP a toujours un mauvais goût en Perl, malheureusement à cause de ces fatras. – royskatt

Répondre

5

Le module Moops expérimental est une autre extension de syntaxe qui fonctionne assez similaire. Il est inspiré par MooseX :: Declare (mais est plus rapide) et par le projet p5-mop qui essaie d'amener une telle syntaxe dans le noyau perl.

Votre exemple traduirait sans modifications significatives. Si vous souhaitez spécifier un backend MOP, vous pouvez déclarer une classe comme class Foo using Moose, mais par défaut Moo, ce qui est plus simple que Moose.

+2

Ça vaut vraiment la peine de regarder Moops. Semble obtenir un équilibre raisonnable entre le poids et la commodité pour moi - juste commencé à l'essayer dans certains petits scripts cron-driven. Le temps de démarrage me semble OK. Nécessite une version récente (5.14+) de Perl. –

Questions connexes