Linguagem de programação Perl 5.36.0 disponível

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

Adicionar um comentário