[SP-pm] Referências

Otávio Fernandes otaviof at gmail.com
Tue Nov 18 16:59:20 PST 2008


2008/11/18 Luis Motta Campos <luismottacampos em yahoo.co.uk>:
> André Garcia Carneiro wrote:
>> Já em Perl, não precisamos nos preocupar com isso, principalmente
>> porque não existem tipos. No entanto, a partir da versão 5.10(me
>> corrijam se estiver errado) do perl, se não me engano, ele já permite
>> fazer protótipos, só que com um propósito diferente. Eu não sei muito
>> bem porque ainda não estou mexendo com perl 5.10. O Champs disse que
>> um dos propósitos de protótipos em perl  é o de garantir uma
>> pré-transformação(se eu entendi o que ele disse), mas sinceramente,
>> não sei.
>
> OPA! Calminha aí! Toda a família do Perl 5 suporta protótipos. E acho
> que mesmo alguns dos mais antigos (4.X) também podem.
>
> "Protótipo" é um nome infeliz para a funcionalidade. O que acontece (e o
> Eden citou a palavra certa) é "coerção" de dados: o Perl consegue
> "formatar" (num sentido restrito) a informação que está sendo passada.
> Vou me repetir, mas quero mesmo fazer vocês pensarem sobre isso:
>
> __PERL__
> sub proto_example ( $;$ ) {
>  print "@_";
> }
> my @arg = ( 1, 2, 3 );
> proto_example @arg; # imprime "3". Por que?
> &proto_example @arg; # imprime "123". Por que?
> __END__
>
> Este trechinho de código condensa tudo o que é importante saber sobre
> "protótipos". Agora, ponham estas cabecinhas para funcionar, por favor... ;)
>
> Putamplexos!
> --
> Luis Motta Campos is a software engineer,
> Perl Programmer, foodie and photographer.
> _______________________________________________
> SaoPaulo-pm mailing list
> SaoPaulo-pm em pm.org
> http://mail.pm.org/mailman/listinfo/saopaulo-pm

Luis,

Falando sobre o seu exemplo: no primeiro caso, ou seja, simplesmente
chamando a função ("()") e utilizando os parâmetros assim como
protótipo nos impõe, é impresso "3" porque é o número de parâmetros
informados no array, já que nós o convertemos para um scalar. No
segundo caso, sobrescrevendo o protótipo ("&{}"), é impresso o array
completo, ou seja, "123". Realmente este exemplo condensa tudo o que é
importante neste assunto, eu acho.

Eu trabalhei um bom tempo com o Amavisd-New e nele o uso de protótipos
é extensamente utilizado, e, devo admitir, o desempenho não é o forte
deste software. Esta thread e a lembraça do Amavisd-New me fizeram
ficar pensando se todo o casting, tratamento e conversão de parâmetros
utilizados, fosse feito manualmente, e não via protótipos... será que
ele ganharia algum desempenho; ou, o código necessário para fazer todo
este trabalho poderia deixar o programa mais lento do que utilizando
os protótipos do Perl? Não vejo uma forma simples de provar isso com
um benchmark formal, mas fico pensando nesta teoria.

um abraço,

Otávio Fernandes <otaviof at gmail.com>
http://otaviof.blogspot.com/


More information about the SaoPaulo-pm mailing list