Linguaxe de programación Perl 5.36.0 dispoñible

Despois dun ano de desenvolvemento, publicouse o lanzamento dunha nova rama estable da linguaxe de programación Perl - 5.36. Na preparación da nova versión, modificáronse preto de 250 mil liñas de código, os cambios afectaron a 2000 ficheiros e 82 desenvolvedores participaron no desenvolvemento.

A rama 5.36 lanzouse de acordo co calendario de desenvolvemento fixo aprobado hai nove anos, o que implica a liberación de novas ramas estables unha vez ao ano e lanzamentos correctores cada tres meses. En aproximadamente un mes, está previsto lanzar a primeira versión correctiva de Perl 5.36.1, que corrixirá os erros máis significativos identificados durante a implementación de Perl 5.36.0. Xunto co lanzamento de Perl 5.36, o soporte para a rama 5.32 foi descontinuado, para o que só se poden publicar actualizacións futuras se se identifican problemas de seguridade críticos. Tamén comezou o proceso de desenvolvemento da rama experimental 5.37, sobre a base do cal se formará unha versión estable de Perl 2023 en maio ou xuño de 5.38, a non ser que se tome a decisión de cambiar á numeración 7.x.

Cambios clave:

  • O soporte para sinaturas de funcións estabilizouse e agora está dispoñible ao especificar o pragma "usar v5.36", o que lle permite definir de forma explícita a lista de variables utilizadas na función e automatizar as operacións de comprobación e asignación de valores desde unha matriz de parámetros entrantes. Por exemplo, código usado anteriormente: sub foo { die "Demasiados argumentos para a subrutina" a menos que @_ >= 2; die "Demasiados poucos argumentos para a subrutina" a menos que @_ <= 2; meu($esquerda, $dereita) = @_; volver $esquerda + $dereita; }

    ao usar sinaturas, pódese substituír por:

    sub foo ($esquerda, $dereita) { return $esquerda + $dereita; }

    Se chamas a foo con máis de dous argumentos, o intérprete lanzará un erro. A lista tamén admite unha variable especial "$", que che permite ignorar algúns dos argumentos, por exemplo, "sub foo ($esquerda, $, $dereita)" permitirache copiar só o primeiro e o terceiro argumentos nas variables. , mentres que exactamente tres deben pasarse ao argumento da función.

    A sintaxe de sinatura tamén permite especificar argumentos opcionais e especificar valores predeterminados se falta un argumento. Por exemplo, ao especificar "sub foo ($esquerda, $dereita = 0)", o segundo argumento faise opcional e, se está ausente, pásase o valor 0. Na operación de asignación, pode especificar expresións arbitrarias, incluíndo o uso doutras variables. da lista ou das variables globais. Especificar un hash ou unha matriz en lugar dunha variable (por exemplo, "sub foo ($esquerda, @dereita)") permitirá pasar un ou máis argumentos.

  • Nas funcións declaradas mediante sinaturas, o soporte para a asignación de parámetros opcional desde a matriz "@_" declárase experimental e dará lugar a unha advertencia (o aviso só se emite se @_ se usa nas funcións declaradas usando a nova sintaxe). Por exemplo, amosarase un aviso para a función: use v5.36; sub f ($x, $y = 123) { diga "O primeiro argumento é $_[0]"; }
  • Estabilizado e dispoñible ao especificar o pragma "usar v5.36", o operador infixo "isa" para comprobar se un obxecto é unha instancia da clase especificada ou unha clase derivada dela. Por exemplo: if( $obj isa Package::Name ) { … }
  • Ao especificar o pragma "usar v5.36", o procesamento de avisos está habilitado (o modo "usar avisos" está activado).
  • Ao especificar o pragma "usar v5.36", o soporte para a notación indirecta para chamar a obxectos ("función indirecta") está desactivado - un xeito obsoleto de chamar a obxectos, no que se usa un espazo en lugar de "->" ("método $ obxecto @param" en lugar de "$obxecto-> $método(@param)"). Por exemplo, en lugar de "meu $cgi = novo CGI" cómpre usar "meu $cgi = CGI->novo".
  • Ao especificar o pragma "usar v5.36", o soporte para emular matrices multidimensionais e hash no estilo Perl 4 ("función multidimensional") está desactivado, permitindo que a indicación de varias claves se traduza nunha matriz intermedia (por exemplo, " $hash{1, 2}") converteuse en "$hash{join($;, 1, 2)}").
  • Ao especificar o pragma "usar v5.36", o soporte para o mecanismo de ramificación experimental ("interruptor de función"), similar ás instrucións switch e case, está desactivado (Perl usa as palabras clave dadas e cando). Para usar esta función, a partir de Perl 5.36, debes especificar explícitamente "utilizar función "cambiar"', e se especificas "utilizar versión", xa non se activará automaticamente.
  • A compatibilidade con clases de caracteres adicionais entre corchetes dentro de expresións regulares estabilizouse e está dispoñible de forma predeterminada. A función permítelle realizar coincidencias utilizando regras avanzadas para a intersección, exclusión e unión de conxuntos de caracteres. Por exemplo, "[AZ - W]" - caracteres da A á Z excluíndo a W.
  • O soporte para as operacións "(?", "( )", "{ }" e "[ ]" está parcialmente estabilizado e dispoñible por defecto; pode usar os símbolos "" "", "" "", etc. Por exemplo , "qr"pat "".
  • Está prohibido chamar á función de ordenación sen argumentos, o que agora producirá un erro. @a = ordenar @baleiro; # continuará @a = ordenar; # imprimirase un erro @a = sort(); # imprimirase un erro
  • Propúxose unha nova marca de liña de comandos "-g", que permite o modo de cargar todo o ficheiro no seu conxunto, en lugar de liña por liña. A acción da bandeira é semellante á indicación "-0777".
  • Actualizouse a compatibilidade coa especificación Unicode á versión 14.0.
  • Ofrece un manexo instantáneo de excepcións de punto flotante (SIGFPE) semellante a outras alarmas como SIGSEGV, o que lle permite vincular os seus propios controladores para SIGFPE a través de $SIG{FPE}, por exemplo, saíndo o número de liña onde ocorreu o problema.
  • Versións actualizadas dos módulos incluídos no paquete básico.
  • Engadidas optimizacións de rendemento. Proporcionouse a capacidade de almacenar chaves hash grandes de forma máis eficiente sen usar táboas de cadeas compartidas. Mellorouse significativamente o rendemento da creación de novos valores escalares, por exemplo, o seguinte código agora execútase un 30 % máis rápido: $str = "A" x 64; para (0..1_000_000) { @svs = split //, $str }
  • O código do intérprete comezou a usar algunhas das construcións definidas no estándar C99. A construción de Perl agora require un compilador que admita C99. Descontinuouse o soporte para a creación de versións antigas de MSVC++ (antes de VC12). Engadido soporte para a creación de Microsoft Visual Studio 2022 (MSVC++ 14.3).
  • O soporte para plataformas AT&T UWIN, DOS/DJGPP e Novell NetWare foi descontinuado.

Fonte: opennet.ru

Engadir un comentario