Perl - Perl v5.36

 
Vista:
Imágen de perfil de Joaquin
Val: 56
Oro
Ha mantenido su posición en Perl (en relación al último mes)
Gráfica de Perl

Perl v5.36

Publicado por Joaquin (31 intervenciones) el 04/08/2023 00:16:14
Estos son los cambios que trae la versión v5.36, del 28 de mayo de 2022.

Perl 5.36.0 representa aproximadamente 12 meses de desarrollo desde Perl 5.34.0 y contiene aproximadamente 250 000 líneas modificadas a lo largo de 2000 archivos por parte de 82 autores.

Las novedades que trae (entre otras):

Cambios principales
[indent][*] use v5.36
Como siempre, use v5.36 activa el conjunto de características para esta versión de Perl.

Se activa la característica signatures. Presentada en Perl v5.20.0 y modificada en varias ocasiones desde entonces, la característica de firmas en las subrutinas ya no se considera experimental. Se considera que ya es estable y ya no imprime una advertencia.
1
2
3
4
use v5.36;
sub add ($x, $y) {
  return $x + $y;
}
Ciertos elementos de las subrutinas con firmas siguen siendo experimentales.

Se activa la característica isa. Presentada en Perl v5.32.0, este operador no ha cambiado desde entonces. El operador se considera que es una característica estable. Para más detalles consultar "Class Instance Operator" en perlop.

Se desactivan las características indirect y multidimensional. Prohibirán, respectivamente: el uso de llamadas "indirectas" a métodos (como $x = new Class;); el uso de una expresión de lista como una clave de hash para simular arrays multidimensionales. Lo específico de estos cambios se pueden encontrar en feature, pero el resumen es: esto es un poco como tener activado un modo aún más estricto, desactivando características que causan más problemas que lo que ofrecen.

Además, use v5.36 también activará las advertencias, como si hubiera escrito use warnings.

Finalmente, con esta publicación, la característica experimental switch, presente en cada paquete de características desde que se presentó en v5.10, se ha eliminado del paquete de características de v5.36. Si quieres usarla (en contra de nuestro consejo), tendrá que activarlo explícitamente.

[*] opción de línea de comandos -g

La opción de línea de comandos -g es un simple alias de -0777.

Más información en "-g" en perlrun.

[*] Unicode 14.0

[*] Los conjuntos en regex ya no se consideran experimentales

Antes de esta publicación, la característica de conjuntos en las regex (oficialmente llamada "Extended Bracketed Character Classes") se consideraba experimental. Presentada en Perl v5.18.0, y modificada en múltiples ocasiones desde entonces, ya se considera que es una característica estable del lenguaje y su uso ya no imprime una advertencia. Vea "Extended Bracketed Character Classes" en perlrecharclass.
1
/(?[ ( \p{Thai} + \p{Lao} ) & \p{Digit} ])/

[*] Ya no se considera experimental los vistazos previos, de longitud variable

Antes de esta publicación, cualquier forma de vistazo anterior de longitud variable se consideraba experimental. Con esta publicación su estatus de experimental se reduce a sólo los vistazos que contiene paréntesis de captura. Esto es porque no está claro si
1
"aaz"=~/(?=z)(?<=(a|aa))/
debe coincidir y dejar $1 igual a "a" o "aa". Actualmente coincidirá con la alternativa más larga, "aa". Mientras que confiamos que la construcción coincidirá sólo cuando deba, no confiamos en que conserve el comportamiento de la "coincidencia más larga".

[*] SIGFPE ya no se difiere

Las excepciones de punto flotante ahora se gestionan inmediatamente, de la misma forma que otras señales de "fallo", tales como SIGSEGV. Esto significa que uno tiene al menos una oportunidad de capturar tal señal con un manejador $SIG{FPE}, por ejemplo die puede reportar la línea en que perl lo disparó.

[*] Seguimiento estable de los booleanos

Los valores booleanos "true" y "false", a menudo accesibles con construcciones como !!0 y !!1, así como devueltos por muchas funciones y operadores principales, ahora recuerdan su naturaleza booleana incluso en asignaciones a variables. La nueva función is_bool() en builtin puede comprobar si un valor tiene una naturaleza booleana.

Esto es muy posible que sea útil cuando se opere con otros lenguajes o serialización de datos/tipos, aparte de otros sitios.

[*] iterar sobre valores múltiples al mismo tiempo (experimental)

Ahora puede iterar sobre valores múltiples al mismo tiempo especificando una lista de léxicas en paréntesis. Por ejemplo,
1
2
for my ($key, $value) (%hash) { ... }
for my ($left, $right, $gripping) (@moties) { ... }
Antes de Perl v5.36, intentar especificar una lista después de un for my era un error de sintaxis.

Esta característica actualmente es experimental y provocará una advertencia de categoría experimental::for_list. Para más detalles vea "Compound Statements" en perlsyn. Vea también "builtin::indexed".

[*] Funciones builtin (experimental)

Se añade un nuevo módulo principal: builtin, que proporciona documentación para las nuevas y siempre presentes funciones que están incluidas en el intérprete.
1
say "Reference type of arrays is ", builtin::reftype([]);
También proporciona un mecanismo de importación léxico para proveer de versiones de nombres más cortos para estas funciones.
1
2
use builtin 'reftype';
say "Reference type of arrays is ", reftype([]);
El mecanismo de la función builtin y las funciones que proporciona son todos experimentales. Esperamos que el propio builtin cesará de ser experimental en un futuro cercano, pero las funciones individuales se volverán estables poco a poco. Otras funciones se añadirán a builtin más adelante.

Para más detalles, vea builtin, pero aquí hay un resumen de las funciones incluidas en v5.36:
[indent][*] builtin::trim
Esta función trata a su argumento como una cadena, devolviendo el resultado de eliminar todo el espacio en blanco en su comienzo y en su final.

[*] builtin::indexed
Esta función devuelve una lista dos veces más grande que su lista de argumentos, donde cada elemento se precede con el índice dentro de esa lista. Esto se especialmente útil para usarlo con la nueva sintaxis de foreach con múltiples variables iteradoras, para iterar sobre un array o list, mientras que también se sigue con el índice a cada elemento:
1
2
3
4
5
use builtin 'indexed';
 
foreach my ($index, $val) (indexed @array) {
    ...
}

[*] builtin::true, builtin::false, builtin::is_bool
true y false devuelven los valores booleanos verdadero y falso. Perl sigue siendo perl, y no tiene un tipo estricto para booleanos, pero de estos valores se sabrá que se crearon para serlo. is_bool le dirá si un valor se sabe que fue creado como booleano.

[*] builtin::weaken, builtin::unweaken, builtin::is_weak
Estas funciones harán, respectivamente: debilitar una referencia; fortaleces una referencia; y comprobar si una referencia es débil. (Una referencia débil no se tiene en cuenta para los propósitos de recolección de basura. Vea perlref). Estas funciones pueden tomar el lugar de rutinas similares de Scalar::Util.

[*] builtin::blessed, builtin::refaddr, builtin::reftype
Estas funciones proporcionan más datos sobre referencias (¡o no referencias, realmente!) y pueden tomar el lugar de rutinas similares en Scalar::Util.

[*] builtin::ceil, builtin::floor
ceil devuelve el menor entero que sea igual o superior a su argumento. floor devuelve el mayor entero que sea menor o igual a su argumento. Estas pueden tomar el lugar de rutinas similares encontradas en POSIX.

[/indent]

[*] Bloques defer (experimental)
Esta publicación añade soporte para bloques defer (diferido), que son bloques de código prefijados con el modificador defer. Proporcionan una sección de código que se ejecutará al final, durante el ámbito de salida.

En resumen, cuando se llega a un bloque defer en tiempo de ejecución, su cuerpo se pone aparte para ejecutarse cuando el ámbito que lo engloba termina.

Bloques defer se pueden usar para tomar el lugar de objetos "guardián de ámbito", donde un objeto pasa un bloque de código para ejecutarse por parte del destructor.

Para más información, vea "defer blocks" en perlsyn.

[*] try/catch ahora puede tener un bloque finally (experimental)

La sintaxis experimental try/catch se ha ampliado para soportar un tercer bloque opcional precedido por la palabra clave finally.
1
2
3
4
5
6
7
8
9
10
try {
    attempt();
    print "Success\n";
}
catch ($e) {
    print "Failure\n";
}
finally {
    print "This happens regardless\n";
}
Esto proporciona código que se ejecuta al final de la construcción try/catch, incluso si se abortó por una excepción o palabra clave de control de flujo. Son similares a los bloques defer.

Para más información, vea "Try Catch Exception Handling" en perlsyn.

[*] Delimitadores no-ASCII para operadores entrecomilladores (experimental)

Perl ha permitido, tradicionalmente, sólo cuatro pares de delimitadores de cadenas/patrones: ( ) { } [ ] y < >, todos en el rango del ASCII. Unicode tiene cientos de posibilidades más, y usando esta característica activa muchos de ellos. Vea "The 'extra_paired_delimiters' feature" en feature para más detalles.

[*] @_ es ahora experimental en firmas de subrutinas
Aunque las firmas de subrutinas ya son estables, el uso del array de argumentos por defecto @_ con una subrutina que tiene una firma, sigue siendo experimental, con su propia categoría de advertencias. Silencias esa categoría experimental::signatures no es suficiente para deshacerse de ella. La nueva advertencia se emite con el nombre de categoría experimental::args_array_with_signatures.

Cualquier subrutina que tenga una firma e intente hacer uso del array de argumentos por defecto, o un elemento de él (@_ o $_[ÍNDICE]), ni explícitamente ni implícitamente (tal como con un shift o pop sin argumentos) provocará una advertencia en tiempo de compilación:
1
2
3
4
use v5.36;
sub f ($x, $y = 123) {
  say "The first argument is $_[0]";
}
[text]Use of @_ in array element with signatured subroutine is experimental
at file.pl line 4.[/text]
Ya no está especificado el comportamiento del código que intenta hacer esto, y puede estar sujeto a cambios en futuras versiones.

[/indent]

Cambios incompatibles

Un sort vacío ahora es un error en tiempo de compilación.
1
2
3
@a = sort @empty; # no afectado
@a = sort;        # ahora es error en tiempo de compilación
@a = sort ();     # también es un error en tiempo de compilación
Un sort sin nada era una forma muy fea de crear una lista vacía; ahora rompe en tiempo de compilación. Este cambio pretende liberar algo del espacio de sintaxis para futuras mejoras a sort.

Obsolescencias
[indent]use VERSION (con VERSION inferior a 5.11) después de un use v5.11 (rebajar de versión), ahora es obsoleto. Ejemplo:
1
2
3
4
use v5.14;
say "say está permitido";
use v5.8;   # genera una advertencia
print "Debemos usar print\n";

Plataformas obsoletas

[indent]AT&T UWIN
DOS/DJGPP
NetWare[/indent]

Plataformas actualizadas

[indent]z/OS[/indent]
[/indent]
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder