[SP-pm] Referências

Luis Motta Campos luismottacampos at yahoo.co.uk
Tue Nov 18 17:23:47 PST 2008


Otávio Fernandes wrote:
> 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.

O Abeltje, autoridade máxima da máquina de expressões regulares do Perl, 
me garantiu que a diferença de performance é mínima. Parece que a 
implementação de protótipos é apenas uma alteração no ponteiro que 
determina o contexto durante a passagem de argumentos.

Vale à pena fazer um benchmark, eu acho.

Putamplexos
-- 
Luis Motta Campos is a software engineer,
Perl Programmer, foodie and photographer.


More information about the SaoPaulo-pm mailing list