Langage de programmation Perl 5.36.0 disponible

Après un an de développement, la sortie d'une nouvelle branche stable du langage de programmation Perl - 5.36 - a été publiée. Lors de la préparation de la nouvelle version, environ 250 2000 lignes de code ont été modifiées, les modifications ont affecté 82 XNUMX fichiers et XNUMX développeurs ont participé au développement.

La branche 5.36 a été publiée conformément au calendrier de développement fixe approuvé il y a neuf ans, ce qui implique la sortie de nouvelles branches stables une fois par an et des versions correctives tous les trois mois. Dans environ un mois, il est prévu de publier la première version corrective de Perl 5.36.1, qui corrigera les erreurs les plus importantes identifiées lors de la mise en œuvre de Perl 5.36.0. Parallèlement à la sortie de Perl 5.36, la prise en charge de la branche 5.32 a été interrompue, pour laquelle de futures mises à jour ne pourront être publiées que si des problèmes de sécurité critiques sont identifiés. Le processus de développement de la branche expérimentale 5.37 a également commencé, sur la base de laquelle une version stable de Perl 2023 sera formée en mai ou juin 5.38, à moins qu'une décision ne soit prise de passer à la numérotation 7.x.

Changements clés :

  • La prise en charge des signatures de fonction a été stabilisée et est désormais disponible lors de la spécification du pragma « utiliser v5.36 », permettant de définir explicitement la liste des variables utilisées dans la fonction et d'automatiser les opérations de vérification et d'attribution de valeurs à partir d'un tableau de paramètres entrants. Par exemple, le code précédemment utilisé : sub foo { die "Trop d'arguments pour le sous-programme" sauf si @_ >= 2; die "Trop peu d'arguments pour le sous-programme" sauf si @_ <= 2; mon($gauche, $droite) = @_; retourner $gauche + $droite ; }

    lors de l'utilisation de signatures, il peut être remplacé par :

    sub foo ($gauche, $droite) { return $gauche + $droite ; }

    Si vous appelez foo avec plus de deux arguments, l'interpréteur générera une erreur. La liste prend également en charge une variable spéciale "$", qui vous permet d'ignorer certains arguments, par exemple, "sub foo ($left, $, $right)" vous permettra de copier uniquement les premier et troisième arguments dans des variables. , alors qu'exactement trois doivent être transmis à l'argument de la fonction.

    La syntaxe de signature vous permet également de spécifier des arguments facultatifs et de spécifier des valeurs par défaut si un argument est manquant. Par exemple, en spécifiant "sub foo ($left, $right = 0)", le deuxième argument devient facultatif et s'il est absent, la valeur 0 est transmise. Dans l'opération d'affectation, vous pouvez spécifier des expressions arbitraires, notamment en utilisant d'autres variables à partir de la liste ou des variables globales. Spécifier un hachage ou un tableau au lieu d'une variable (par exemple, "sub foo ($left, @right)") permettra de transmettre un ou plusieurs arguments.

  • Dans les fonctions déclarées à l'aide de signatures, la prise en charge de l'affectation de paramètres optionnels à partir du tableau "@_" est déclarée expérimentale et entraînera un avertissement (l'avertissement n'est émis que si @_ est utilisé dans les fonctions déclarées à l'aide de la nouvelle syntaxe). Par exemple, un avertissement s'affichera pour la fonction : utiliser v5.36 ; sub f ($x, $y = 123) { say "Le premier argument est $_[0]" ; }
  • Stabilisé et disponible lors de la spécification du pragma "use v5.36", l'opérateur infixe "isa" pour vérifier si un objet est une instance de la classe spécifiée ou une classe dérivée de celle-ci. Par exemple : if( $obj isa Package::Name ) { … }
  • Lors de la spécification du pragma « utiliser v5.36 », le traitement des avertissements est activé (le mode « utiliser les avertissements » est activé).
  • Lors de la spécification du pragma "use v5.36", la prise en charge de la notation indirecte pour l'appel d'objets ("feature indirect") est désactivée - une manière obsolète d'appeler des objets, dans laquelle un espace est utilisé au lieu de "->" ("méthode $ object @param" au lieu de "$object-> $method(@param)"). Par exemple, au lieu de « my $cgi = new CGI », vous devez utiliser « my $cgi = CGI->new ».
  • Lors de la spécification du pragma « utiliser v5.36 », la prise en charge de l'émulation de tableaux multidimensionnels et de hachages dans le style Perl 4 (« fonctionnalité multidimensionnelle ») est désactivée, permettant à l'indication de plusieurs clés d'être traduites dans un tableau intermédiaire (par exemple, « $hash{1, 2}") a été converti en "$hash{join($;, 1, 2)}").
  • Lors de la spécification du pragma « use v5.36 », la prise en charge du mécanisme de branchement expérimental (« feature switch »), similaire aux instructions switch et case, est désactivée (Perl utilise les mots-clés donnés et when). Pour utiliser cette fonctionnalité, à partir de Perl 5.36, vous devez spécifier explicitement « utiliser la fonctionnalité « switch » », et si vous spécifiez « utiliser la version », elle ne sera plus automatiquement activée.
  • La prise en charge de classes de caractères supplémentaires entre crochets dans les expressions régulières a été stabilisée et est disponible par défaut. La fonctionnalité vous permet d'effectuer des correspondances à l'aide de règles avancées pour l'intersection, l'exclusion et l'union d'ensembles de caractères. Par exemple, « [AZ - W] » : caractères de A à Z à l'exclusion de W.
  • Le support des opérations "(?", "( )", "{ }" et "[ ]" est partiellement stabilisé et disponible par défaut ; vous pouvez utiliser les symboles "" "", "" "", etc. Par exemple , "qr"pat "".
  • L'appel de la fonction de tri sans arguments est interdit, ce qui entraînera désormais une erreur. @a = trier @vide ; # continuera @a = sort; # une erreur sera affichée @a = sort(); # une erreur sera imprimée
  • Un nouvel indicateur de ligne de commande « -g » a été proposé, qui permet le mode de chargement du fichier entier dans son ensemble, plutôt que ligne par ligne. L'action du drapeau est similaire à l'indication « -0777 ».
  • La prise en charge de la spécification Unicode a été mise à jour vers la version 14.0.
  • Fournit une gestion instantanée des exceptions à virgule flottante (SIGFPE) similaire à d'autres alarmes telles que SIGSEGV, vous permettant de lier vos propres gestionnaires pour SIGFPE via $SIG{FPE}, par exemple en affichant le numéro de ligne où le problème s'est produit.
  • Versions mises à jour des modules inclus dans le package de base.
  • Ajout d'optimisations de performances. La possibilité de stocker plus efficacement de grandes clés de hachage sans utiliser de tables de chaînes partagées a été fournie. Les performances de création de nouvelles valeurs scalaires ont été considérablement améliorées, par exemple le code suivant s'exécute désormais 30 % plus rapidement : $str = "A" x 64 ; pour (0..1_000_000) { @svs = split //, $str }
  • Le code de l'interpréteur a commencé à utiliser certaines des constructions définies dans la norme C99. Construire Perl nécessite désormais un compilateur prenant en charge C99. La prise en charge de la construction dans les anciennes versions de MSVC++ (pré-VC12) a été interrompue. Ajout de la prise en charge de la création dans Microsoft Visual Studio 2022 (MSVC++ 14.3).
  • La prise en charge des plates-formes AT&T UWIN, DOS/DJGPP et Novell NetWare a été interrompue.

Source: opennet.ru

Ajouter un commentaire