Lenguaje de programación Perl 5.36.0 disponible

Después de un año de desarrollo, se ha publicado el lanzamiento de una nueva rama estable del lenguaje de programación Perl: la 5.36. Durante la preparación de la nueva versión, se cambiaron alrededor de 250 mil líneas de código, los cambios afectaron a 2000 archivos y en el desarrollo participaron 82 desarrolladores.

La rama 5.36 fue liberada de acuerdo con el cronograma de desarrollo fijo aprobado hace nueve años, lo que implica la liberación de nuevas ramas estables una vez al año y lanzamientos correctivos cada tres meses. En aproximadamente un mes, está previsto lanzar la primera versión correctiva de Perl 5.36.1, que corregirá los errores más importantes identificados durante la implementación de Perl 5.36.0. Junto con el lanzamiento de Perl 5.36, se suspendió el soporte para la rama 5.32, para la cual es posible que se publiquen actualizaciones futuras sólo si se identifican problemas de seguridad críticos. También ha comenzado el proceso de desarrollo de la rama experimental 5.37, a partir de la cual se formará una versión estable de Perl 2023 en mayo o junio de 5.38, a menos que se decida cambiar a la numeración 7.x.

Cambios clave:

  • El soporte para firmas de funciones se ha estabilizado y ahora está disponible al especificar el pragma "usar v5.36", lo que le permite definir explícitamente la lista de variables utilizadas en la función y automatizar las operaciones de verificación y asignación de valores de una matriz de parámetros entrantes. Por ejemplo, código usado anteriormente: sub foo { die "Demasiados argumentos para la subrutina" a menos que @_ >= 2; die "Muy pocos argumentos para la subrutina" a menos que @_ <= 2; mi($izquierda, $derecha) = @_; devolver $izquierda + $derecha; }

    cuando se utilizan firmas, se puede reemplazar por:

    sub foo ($izquierda, $derecha) { return $izquierda + $derecha; }

    Si llama a foo con más de dos argumentos, el intérprete arrojará un error. La lista también admite una variable especial “$”, que le permite ignorar algunos de los argumentos, por ejemplo, “sub foo ($left, $, $right)” le permitirá copiar solo el primer y tercer argumento en variables. , mientras que se deben pasar exactamente tres al argumento de la función.

    La sintaxis de la firma también le permite especificar argumentos opcionales y especificar valores predeterminados si falta un argumento. Por ejemplo, al especificar "sub foo ($left, $right = 0)", el segundo argumento se vuelve opcional y, si está ausente, se pasa el valor 0. En la operación de asignación, puede especificar expresiones arbitrarias, incluido el uso de otras variables. de la lista o variables globales. Especificar un hash o una matriz en lugar de una variable (por ejemplo, "sub foo ($left, @right)") permitirá pasar uno o más argumentos.

  • En las funciones declaradas mediante firmas, la compatibilidad con la asignación de parámetros opcional de la matriz "@_" se declara experimental y generará una advertencia (la advertencia solo se emite si se usa @_ en funciones declaradas con la nueva sintaxis). Por ejemplo, se mostrará una advertencia para la función: use v5.36; sub f ($x, $y = 123) { say "El primer argumento es $_[0]"; }
  • Estabilizado y disponible al especificar el pragma "usar v5.36", el operador infijo "isa" para verificar si un objeto es una instancia de la clase especificada o una clase derivada de ella. Por ejemplo: if( $obj isa Paquete::Nombre ) { … }
  • Al especificar el pragma "usar v5.36", se habilita el procesamiento de advertencias (se activa el modo "usar advertencias").
  • Al especificar el pragma "usar v5.36", se deshabilita la compatibilidad con la notación indirecta para llamar a objetos ("característica indirecta"), una forma obsoleta de llamar a objetos, en la que se usa un espacio en lugar de "->" ("método $ objeto @param” en lugar de “$objeto-> $método(@param)"). Por ejemplo, en lugar de “mi $cgi = nuevo CGI” necesitas usar “mi $cgi = CGI->nuevo”.
  • Al especificar el pragma "usar v5.36", se deshabilita la compatibilidad con la emulación de matrices multidimensionales y hashes en el estilo Perl 4 ("función multidimensional"), lo que permite traducir varias claves a una matriz intermedia (por ejemplo, " $hash{1, 2}”) se convirtió en "$hash{join($;, 1, 2)}").
  • Al especificar el pragma "usar v5.36", se deshabilita la compatibilidad con el mecanismo de ramificación experimental ("cambio de característica"), similar a las declaraciones de cambio y caso (Perl usa las palabras clave dadas y cuando). Para utilizar esta función, a partir de Perl 5.36, debe especificar explícitamente "usar función "cambiar"" y, si especifica "usar versión", ya no se habilitará automáticamente.
  • La compatibilidad con clases de caracteres adicionales entre corchetes dentro de expresiones regulares se ha estabilizado y está disponible de forma predeterminada. La función le permite realizar coincidencias utilizando reglas avanzadas para la intersección, exclusión y unión de conjuntos de caracteres. Por ejemplo, '[AZ - W]': caracteres de la A a la Z excluyendo W.
  • El soporte para las operaciones "(?", "( )", "{ }" y "[ ]" está parcialmente estabilizado y disponible de forma predeterminada; puede utilizar los símbolos "" "", "" "", etc. Por ejemplo , "qr" palmadita "".
  • Está prohibido llamar a la función de clasificación sin argumentos, lo que ahora generará un error. @a = ordenar @empty; # continuará @a = ordenar; # se imprimirá un error @a = sort(); # se imprimirá un error
  • Se ha propuesto un nuevo indicador de línea de comando “-g”, que permite cargar el archivo completo como un todo, en lugar de línea por línea. La acción de la bandera es similar a la indicación “-0777”.
  • La compatibilidad con la especificación Unicode se actualizó a la versión 14.0.
  • Proporciona manejo instantáneo de excepciones de punto flotante (SIGFPE) similar a otras alarmas como SIGSEGV, lo que le permite vincular sus propios controladores para SIGFPE a través de $SIG{FPE}, por ejemplo, generando el número de línea donde ocurrió el problema.
  • Versiones actualizadas de los módulos incluidos en el paquete básico.
  • Se agregaron optimizaciones de rendimiento. Se ha proporcionado la capacidad de almacenar claves hash grandes de manera más eficiente sin utilizar tablas de cadenas compartidas. El rendimiento de la creación de nuevos valores escalares se ha mejorado significativamente; por ejemplo, el siguiente código ahora se ejecuta un 30 % más rápido: $str = "A" x 64; para (0..1_000_000) { @svs = dividir //, $cadena }
  • El código del intérprete comenzó a utilizar algunas de las construcciones definidas en el estándar C99. La creación de Perl ahora requiere un compilador que admita C99. Se ha suspendido la compatibilidad con la compilación de versiones anteriores de MSVC++ (anteriores a VC12). Se agregó soporte para compilar en Microsoft Visual Studio 2022 (MSVC++ 14.3).
  • Se ha interrumpido el soporte para las plataformas AT&T UWIN, DOS/DJGPP y Novell NetWare.

Fuente: opennet.ru

Añadir un comentario