Perl 5.30 lanzado

Ayer, 23 de mayo, se lanzó Perl 5.30.0. La noticia fue anunciada por perl.perl5.porters Usenet como uno de los desarrolladores clave de Perl, Sawyer X.


En comparación con la versión estable anterior, 5.28.0, lanzada hace unos 11 meses, se modificaron unas 620,000 líneas de código, los cambios afectaron a 1300 archivos, 58 autores participaron en el desarrollo. Los cambios en el código fuente en sí (solo archivos .pm, .t, .c y .h) se estiman en ~ 510,000 líneas y 750 archivos.


El desarrollo de la próxima rama 5.31 está abierto. El próximo lanzamiento estable está programado para mayo de 2020.


Cambios clave


  • Las funciones de Perl API C sv_utf8_downgrade y sv_utf8_decode ya no se consideran experimentales.
  • Soporte experimental implementado para expresiones de búsqueda de longitud variable, como por ejemplo "(? <= Foo?)" Y "(? <! Ba {1,9} r)" (anteriormente condujo a un error)
  • El valor máximo del especificador de tamaño ("n") en los bloques "{m, n}" de las expresiones regulares se ha incrementado de 32767 a 65534.
  • Soporte para Unicode 12.1.
  • Se ha agregado un soporte limitado de comodines a las especificaciones de valor de propiedad Unicode (no sé cómo traducir correctamente). Por ejemplo, la expresión "qr! \ P {nv = / (? X) \ A [0-5] \ z /}!" Le permite seleccionar todos los caracteres Unicode que definen números del 0 al 5, incluidos los números tailandeses o bengalíes.
  • Se ha implementado el soporte para qr '\ N {name}' (los caracteres nombrados dentro de las expresiones regulares se limitan a comillas simples; anteriormente, tal expresión regular provocó un error).
  • Ahora puede compilar Perl utilizando solo operaciones seguras para subprocesos con configuraciones regionales (-Accflags = '- DUSE_THREAD_SAFE_LOCALE').
  • La combinación de los indicadores "-Dv" (salida de depuración extendida) y "-Dr" (depuración de expresiones regulares) ahora lleva a la inclusión de todos los modos posibles de depuración de expresiones regulares.
  • Pack () agrega protección contra la devolución de secuencias Unicode no válidas.

Eliminación de funciones y cambios incompatibles:


  • Asignar un valor distinto de cero a la variable especial $ [ (índice del primer elemento de la matriz) ahora conduce a un error fatal.
  • Como separadores de líneas y patrones, ahora solo se permiten grafemas . (Los caracteres compuestos Unicode están prohibidos).
  • Algunas formas previamente obsoletas de usar el corchete izquierdo sin escape "{" en los patrones de expresiones regulares ahora están prohibidas.
  • Llamar a sysread (), syswrite (), send () o recv () mientras procesa el identificador: utf8 ahora es un error fatal.
  • Está prohibido usar "my" en declaraciones condicionales idénticamente falsas (por ejemplo, "my $ x if 0").
  • Se eliminó el soporte para la variable especial $ * (búsqueda multilínea). Las alternativas correctas son "/ s" y "/ m".
  • Se eliminó el soporte para la variable especial $ # (salida formateada de números).
  • El nombre de la función dump () ahora debe estar explícitamente calificado (CORE :: dump).
  • Se eliminó la función File :: Glob :: glob (debe usar File :: Glob :: bsd_glob).
  • Se planeó dejar de admitir el uso de macros en el código XS (bloques en C) que realizan operaciones con UTF-8, pero luego se decidió posponerlo a la versión 5.32.

Mejoras de rendimiento:


  • La traducción de UTF-8 a puntos de código (no sé cómo traducir) ahora se implementa como una máquina de estado, lo que también conduce a un mayor rendimiento; por ejemplo, ord ("\ x7fff") ahora requiere un 12% menos de instrucciones. La validación de secuencia de caracteres UTF-8 también se implementa como una máquina de estado y es más rápida.
  • Llamadas recursivas eliminadas de finalize_op ().
  • Se han realizado optimizaciones menores en el código para plegar caracteres idénticos y definir clases de caracteres en expresiones regulares.
  • Se han optimizado las conversiones de identificadores de tipo con signo a sin signo (IV a UV).
  • El algoritmo para convertir enteros en cadenas se acelera procesando dos dígitos en lugar de uno a la vez.
  • Mejorado por el análisis LGTM.
  • Código optimizado en los archivos regcomp.c, regcomp.h y regexec.c.
  • La coincidencia de expresiones regulares de la forma "qr / [^ a] /" se acelera significativamente para los casos en que "a" es un carácter ASCII (los casos no ASCII "a" también pueden mostrar un aumento en el rendimiento, pero bajo ciertas condiciones).

Source: https://habr.com/ru/post/453340/


All Articles