[Brasil-PM] perl 5 versão18 lançado! \o/

breno breno em rio.pm.org
Sábado Maio 18 13:00:26 PDT 2013


É com enorme prazer que a comunidade Perl de todo o mundo recebe a
mais nova versão do Perl 5! O Perl 5.18.0 representa mais ou menos 1
ano de desenvolvimento desde o 5.16.0 e contém aproximadamente 400.000
linhas de mudanças entre 2.100 arquivos, feitas por 113 autores
diferentes.

Você poderá baixar e instalar a partir de seu mirror favorito ou em
https://metacpan.org/release/RJBS/perl-5.18.0/

Os digests SHA1 para este release são:

 a09281aece16772ca676d842c1b24fb9f9f1a409  perl-5.18.0.tar.bz2
 f5a97a9fa4e9d0ef9c4b313c5b778a0e76291ee2  perl-5.18.0.tar.gz

Se você prefere instalar via perlbrew, aguarde o 5.18.0 estar
disponível verificando a lista retornada pelo comando:

% perlbrew available

Depois é só instalar e usar!

% perlbrew install perl-5.18.0
% perlbrew switch perl-5.18.0


Confira as principais novidades:


Novo mecanismo para features experimentais!
--------------------------------------------------------------

Inúmeros sistemas críticos dependem fortemente de Perl em todo o
mundo. Por isso, sempre há uma grande preocupação com
retrocompatibilidade no desenvolvimento da linguagem Perl, o que é bom
mas exige cuidado extremo ao adicionar uma nova feature. Para evitar a
sensação de conservadorismo excessivo e ao mesmo tempo permitir o
desenvolvimento e exploração de novas features experimentais que
elevem a qualidade e recursos da linguagem ainda mais, foi criado o
seguinte mecanismo:

- features experimentais serão ativadas pelo pragma "use feature
nome_da_feature"
- features experimentais vão sempre gerar warnings avisando que a
feature é, bem, experimental - a menos que o desenvolvedor
deliberadamente desative os warnings. Assim, ao dizer "no warnings
'experimental::nome_da_feature'", o desenvolvedor está assumindo
responsabilidade por quaisquer problemas devido a mudanças futuras na
feature, ou mesmo em sua remoção completa.

Como algumas features atuais (por exemplo, "~~" e "my $_") agora
emitem warnings no 5.18.0 avisando explicitamente sobre isso, você
pode querer desativar os warnings em versões anteriores do Perl (caso
esteja escrevendo um módulo que usa a feature experimental, por
exemplo). Como a categoria 'experimental' não existe em versões
anteriores, vc pode fazer isso usando o pragma 'if':

no if $] >= 5.018, 'warnings', 'experimental::nome_da_feature';

Consulte https://metacpan.org/module/perlexperiment para saber mais
sobre quais as features marcadas como experimentais.


Mudança completa na implementação dos hashes
--------------------------------------------------------------------

=> A semente usada pela função de hash do Perl agora é aleatória. Isso
significa que a ordem das chaves e valores de um hash retornadas por
keys(), values() e each() vão ser diferentes a cada execução do seu
programa. Isso já acontecia antes, porém de forma mais sutil. Agora
acontecerá em cada execução. Como nas versões anteriores, para
garantir a ordem, basta usar sort(). A linguagem continua garantindo
que, independente da ordem, ela será a mesma para todas as funções
acima. Ou seja, o idioma relativamente comum:

my @chaves = keys %hash;
my @valores = values %hash;

ainda é garantido de funcionar, já que a ordem, embora aleatória entre
execuções, será a mesma tanto para o keys() quanto para o values().

A idéia dessa mudança é expor bugs sutis mais claramente (já que a
linguagem nunca garantiu a ordem) e tornar os hashes do perl mais
robustos a ataques de complexidade algorítmica. Portanto, caso vc
tenha problemas com essa mudança, corrija seu código! Se precisar por
algum motivo qualquer manter o modelo anterior (que trocava a ordem
apenas quando o tamanho do bucket de hash mudava), basta definir a
variável de ambiente PERL_PERTURB_KEYS para o valor "1", mas isso é
inseguro e não recomendado.

=> Foi adicionado suporte a diferentes funções de hash, e a função
padrão passou a ser a "ONE_AT_A_TIME_HARD". É possível escolher sua
própria função de hash ao compilar o perl, de acordo com seu gosto e
necessidades de segurança e desempenho.


Suporte a Unicode 6.2!
-------------------------------

Para saber as diferenças entre o Unicode 6.1 e esse, veja
http://www.unicode.org/versions/Unicode6.2.0

Uma outra característica interessante é que, embora o padrão agora
seja o Unicode 6.2, você pode recompilar o perl para usar qualquer
versão do Unicode (com seus problemas associados, lógico).


Subrotinas léxicas (experimental)
---------------------------------------------

use 5.18.0;
no warnings 'experimental::lexical_subs';
use feature 'lexical_subs';

my sub teste { ... };  # yup! "our sub" e "state sub" também funcionam!

Essa feature permite criar subrotinas visíveis somente dentro do
escopo léxico em que são declaradas. A função é criada sempre que o
bloco de código é acessado.

Para mais informações, vejam:
https://metacpan.org/module/perlsub#Lexical-Subroutines


Módulos que vão sair do core em versões futuras do perl
----------------------------------------------------------------------------

Os módulos à seguir serão removidos da distribuição core do perl em
versões futuras e devem ser instaladas via CPAN. As versões dentro do
core vão emitir um warning da categoria 'deprecated'. Para
silenciá-los, basta instalar a versão do CPAN :)

Archive::Extract, B::Lint, B::Lint::Debug, CPANPLUS (e sub-módulos),
Devel::InnerPackage, encoding, Log::Message (e sub-módulos),
Module::Pluggable, Module::Pluggable::Object, Object::Accessor,
Pod::LaTeX, Term::UI, Term::UI::History


Melhorias de desempenho
------------------------------------

=> declarações de variáveis léxicas em listas como "my ($x, $y)" foram
otimizadas para serem realizadas em apenas uma operação, tornando-as
mais rápidas do que declarações separadas;

=> pack() com argumentos constantes está mais rápido;

=> expressões regulares casando com propriedades Unicode como \X estão
de 35% a 40% mais rápidas;

=> otimização de hashes em contexto booleano foi extendida para
contemplar também "scalar(%hash)", "%hash ? ... : ..." e "sub { %hash
|| ... }

=> testes em arquivos são levemente mais eficientes;


Outras
----------

Documentação atualizada, novas mensagens de "diagnostics", mais opções
de compilação, melhor estruturação interna de diversos componentes.
Ah, e um *MONTE* de bugfixes! :D

Para ver mais detalhes sobre as mudanças, é só acessar o arquivo
"perldelta.pod", disponível dentro da distribuição ou em
https://metacpan.org/module/RJBS/perl-5.18.0/pod/perldelta.pod


Obituário
------------

Hojung Yoon (AMORETTE), 24 anos, de Seul na Coréia do Sul, seguiu para
seu longo descanso no dia 8 de Maio de 2013. Ele era um jovem e
brilhante hacker Perl 5 & 6 e um dedicado membro do Seoul.pm. Ele
programava Perl, falava Perl, comia Perl, e amava Perl. Nós
acreditamos que ele ainda está programando em Perl com seu laptop IBM
quebrado em algum lugar. Vamos sentir sua falta.


Agradecimentos
----------------------

A linguagem Perl continua florescendo em sua terceira década graças a
uma comunidade vibrante de usuários e desenvolvedores (sim, você!
Obrigado!)

Os seguintes desenvolvedores são conhecidos por terem contribuido com
as melhorias que que tornaram o Perl 5.18.0:

Aaron Crane, Aaron Trevena, Abhijit Menon-Sen, Adrian M. Enache, Alan
Haggai Alavi, Alexandr Ciornii, Andrew Tam, Andy Dougherty, Anton
Nikishaev, Aristotle Pagaltzis, Augustina Blair, Bob Ernst, Brad
Gilbert, Breno G. de Oliveira, Brian Carlson, Brian Fraser, Charlie
Gonzalez, Chip Salzenberg, Chris 'BinGOs' Williams, Christian Hansen,
Colin Kuskie, Craig A. Berry, Dagfinn Ilmari Mannsåker, Daniel Dragan,
Daniel Perrett, Darin McBride, Dave Rolsky, David Golden, David
Leadbeater, David Mitchell, David Nicol, Dominic Hargreaves, E.
Choroba, Eric Brine, Evan Miller, Father Chrysostomos, Florian
Ragwitz, François Perrad, George Greer, Goro Fuji, H.Merijn Brand,
Herbert Breunung, Hugo van der Sanden, Igor Zaytsev, James E Keenan,
Jan Dubois, Jasmine Ahuja, Jerry D. Hedden, Jess Robinson, Jesse
Luehrs, Joaquin Ferrero, Joel Berger, John Goodyear, John Peacock,
Karen Etheridge, Karl Williamson, Karthik Rajagopalan, Kent Fredric,
Leon Timmermans, Lucas Holt, Lukas Mai, Marcus Holland-Moritz, Markus
Jansen, Martin Hasch, Matthew Horsfall, Max Maischein, Michael G
Schwern, Michael Schroeder, Moritz Lenz, Nicholas Clark, Niko Tyni,
Oleg Nesterov, Patrik Hägglund, Paul Green, Paul Johnson, Paul
Marquess, Peter Martini, Rafael Garcia-Suarez, Reini Urban, Renee
Baecker, Rhesa Rozendaal, Ricardo Signes, Robin Barker, Ronald J.
Kimball, Ruslan Zakirov, Salvador Fandiño, Sawyer X, Scott Lanning,
Sergey Alekseev, Shawn M Moore, Shirakata Kentaro, Shlomi Fish,
Sisyphus, Smylers, Steffen Müller, Steve Hay, Steve Peters, Steven
Schubiger, Sullivan Beck, Sven Strickroth, Sébastien Aperghis-Tramoni,
Thomas Sibley, Tobias Leich, Tom Wyant, Tony Cook, Vadim Konovalov,
Vincent Pit, Volker Schatz, Walt Mankowski, Yves Orton, Zefram.

Que tal entrar nessa lista também nas versões futuras do Perl? É mais
fácil do que você pensa, e sua contribuição será muito bem vinda.
Mesmo que você esteja começando com Perl e não saiba nada de C,
provavelmente há um tíquete que você pode ajudar! Veja o vídeo em
http://www.videolog.tv/video.php?id=959787 e faça seu primeiro patch
hoje!


Boa diversão!

[]s

-b


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