[Brasil-PM] Perl 5.20.0 Lançado! \o/

Renato Santos renato.cron em gmail.com
Quinta Maio 29 22:18:05 PDT 2014


Pessoas,

depois de fazer alguns testes utilizando o programa ab para medir o tempo
de resposta médio de alguns endpoints,
e tambem de observar a CPU utilizada no final do 'forkprove' em alguns
projetos, rodando no perl 5.20 e depois no 5.16, eu observei pouca, mas
existente, perda de velocidade.
Fiquei com isso na cabeça, pois todo mundo dizendo que está mais rápido, e
não consegui ver isso na pratica. então, fui fazer um teste separado, sem
todo o ambiente do catalyst, pois como há muitos modulos, alguns do meu
5.16 poderiam estar desatualizados em relação ao 5.20.

pois bem,
fiz o seguinte script:

use 5.14.2;
use warnings;
use Dumbbench;
use Dumbbench::CPUFrequencyPinner;
use Dumbbench::BoxPlot;
require Dumbbench::BoxPlot;

my $opt = '/home/renato/perl5/perlbrew/perls/perl-5.16.2/bin/perl';
my $unopt = '/home/renato/perl5/perlbrew/perls/perl-5.20.0/bin/perl';

my $code = <<'HERE';
my %a;
$a{rand(2)}++ for 1..100000;
foreach my $x (keys %a){
    $a{$x} = $a{$x} * -1;
}
foreach my $x (reverse keys %a){
    delete $a{$x};
}
HERE

my $db = Dumbbench->new(
  target_rel_precision => 0.005,
  initial_runs         => 20,
);

$db->add_instances(
  Dumbbench::Instance::Cmd->new(command => [$unopt, '-e', $code],
                                name => "5.20"),
  Dumbbench::Instance::Cmd->new(command => [$opt, '-e', $code],
                                name => "5.16"),
);

SCOPE: {
  # Pin CPU frequency down to reduce variability
  my $p = Dumbbench::CPUFrequencyPinner->new;
  $SIG{INT} = sub {undef $p; exit;};
  $p->set_max_frequencies($p->min_frequencies->[0]);
  $db->run;
}

$db->report;
use DDP; p $db;
$db->box_plot->show();

Estou anexado o resultado em grafico,
se quiserem que eu rode mais testes, com outros codigos dentro do HERE
vocês me avisem, pois o libROOT é ~meio~ demorado pra compilar.





2014-05-28 21:24 GMT-03:00 Renato Santos <renato.cron em gmail.com>:

> perl-5.20.0 is successfully installed.
>
>
> hora de fazer o
>
>    perl -MCPAN -e autobundle
>
> e verificar os ganhos de performance em apps reais!
>
>
> 2014-05-28 15:19 GMT-03:00 Daniel de Oliveira Mantovani <
> daniel.oliveira.mantovani em gmail.com>:
>
> garu++
>>
>> Eu ainda não me conformo com a ida da Diana, parece que foi ontem que
>> nós enchemos a cara no Rio!
>>
>> 2014-05-28 14:27 GMT-03:00 Thiago Rondon <thiago em aware.com.br>:
>> > Garu++
>> >
>> > Você deveria jogar este teu e-mail como artigo em portais de
>> > desenvolvedores e tecnologia.
>> >
>> > Isto é excelente para mostrar como a linguagem vem se desenvolvendo!
>> >
>> > Alias, seus e-mails, são artigos. ;-)
>> >
>> > Abs,
>> > -Thiago Rondon
>> >
>> >
>> > 2014-05-28 2:00 GMT-03:00 breno <breno em rio.pm.org>:
>> >> Oi pessoal,
>> >>
>> >> é realmente uma ótima época para o Perl 5. A comunidade internacional
>> >> continua cada vez mais ativa e a versão 20 que acabou de ser lançada é
>> >> talvez uma das mais interessantes dos últimos tempos! Vejam algumas
>> >> das novidades dessa versão:
>> >>
>> >>
>> >> Assinaturas de subrotinas
>> >> -----------------------------------
>> >>
>> >> Até então, para pegar os argumentos passados a uma função ou método em
>> >> Perl, precisávamos manipular diretamente o @_, em código como:
>> >>
>> >> sub pessoa {
>> >>      my ($nome, $idade) = @_;
>> >>      print "oi $nome, vc tem $idade anos";
>> >> }
>> >>
>> >> Agora podemos escrever:
>> >>
>> >> use feature 'signatures';
>> >>
>> >> sub pessoa ($nome, $idade) {
>> >>     print "oi $nome, vc tem $idade anos";
>> >> }
>> >>
>> >> podemos também garantir que nossa sub não terá argumentos:
>> >>
>> >> sub pessoa () {
>> >>     ...
>> >> }
>> >>
>> >> mais informações sobre essa tão esperada feature em:
>> >>
>> https://metacpan.org/pod/release/RJBS/perl-5.20.0/pod/perlsub.pod#Signatures
>> >>
>> >>
>> >>
>> >> Desreferenciamento pós-fixado
>> >> ------------------------------------------
>> >>
>> >> Até então, para desreferenciar uma variável em Perl precisávamos
>> >> envolvê-la em chaves, por exemplo:
>> >>
>> >> @lista = @{ $ref->{nomes}[3][-1]{lista} };
>> >>
>> >> A versão 20 do Perl 5 agora oferece outra sintaxe, mais clara (porque
>> >> não envolve as chaves extras) e intuitiva (pq segue a lógica de ação
>> >> do resto do código, da esquerda para a direita). Nessa sintaxe, o
>> >> mesmo código acima pode ser reescrito como:
>> >>
>> >> use experimental 'postderef';
>> >>
>> >> @lista = $ref->{nomes}[3][-1]{lista}->@*;
>> >>
>> >> Ou seja, basta acessar a referência desejada e adicionar uma última
>> >> seta, indicando no símbolo o tipo que você vai desreferenciar, seguido
>> >> de um asterisco. Podemos desreferenciar dessa forma arrays, hashes,
>> >> escalares, subs e até mesmo globs!
>> >>
>> >> Mais detalhes em
>> >>
>> https://metacpan.org/pod/release/RJBS/perl-5.20.0/pod/perldelta.pod#Experimental-Postfix-Dereferencing
>> >>
>> >>
>> >>
>> >> Hash Slices
>> >> ----------------
>> >>
>> >> Ao manipularmos arrays, é muito comum pegar grupos de valores através
>> de slices:
>> >>
>> >> @herculoides = qw( igoo tundro gloop zok gleep );
>> >> @irmaos = @herculoides[2,4];
>> >>
>> >> Também conseguiamos fazer slices de hashes, mas só retornando valores
>> em listas:
>> >>
>> >> my %dados = (
>> >>     nome => 'Thaddeus "Tad" Ghostal',
>> >>     apelido => 'Space Ghost',
>> >>     profissao => 'Apresentador',
>> >> );
>> >>
>> >> my ($nome, $apelido) = @dados{ 'nome', 'apelido' };
>> >>
>> >> Agora, no 5.20, podemos fazer hash slices completos, convertendo
>> >> hashes grandes em sub-hashes! O hash slice funciona como o array
>> >> slice:
>> >>
>> >> my %resumido = %dados{ 'nome', 'apelido' };
>> >>
>> >> say $resumido->{apelido};  # 'Space Ghost'
>> >>
>> >>
>> >>
>> >> Outras melhorias
>> >> -----------------------
>> >>
>> >> * Melhor desempenho - o 5.20 está ainda mais rápido que os anteriores,
>> >> com melhorias de desempenho em expressões regulares, cópia de strings,
>> >> acesso a chaves de hash e muito mais!
>> >>
>> >> * Protótipos até então eram definidos como, por exemplo: sub lala
>> >> ($$). Agora podem ser escritos como atributos da sub, ou seja: sub
>> >> lala :prototype($$). A forma antiga ainda é permitida.
>> >>
>> >> * Melhor qualidade na geração de números aleatórios, através de um
>> >> gerador independente de plataforma.
>> >>
>> >> * Suporte a Unicode 6.3 (versão anterior suportava o 6.2).
>> >>
>> >> * Android adicionado como plataforma suportada - sim, o 5.20 compila
>> >> para Android! Instruções em:
>> >> https://github.com/Perl/perl5/blob/blead/README.android
>> >> A compilação em ambientes Windows também ficou mais rápida e portátil.
>> >>
>> >> * E muito mais!
>> >>
>> >> * CGI e Module::Build (e seus módulos associados) são alguns dos
>> >> módulos que estão deixando o core para torná-lo mais leve e moderno,
>> >> mas ainda estão disponíveis no seu mirror favorito do CPAN.
>> >>
>> >>
>> >> Obituário
>> >> -------------
>> >>
>> >> A versão 20 do Perl 5 contém também uma homenagem a nossa querida
>> >> Diana Rosa, falecida em maio com apenas 27 anos. Sempre muito feliz e
>> >> participante ativa da comunidade de Perl Mongers do Rio de Janeiro,
>> >> sua memória agora está gravada para sempre em uma das versões mais
>> >> importantes da linguagem que ela tanto gostava. A mensagem está no
>> >> perldelta e pode ser vista em:
>> >>
>> https://metacpan.org/pod/release/RJBS/perl-5.20.0/pod/perldelta.pod#Obituary
>> >>
>> >>
>> >> Instalando
>> >> --------------
>> >>
>> >> Pra quem usa perlbrew: perlbrew install perl-5.20.0
>> >>
>> >> Pra quem usa plenv: plenv install perl-5.20.0
>> >>
>> >> Difícil, não? :)
>> >>
>> >>
>> >> Estatísticas e Agradecimentos:
>> >> ------------------------------------------
>> >>
>> >> As seguintes pessoas foram algumas das responsáveis pelo que se tornou
>> >> o perl 5.20.0 (embora essa lista esteja certamente incompleta): Aaron
>> >> Crane, Abhijit Menon-Sen, Abigail, Abir Viqar, Alan Haggai Alavi, Alan
>> >> Hourihane, Alexander Voronov, Alexandr Ciornii, Andy Dougherty, Anno
>> >> Siegel, Aristotle Pagaltzis, Arthur Axel 'fREW' Schmidt, Brad Gilbert,
>> >> Brendan Byrd, Brian Childs, Brian Fraser, Brian Gottreu, Chris
>> >> 'BinGOs' Williams, Christian Millour, Colin Kuskie, Craig A. Berry,
>> >> Dabrien 'Dabe' Murphy, Dagfinn Ilmari Mannsåker, Daniel Dragan, Darin
>> >> McBride, David Golden, David Leadbeater, David Mitchell, David Nicol,
>> >> David Steinbrunner, Dennis Kaarsemaker, Dominic Hargreaves, Ed Avis,
>> >> Eric Brine, Evan Zacks, Father Chrysostomos, Florian Ragwitz, François
>> >> Perrad, Gavin Shelley, Gideon Israel Dsouza, Gisle Aas, Graham Knop,
>> >> H.Merijn Brand, Hauke D, Heiko Eissfeldt, Hiroo Hayashi, Hojung Youn,
>> >> James E Keenan, Jarkko Hietaniemi, Jerry D. Hedden, Jess Robinson,
>> >> Jesse Luehrs, Johan Vromans, John Gardiner Myers, John Goodyear, John
>> >> P. Linderman, John Peacock, kafka, Kang-min Liu, Karen Etheridge, Karl
>> >> Williamson, Keedi Kim, Kent Fredric, kevin dawson, Kevin Falcone,
>> >> Kevin Ryde, Leon Timmermans, Lukas Mai, Marc Simpson, Marcel Grünauer,
>> >> Marco Peereboom, Marcus Holland-Moritz, Mark Jason Dominus, Martin
>> >> McGrath, Matthew Horsfall, Max Maischein, Mike Doherty, Moritz Lenz,
>> >> Nathan Glenn, Nathan Trapuzzano, Neil Bowers, Neil Williams, Nicholas
>> >> Clark, Niels Thykier, Niko Tyni, Olivier Mengué, Owain G. Ainsworth,
>> >> Paul Green, Paul Johnson, Peter John Acklam, Peter Martini, Peter
>> >> Rabbitson, Petr Písař, Philip Boulain, Philip Guenther, Piotr
>> >> Roszatycki, Rafael Garcia-Suarez, Reini Urban, Reuben Thomas, Ricardo
>> >> Signes, Ruslan Zakirov, Sergey Alekseev, Shirakata Kentaro, Shlomi
>> >> Fish, Slaven Rezic, Smylers, Steffen Müller, Steve Hay, Sullivan Beck,
>> >> Thomas Sibley, Tobias Leich, Toby Inkster, Tokuhiro Matsuno, Tom
>> >> Christiansen, Tom Hukins, Tony Cook, Victor Efimov, Viktor Turskyi,
>> >> Vladimir Timofeev, YAMASHINA Hio, Yves Orton, Zefram, Zsbán Ambrus,
>> >> Ævar Arnfjörð Bjarmason.
>> >>
>> >> Perl 5.20.0 representa aproximadamente 12 meses de desenvolvimento
>> >> desde o 5.18.0 e contém aproximadamente 470.000 linhas modificadas por
>> >> 2.900 arquivos, feitas por 124 autores diferentes. A linguagem Perl
>> >> continua florescendo em sua terceira década graças a sua vibrante
>> >> comunidade de desenvolvedores e usuários - e isso inclui você!
>> >> Obrigado por usar Perl :)
>> >>
>> >> Divirtam-se!
>> >>
>> >>
>> >> []s
>> >>
>> >> -b
>> >> _______________________________________________
>> >> Brasil-PM mailing list
>> >> Brasil-PM em pm.org
>> >> http://mail.pm.org/mailman/listinfo/brasil-pm
>> > _______________________________________________
>> > Brasil-PM mailing list
>> > Brasil-PM em pm.org
>> > http://mail.pm.org/mailman/listinfo/brasil-pm
>>
>>
>>
>> --
>>
>> -dom
>>
>> --
>>
>> Daniel de Oliveira Mantovani
>> Business Analytic Specialist
>> Perl Evangelist /Astrophysics hobbyist.
>> +55 11 9 8538-9897
>> XOXO
>> _______________________________________________
>> Brasil-PM mailing list
>> Brasil-PM em pm.org
>> http://mail.pm.org/mailman/listinfo/brasil-pm
>>
>
>
>
> --
> Saravá,
> Renato CRON
> http://www.renatocron.com/blog/
> @renato_cron <http://twitter.com/#!/renato_cron>
>



-- 
Saravá,
Renato CRON
http://www.renatocron.com/blog/
@renato_cron <http://twitter.com/#!/renato_cron>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/brasil-pm/attachments/20140530/7713e6da/attachment-0001.html>
-------------- Próxima Parte ----------
Um anexo não-texto foi limpo...
Nome: box_plot.png
Tipo: image/png
Tamanho: 5809 bytes
Descrição: não disponível
URL: <http://mail.pm.org/pipermail/brasil-pm/attachments/20140530/7713e6da/attachment-0001.png>
-------------- Próxima Parte ----------
Um anexo não-texto foi limpo...
Nome: box_plot.root
Tipo: application/octet-stream
Tamanho: 14422 bytes
Descrição: não disponível
URL: <http://mail.pm.org/pipermail/brasil-pm/attachments/20140530/7713e6da/attachment-0001.obj>


Mais detalhes sobre a lista de discussão Brasil-PM