User Tools

Site Tools


perl:say_vs_print

Say vs Print

O Perl 5.10 inclui uma nova funcionalidade que agrada a muitos utilizadores. Uma função chamada “say” que, para além de poupar dois caracteres em relação à “print”, poupa outros dois por não ser necessário especificar que se deseja imprimir o newline no final.

Embora tudo isto seja muito bonito, é importante verificar se esta nova função é mais eficiente que um simples “print”, ou se pelo contrário, poupa caracteres mas não poupa tempo de execução.

Para testar isso, realizei uma comparação usando o módulo Benchmark. Realizei a comparação de quatro funções: um simples “print” vs “say”, e um “print” vs “say” com interpolação de variáveis.

  our $var1 = "!";
  our @var2 = qw!Hello World!;
  
  sub print_hello { print "Hello World!\n"; }
  
  sub say_hello { say "Hello World!"; }
  
  sub print_hello_vars { print "@var2$var1\n"; }
  
  sub say_hello_vars { say "@var2$var1"; }

Cada uma destas funções foi iterada 10.000.000 vezes. Dado que todas estas funções imprimem para o standard output, é importante redireccionar o output para um ficheiro. Infelizmente não foi possível redireccionar para o /dev/null já que os resultados da comparação também são impressos para o standard output. Para aumentar a fiabilidade do teste, esta configuração foi executada três vezes.

E os resultados são:

                     Rate       printI     sayI    print      say
  printInterpolate 1587302/s        --     -18%     -67%     -70%
  sayInterpolate   1945525/s       23%       --     -60%     -63%
  print            4807692/s      203%     147%       --      -8%
  say              5208333/s      228%     168%       8%       --
  
  printInterpolate 1647446/s        --     -10%     -66%     -68%
  sayInterpolate   1828154/s       11%       --     -62%     -64%
  say              4830918/s      193%     164%       --      -6%
  print            5128205/s      211%     181%       6%       --
  
  printInterpolate 1652893/s        --     -10%     -67%     -68%
  sayInterpolate   1831502/s       11%       --     -64%     -64%
  say              5076142/s      207%     177%       --      -1%
  print            5102041/s      209%     179%       1%       --

Alberto Simões: 2008/07/10 14:21

perl/say_vs_print.txt · Last modified: 2008/07/10 22:21 by ambs