Após um ano de desenvolvimento, foi publicado o lançamento de um novo ramo estável da linguagem de programação Perl - 5.36. Na preparação do novo lançamento, foram alteradas cerca de 250 mil linhas de código, as alterações afetaram 2000 arquivos e 82 desenvolvedores participaram do desenvolvimento.
A filial 5.36 foi lançada de acordo com o cronograma fixo de desenvolvimento aprovado há nove anos, o que implica o lançamento de novas filiais estáveis uma vez por ano e lançamentos corretivos a cada três meses. Em cerca de um mês, está previsto o lançamento da primeira versão corretiva do Perl 5.36.1, que corrigirá os erros mais significativos identificados durante a implementação do Perl 5.36.0. Junto com o lançamento do Perl 5.36, o suporte para o branch 5.32 foi descontinuado, para o qual atualizações futuras poderão ser lançadas somente se problemas críticos de segurança forem identificados. O processo de desenvolvimento do ramo experimental 5.37 também foi iniciado, com base no qual uma versão estável do Perl 2023 será formada em maio ou junho de 5.38, a menos que seja tomada a decisão de mudar para a numeração 7.x.
Principais mudanças:
- O suporte para assinaturas de funções foi estabilizado e agora está disponível ao especificar o pragma “use v5.36”, permitindo definir explicitamente a lista de variáveis usadas na função e automatizar as operações de verificação e atribuição de valores de um array de parâmetros de entrada. Por exemplo, código usado anteriormente: sub foo { die "Muitos argumentos para subrotina" a menos que @_ >= 2; die "Poucos argumentos para sub-rotina" a menos que @_ <= 2; meu($esquerda, $direita) = @_; retornar $esquerda + $direita; }
ao usar assinaturas, pode ser substituído por:
sub foo ($esquerda, $direita) { return $esquerda + $direita; }
Se você chamar foo com mais de dois argumentos, o interpretador gerará um erro. A lista também suporta uma variável especial “$”, que permite ignorar alguns dos argumentos, por exemplo, “sub foo ($esquerda, $, $direita)” permitirá copiar apenas o primeiro e o terceiro argumentos nas variáveis , enquanto exatamente três devem ser passados para o argumento da função.
A sintaxe da assinatura também permite especificar argumentos opcionais e especificar valores padrão se um argumento estiver faltando. Por exemplo, ao especificar “sub foo ($left, $right = 0)” o segundo argumento torna-se opcional e se estiver ausente, é passado o valor 0. Na operação de atribuição, você pode especificar expressões arbitrárias, inclusive usando outras variáveis da lista ou variáveis globais. Especificar um hash ou array em vez de uma variável (por exemplo, "sub foo ($left, @right)") permitirá que um ou mais argumentos sejam passados.
- Em funções declaradas usando assinaturas, o suporte para atribuição opcional de parâmetros do array "@_" é declarado experimental e resultará em um aviso (o aviso só será emitido se @_ for usado em funções declaradas usando a nova sintaxe). Por exemplo, será exibido um aviso para a função: use v5.36; sub f ($x, $y = 123) { diga "O primeiro argumento é $_[0]"; }
- Estabilizado e disponível ao especificar o pragma "use v5.36", o operador infixo "isa" para verificar se um objeto é uma instância da classe especificada ou uma classe derivada dela. Por exemplo: if( $obj isa Package::Name ) { … }
- Ao especificar o pragma “use v5.36”, o processamento de avisos é habilitado (o modo “use warnings” é ativado).
- Ao especificar o pragma “use v5.36”, o suporte à notação indireta para chamar objetos (“recurso indireto”) é desabilitado - uma forma desatualizada de chamar objetos, em que um espaço é usado em vez de “->” (“método $ object @param” em vez de “$object-> $method(@param)"). Por exemplo, em vez de “meu $cgi = novo CGI” você precisa usar “meu $cgi = CGI->novo”.
- Ao especificar o pragma “use v5.36”, o suporte à emulação de arrays multidimensionais e hashes no estilo Perl 4 (“feature multidimensional”) é desabilitado, permitindo que a indicação de diversas chaves sejam traduzidas em um array intermediário (por exemplo, “ $hash{1, 2}”) foi convertido para "$hash{join($;, 1, 2)}").
- Ao especificar o pragma “use v5.36”, o suporte para o mecanismo de ramificação experimental (“feature switch”), semelhante às instruções switch e case, é desabilitado (Perl usa as palavras-chave fornecidas e quando). Para usar esse recurso, a partir do Perl 5.36, você deve especificar explicitamente 'use feature "switch"' e, se especificar "use version", ele não será mais ativado automaticamente.
- O suporte para classes de caracteres adicionais entre colchetes dentro de expressões regulares foi estabilizado e está disponível por padrão. O recurso permite realizar partidas utilizando regras avançadas de interseção, exclusão e união de conjuntos de caracteres. Por exemplo, '[AZ - W]' - caracteres de A a Z excluindo W.
- O suporte para as operações "(?", "( )", "{ }" e "[ ]" está parcialmente estabilizado e disponível por padrão; você pode usar os símbolos "" "", "" "", etc. , "qr"pat "".
- É proibido chamar a função de classificação sem argumentos, o que agora resultará em um erro. @a = classificar @vazio; # continuará @a = sort; # um erro será impresso @a = sort(); # um erro será impresso
- Foi proposto um novo sinalizador de linha de comando “-g”, que permite o modo de carregar o arquivo inteiro como um todo, em vez de linha por linha. A ação da bandeira é semelhante à indicação “-0777”.
- O suporte para a especificação Unicode foi atualizado para a versão 14.0.
- Fornece tratamento instantâneo de exceções de ponto flutuante (SIGFPE) semelhante a outros alarmes, como SIGSEGV, permitindo vincular seus próprios manipuladores para SIGFPE via $SIG{FPE}, por exemplo, exibindo o número da linha onde o problema ocorreu.
- Versões atualizadas dos módulos incluídos no pacote básico.
- Adicionadas otimizações de desempenho. Foi fornecida a capacidade de armazenar chaves hash grandes com mais eficiência, sem usar tabelas de strings compartilhadas. O desempenho de criação de novos valores escalares foi significativamente melhorado, por exemplo o seguinte código agora roda 30% mais rápido: $str = "A" x 64; for (0..1_000_000) { @svs = divisão //, $str }
- O código do interpretador começou usando algumas das construções definidas no padrão C99. Construir Perl agora requer um compilador que suporte C99. O suporte para construção em versões mais antigas do MSVC++ (pré-VC12) foi descontinuado. Adicionado suporte para construção no Microsoft Visual Studio 2022 (MSVC++ 14.3).
- O suporte para plataformas AT&T UWIN, DOS/DJGPP e Novell NetWare foi descontinuado.
Fonte: opennet.ru