[Cascavel-pm] [Spam] Re: [Spam] Re: PrincipaisContribuidoresCascavelPM
André Garcia Carneiro
andre.garcia.carneir em terra.com.br
Segunda Maio 28 09:59:17 PDT 2007
> >> Esta não é uma justificativa muito boa, pois, em geral, o tempo de
> >> alocar e desalocar a variável tem um impacto muito menor do que
> >> *qualquer outra coisa* que você faça a seguir.
> >
> > Talvez não no caso dele, mas se houvessem muitas iterações(muitas
> > mesmo), você há de concordar que é
> > desnecessário alocar variáveis dentro de iterações...
>
> Aí está o seu engano: *não importa o número de iterações*, se você
> tiver *qualquer coisa útil* dentro do loop, o impacto da otimização
> será desprezível.
>
> Experimente:
>
> use Benchmark qw ':all';
>
> cmpthese(
> 1_000,
> {
> 'my_inside' => 'for(1..10_000) { my $i = foo($_); }',
> 'my_outside' => 'my $i; for(1..10_000) { $i = foo($_); }',
> }
> );
>
> sub foo {
> my $i = shift;
> return $i++;
> }
>
> Resultado:
>
> Rate my_inside my_outside
> my_inside 130/s -- -1%
> my_outside 131/s 1% --
>
> Ou seja: neste exemplo simples, em que não temos nenhuma chamada
> realmente lenta dentro do loop, podemos dizer que a diferença é
> desprezível.
>
> >> No exemplo em questão, onde temos uma chamada realmente lenta dentro
> >> do loop, pode-se dizer que este tempo é desprezível.
> >
> > Novamente, no caso dele não... por isso eu disse 'evite', e não
> > 'não use'...
>
> O exemplo demonstra o caso geral, em que o conselho não se aplica.
>
> Mas é claro que o conselho se aplica a algumas situações,
> nomeadamente quando o seu loop não faz nada. Nesse caso a
> "otimização" poderia trazer um impressionante ganho de 10 a 20%. Isso
> mesmo: 10 a 20% mais execuções de um loop vazio!
>
> É pena que este ganho não escala, e quanto mais coisa você fizer
> dentro do loop, menor será o ganho, até o ponto em que ele se tornar
> praticamente nulo. (E como vimos no benchmark, basta uma chamada a
> uma subrotina simples para que o ganho se torne desprezível.)
Ok ok... esqueça a questão do desempenho então. Não cheguei a fazer testes, então desculpem-me se falei
besteira antes de testar.
> Resta saber se esta forma de estruturar o código aumenta ou prejudica
> a legibilidade do programa.
Acho que cai muito na questão pessoal também. Eu gosto de declarar variáveis no início das minhas subrotinas,
ao invés de espalhar isso pelo código todo.
> >> Declare as variáveis no menor escopo possível, de forma que elas não
> >> sejam usadas por mais tempo do que o necessário (tanto do ponto de
> >> vista do computador, quanto do programador -- ao restringir o escopo,
> >> você deixa de se preocupar com os efeitos colaterais de uma
> >> variável).
> >
> > Pra mim sempre vai ser no mínimo esquisito alocar variáveis dentro
> > de iterações.
>
> Se você acredita que separar a declaração do seu uso de uma variável
> torna seus scripts mais legíveis... vá em frente.
>
> Eu pessoalmente discordo: as variáveis deveriam ter o menor escopo
> necessário, para que nós possamos "esquecer" delas onde não são
> necessárias.
>
> Mas esta é apenas a minha opinião...
Cheers!
--
André Garcia Carneiro
Developer(Perl/PHP)
Member of "São Paulo Perl Mongers" - http://sao-paulo.pm.org
Mais detalhes sobre a lista de discussão Cascavel-pm