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

breno breno em rio.pm.org
Sexta Maio 30 09:49:25 PDT 2014


Cron,

o ganho em desempenho é pontual em algumas funções e padrões de
código, não sei se fica de fato perceptível em um módulo completo
porque há outros gargalos potenciais. Para as análises de desempenho
são feitos benchmarks específicos considerando apenas trechos de
código e não módulos inteiros. Mas curti a sua análise! Se quiser mais
detalhes, as principais melhorias estão disponíveis em
https://metacpan.org/pod/release/RJBS/perl-5.20.0/pod/perldelta.pod#Performance-Enhancements,
e talvez as principais sejam em expressões regulares e no novo sistema
de copy-on-write.

Ricardo,

houve um problema com o JSON::XS no lançamento do 5.18 que estava
mapeado desde o 5.17 (dev) mas o autor do módulo se recusou a corrigir
até que o 5.18 fosse lançado de fato. A mudança mais problemática para
o CPAN foi mesmo do 5.16 pro 5.18, que adicionava maior aleatoriedade
em chaves de hash - e ainda assim em sua grande maioria apenas
arquivos de teste tiveram problema . Se o seu código roda no 5.18,
passar para o 5.20 não deve trazer problemas. A lista de
incompatibilidades pode ser vista em
https://metacpan.org/pod/release/RJBS/perl-5.20.0/pod/perldelta.pod#Incompatible-Changes
mas resume-se a:

* "do minha_sub($arg1, $arg2);" gerava warnings de sintaxe obsoleta
desde o 5.0.0 (de 1994) e agora é um erro fatal de sintaxe;

* Taint mode não funcionava exatamente como documentado e agora
funciona. Isso significa que, se o "taint mode" foi ativado no seu
código com com a flag -T, ele vai marcar variáveis corretamente, o que
não acontecia em alguns casos especificos envolvendo locales;

* code points não-unicode acessados via \p{} e \P{} eram avaliados
como "falso" mas agora são "verdadeiros", o que é muito mais coerente
com o padrão de uso e foi tratado como um bug agora corrigido. \p{All}
não era usado no CPAN e deixou de significar "todos os codepoints
Unicode" para virar "todos os codepoints". \p{Any} ainda significa
"todos os codepoints Unicode";

* A nova versão do Data::Dumper que vem no 5.20 exibe os dados de
forma um pouco diferente dependendo das variáveis passadas e da
estrutura de dados processada. Isso pode quebrar alguns testes que
avaliam o conteúdo da string. Testes desse tipo deveriam na verdade
avaliar o resultado da estrutura em si, e fazer eval da string do
Data::Dumper se só tiverem o resultado serializado;

* O caractere de ponto decimal não vaza mais pra fora do escopo do
"use locale" (aleluia irmãos! isso já me mordeu antes algumas vezes).
Mas a correção desse bug pode afetar quem dependia dele, então foi
citado na listagem;

* Os códigos de erro em sockets Windows do Perl 5.20 foram atualizados
para usar o errno.h em vez do WSAGetLastError(), então algumas
verificações podem falhar no Windows em módulos que capturam erros por
códigos específicos;

* Duas funções internas, não documentadas e não utilizadas no CPAN (a
saber: PerlIO_vsprintf e PerlIO_sprintf) eram problemáticas e foram
removidas.

Ou seja, nada pra se preocupar. Ainda assim, como a comunidade Perl é
super cuidadosa com o CPAN e retro-compatibilidade, algumas
incompatibilidades foram identificadas antes do lançamento através de
bisects e smokers (a BBC por exemplo é uma das empresas que
gentilmente cede sua infraestrutura para testes de compatibilidade do
bleadperl) e a grande maioria já foi tratada pelos autores. Os
meta-tíquetes associados a isso podem ser vistos em:

https://rt.perl.org/Public/Bug/Display.html?id=115910
https://rt.perl.org/Public/Bug/Display.html?id=119433

Finalmente, você deveria instalar o 5.20 não apenas por um ganho em
desempenho, e sim por todas as atualizações e novas features que
certamente ajudarão a escrever programas mais modernos, legíveis,
elegantes e executados por um interpretador mais estável e robusto
(foram 877 tíquetes fechados desde o lançamento do 5.18). Acho que são
bons motivos, não? :)

[]s!

-b


2014-05-30 11:48 GMT-03:00 Renato Santos <renato.cron em gmail.com>:
> Ricardo,
>
> eu não cheguei a usar a 5.18 pois eu sabia que quebrou alguns modulos do
> CPAN, mas eles seriam atualizados alguma hora, principalmente os utilizados
> por muita gente.
>
> Não cheguei a completar meu Bundle do 5.16 no 5.20, e tambem instalei sem
> testes no que deu, depois desisti e mandei rodar o "cpanm -n --installdeps
> ." nos projetos que queria testar, pois eu tenho muita coisa a mais no 5.16.
>
> Como eu não rodei os testes, eu não se mais coisa quebrou, até porque eu não
> teria como comparar isso com o 5.16. Isso é trabalho do CPAN Testers:
> http://static.cpantesters.org/
>
> Tem alguns modulos (não lembro nome agora, acho que aqueles que usam o
> berkeley db) dão um certo trabalho pra passar nos testes.
>
>
> mas podemos ver modulo por modulo aqui:
> http://www.cpantesters.org/distro/C/Catalyst-Devel.html#Catalyst-Devel-1.39
>
> eu não recomendo sair colocando versões novas assim na produção, mas nem é
> por causa do código do perl, e sim por causa de todos os modulos do CPAN que
> ainda não se atualizaram com alguma coisa deprecated, principalmente os XS.
>
>
> 2014-05-30 11:37 GMT-03:00 Ricardo Stock <ricardostock em bol.com.br>:
>
>> Gente uma pequena pergunta.
>>
>> Eu achei realmente fantastico a nova versão do perl, principalmente pela
>> parte de assinatura de funções... isso eu sempre achei falta no perl. Mas
>> vendo os graficos e o teste do Renato, fica a dúvida.
>>
>> Vale a pena atualizar agora visto que “EU” ainda não vi possiveis
>> problemas que podem surgir com os códigos já em produçao, e passar por um
>> trabalho e risco por ganho de micro segundos, pode não vir a ser agora uma
>> boa ideia. Visto que hoje meu gargalo esta na conexão e não no
>> processamento.
>>
>> Alguem tem alguma informação sobre possiveis problemas de
>> incompatibilidade que possam existir entre as versoes 5.16 e a 5.20.
>> Pergunto isso por experiencia, pois quando atualizei o módulo json tive um
>> trabalho danado.
>>
>> Valeu.
>>
>> From: Renato Santos
>> Sent: Friday, May 30, 2014 2:18 AM
>> To: Perl Mongers do Brasil, uni-vos!
>> Subject: Re: [Brasil-PM] Perl 5.20.0 Lançado! \o/
>>
>> 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
>>
>>
>>
>>
>> --
>> Saravá,
>> Renato CRON
>> http://www.renatocron.com/blog/
>> @renato_cron
>>
>> ________________________________
>> _______________________________________________
>> 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
>
>
>
>
> --
> Saravá,
> Renato CRON
> http://www.renatocron.com/blog/
> @renato_cron
>
> _______________________________________________
> Brasil-PM mailing list
> Brasil-PM em pm.org
> http://mail.pm.org/mailman/listinfo/brasil-pm


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