Ontem, 23 de maio, o Perl 5.30.0 foi lançado. A notícia foi anunciada pelo perl.perl5.porters Usenet como um dos principais desenvolvedores do Perl, Sawyer X.
Comparado com a versão estável anterior, 5.28.0, lançada há 11 meses, foram alteradas cerca de 620.000 linhas de código, as alterações afetaram 1300 arquivos, 58 autores participaram do desenvolvimento. As alterações no próprio código-fonte (apenas arquivos .pm, .t, .c e .h) são estimadas em ~ 510.000 linhas e 750 arquivos.
O desenvolvimento da próxima filial 5.31 está aberto. A próxima versão estável está prevista para maio de 2020.
Principais mudanças:
- As funções da API Perl C sv_utf8_downgrade e sv_utf8_decode não são mais consideradas experimentais.
- Suporte experimental implementado para expressões lookbehind de tamanho variável, como por exemplo "(? <= Foo?)" And "(? <! Ba {1,9} r)" (anteriormente levou a um erro)
- O valor máximo do especificador de tamanho ("n") nos blocos "{m, n}" das expressões regulares foi aumentado de 32767 para 65534.
- Suporte para Unicode 12.1.
- Suporte limitado a curingas foi adicionado às especificações de valor da propriedade Unicode (não sei como traduzir corretamente). Por exemplo, a expressão "qr! \ P {nv = / (? X) \ A [0-5] \ z /}!" Permite selecionar todos os caracteres Unicode que definem números de 0 a 5, incluindo números tailandeses ou bengalis.
- O suporte para qr '\ N {name}' foi implementado (caracteres nomeados em expressões regulares limitadas a aspas simples; anteriormente, esse regexp causava um erro).
- Agora você pode compilar o Perl usando apenas operações seguras de encadeamento com localidades (-Accflags = '- DUSE_THREAD_SAFE_LOCALE').
- A combinação dos sinalizadores “-Dv” (saída de depuração estendida) e “-Dr” (expressões regulares de depuração) agora leva à inclusão de todos os modos possíveis de depuração de expressões regulares.
- Pack () adiciona proteção contra o retorno de seqüências Unicode inválidas.
Remoção de recursos e alterações incompatíveis:
- Atribuir um valor diferente de zero à variável especial $ [ (índice do primeiro elemento da matriz) agora leva a um erro fatal.
- Como separadores de linhas e padrões, apenas grafemas agora são permitidos. (Caracteres compostos Unicode são proibidos).
- Agora, algumas maneiras obsoletas de usar o colchete esquerdo sem escape “{” nos padrões regex agora são proibidas.
- Chamar sysread (), syswrite (), send () ou recv () durante o processamento do identificador: utf8 agora é um erro fatal.
- É proibido usar "my" em declarações condicionais identicamente falsas (por exemplo, "my $ x if 0").
- Removido o suporte para a variável especial $ * (pesquisa em várias linhas). As alternativas corretas são "/ s" e "/ m".
- Removido o suporte para a variável especial $ # (saída formatada de números).
- O nome da função dump () agora precisa ser explicitamente qualificado (CORE :: dump).
- Removida a função File :: Glob :: glob (você precisa usar File :: Glob :: bsd_glob).
- Foi planejado parar de suportar o uso de macros no código XS (blocos em C) que executam operações com o UTF-8, mas depois foi decidido adiá-lo para a versão 5.32.
Melhorias de desempenho:
- A tradução de UTF-8 em pontos de código (não sei como traduzir) agora está implementada como uma máquina de estado, o que também resulta em aumento de desempenho - por exemplo, ord ("\ x7fff") agora requer 12% menos instruções. A validação de sequência de caracteres UTF-8 também é implementada como uma máquina de estado e é mais rápida.
- Chamadas recursivas removidas de finalize_op ().
- Pequenas otimizações foram feitas no código para dobrar caracteres idênticos e definir classes de caracteres em expressões regulares.
- As conversões de identificadores de tipo assinados em não assinados (IV para UV) foram otimizadas.
- O algoritmo para converter números inteiros em seqüências é acelerado processando dois dígitos em vez de um de cada vez.
- Melhorado pela análise LGTM.
- Código otimizado nos arquivos regcomp.c, regcomp.he regexec.c.
- A correspondência de expressões regulares do formato “qr / [^ a] /” é acelerada significativamente nos casos em que “a” é um caractere ASCII (casos não-ASCII “a” também podem mostrar um aumento no desempenho, mas sob certas condições).