IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Le comité de pilotage de Perl annonce la version 5.36 du langage de programmation,
Elle apporte une amélioration des performances et de nouvelles fonctionnalités

Le , par Bruno

23PARTAGES

10  1 
Fin juillet 2019, un sondage sur Developpez.com a placé Objective-C et Perl comme les deux langages les plus susceptibles de disparaître dans les prochaines années. Pour sauver le langage, le comité de pilotage de Perl a rassemblé des propositions pour redonner au langage l'attrait qu'il avait auprès des utilisateurs. Aujourd’hui, le langage de programmation reste présent. Ces développeurs ont annoncé la version 5.36 du langage de programmation Perl.

Perl est un langage de programmation créé par Larry Wall en 1987. Sa syntaxe s’inspire du langage C avec la possibilité d’ajouter des expressions régulières directement dans le langage. Dès le départ, il est utilisé majoritairement comme un langage de scripts d’administration système sous UNIX. Mais avec le temps, de nombreuses fonctionnalités lui sont ajoutées ce qui lui confère les atouts d’un langage généraliste. Que ce soit pour écrire des scripts shell, des applications web, des clients lourds ou encore faire communiquer des modules de gros systèmes, il est possible d’utiliser le langage Perl.


Le paquet 5.36 active la fonctionnalité de signatures. Introduite dans la version 5.20.0 de Perl, et modifiée déjà plusieurs fois, la fonctionnalité de signatures de sous-routines n'est plus considérée comme expérimentale. Elle est maintenant considérée comme une fonctionnalité stable du langage et n'affiche plus d'avertissement.

Code : Sélectionner tout
1
2
3
4
5
use v5.36; 
 
sub add ($x, $y) { 
  return $x + $y; 
}

Malgré cela, certains éléments des sous-programmes de signatured restent expérimentaux ; voir ci-dessous:

Le paquetage 5.36 active la fonctionnalité isa. Introduit dans la version 5.32.0 de Perl, cet opérateur est resté inchangé depuis. L'opérateur est désormais considéré comme une fonctionnalité stable du langage.

Le paquetage 5.36 désactive également les fonctionnalités indirect et multidimensional. Celles-ci interdisent respectivement : l'utilisation d'appels de méthodes indirect (comme $x = new Class ;); l'utilisation d'une expression de liste comme clé de hachage pour simuler des tableaux multidimensionnels épars. Les détails de ces changements peuvent être trouvés dans la fonctionnalité, mais la version courte est : c'est un peu comme avoir plus de use strict activée, désactivant les fonctionnalités qui causent plus de problèmes qu'elles n'en valent la peine. De plus, use v5.36 activera également les avertissements comme use warnings. Enfin, avec cette version, la fonctionnalité experimental switch, présente dans tous les paquets de fonctionnalités depuis leur introduction dans la v5.10, a été retirée du paquet v5.36.

Les ensembles regex ne sont plus considérés comme expérimentaux

Avant cette version, la fonctionnalité des ensembles regex (officiellement nommée Extended Bracketed Character Classes) était considérée comme expérimentale. Introduite dans la version 5.18.0 de Perl, et modifiée déjà plusieurs fois, elle est maintenant considérée comme une fonctionnalité stable du langage et son utilisation n'entraîne plus d'avertissement.

Le lookbehind à longueur variable n'est plus considéré comme expérimental

Avant cette version, toute forme de lookbehind à longueur variable était considérée comme expérimentale. Avec cette version, le statut expérimental a été réduit pour ne couvrir que le lookbehind qui contient des parenthèses de capture. Ceci est dû au fait qu'il n'est pas clair si

"aaz"=~/(?=z)(?<=(a|aa))/

devrait correspondre et laisser $1 égal à "a" ou "aa". Actuellement, il correspond à l'alternative la plus longue possible, "aa". « Bien que nous soyons convaincus que la construction globale ne correspondra désormais que lorsqu'elle le doit, nous ne sommes pas sûrs de conserver le comportement actuel de "correspondance la plus longue’’ », déclarent les responsables de Perl.

Les valeurs booléennes

Les valeurs booléennes "true" et "false", auxquelles on accède souvent par des constructions telles que !!0 et !!1, et qui sont également retournées par de nombreuses fonctions et opérateurs de base, se souviennent désormais de leur nature booléenne, même lorsqu'elles sont assignées à des variables. La nouvelle fonction is_bool() de builtin peut vérifier si une valeur a une nature booléenne. Ceci sera probablement utile lors de l'interopérabilité avec d'autres langages ou lors de la sérialisation des types de données, entre autres.

Itération sur plusieurs valeurs à la fois (expérimental)

Il est maintenant possible d’itérer sur plusieurs valeurs à la fois en spécifiant une liste de lexiques entre parenthèses. Par exemple,
Code : Sélectionner tout
1
2
for my ($key, $value) (%hash) { ... } 
for my ($left, $right, $gripping) (@moties) { ... }

Avant la version 5.36 de perl, tenter de spécifier une liste après for my était une erreur de syntaxe. Cette fonctionnalité est actuellement expérimentale et provoquera un avertissement de la catégorie experimental::for_list.

Amélioration des performances

La prise en charge par le compilateur du stockage local des threads C11 est maintenant verifié et, lorsqu'il est disponible, il est utilisé comme « contexte implicite » pour les extensions XS faisant des appels d'API pour une construction Perl avec des threads. Cela nécessite moins d'appels de fonctions au niveau du C que le stockage spécifique aux threads POSIX. L'approche pthreads sera toujours tilisée si l'approche C11 n'est pas disponible. Perl peut maintenant être configuré pour ne plus allouer de clés pour les grands hachages à partir de la table de chaînes partagée. Le même type de données interne (PVHV) est utilisé pour tous les éléments suivants :

  • Tables de symboles ;
  • Objets (par défaut) ;
  • Tableaux associatifs.

La table de chaînes partagée a été ajoutée à l'origine pour améliorer les performances des hachages bénis utilisés comme objets, car chaque instance d'objet a les mêmes clés, et il est donc optimal de partager la mémoire entre elles. Cela a également du sens pour les tables de symboles, où les classes dérivées auront les mêmes clés (généralement des noms de méthodes), et les arbres OP construits pour les appels de méthodes peuvent également partager la mémoire. La table de chaînes partagée se comporte à peu près comme un cache pour les clés de hachage.

Mais pour les hachages réellement utilisés comme des tableaux associatifs, mappant des clés à des valeurs, les clés ne sont généralement pas réutilisées dans d'autres hachages. Par exemple, les hachages "vus" ont pour clé des identifiants (ou des adresses) d'objets et, logiquement, ces clés ne seront pas répétées dans d'autres hachages.

Le stockage de ces clés « utilisées une seule fois » dans la table de chaînes partagée augmente l'utilisation du CPU et de la RAM sans aucun gain. Pour ces clés, la table de chaînes partagée se comporte comme un cache avec un taux de réussite de 0 %. Le stockage de toutes les clés dans cette table augmente la taille totale de la table de chaînes partagée, ainsi que le nombre de fois où elle est redimensionnée au fur et à mesure de sa croissance.

Pire dans tout environnement qui a une mémoire « copy on write » pour les processus enfants (comme un serveur pré-forking), les pages de mémoire utilisées pour la table de chaîne partagée doivent rapidement être copiées lorsque le processus enfant manipule les hachages. Par conséquent, si la majeure partie de la table de chaînes partagée est telle que les clés ne sont utilisées qu'à un seul endroit, il n'y a pas d'avantage à la réutilisation dans l'interpréteur perl, mais un coût élevé dû à la multiplication des pages à copier par le système d'exploitation. L'interpréteur perl peut maintenant être configuré pour désactiver les clés de hachage partagées pour les hachages "importants" (qui ne sont ni des objets ni des tables de symboles).

Dans certains scénarios, la création de nouveaux scalaires est maintenant sensiblement plus rapide. Par exemple, le code suivant s'exécute maintenant environ 30 % plus rapidement :

Code : Sélectionner tout
1
2
3
4
$str = "A" x 64; 
for (0..1_000_000) { 
    @svs = split //, $str 
}

Délimiteurs non-ASCII pour les opérateurs de type quote (expérimental)

Perl n'autorise traditionnellement que quatre paires de délimiteurs de chaînes de caractères et de motifs : ( ) { } [ ] et < >, tous dans la gamme ASCII. Unicode offre des centaines de possibilités supplémentaires, et l'utilisation de cette fonctionnalité en permet beaucoup. Lorsqu'elle est activée, il est possible de dire qr" " par exemple, ou utiliser utf8 ; q𝄃string𝄂.

@_ est maintenant expérimental dans les subs de signatured

Même si les signatures de sous-routines sont maintenant stables, l'utilisation du tableau d'arguments hérités (@_) avec une sous-routine qui a une signature reste expérimentale, avec sa propre catégorie d'avertissement. Faire taire la catégorie d'avertissement experimental::signatures n'est pas suffisant pour l'écarter. Le nouvel avertissement est émis avec le nom de catégorie experimental::args_array_with_signatures.

Toute sous-routine qui possède une signature et qui tente d'utiliser le tableau d'arguments par défaut ou un élément de celui-ci (@_ ou $_[INDEX]), de manière explicite ou implicite (comme shift ou pop sans argument) provoquera un avertissement à la compilation :

Code : Sélectionner tout
1
2
3
4
5
use v5.36; 
 
sub f ($x, $y = 123) { 
  say "The first argument is $_[0]"; 
}

Use of @_ in array element with signatured subroutine is experimental
at file.pl line 4.


Le comportement du code qui tente de faire cela n'est plus spécifié, et peut être sujet à changement dans une version future.

Source : Perl

Et vous ?

Quelle est votre expérience du langage Perl ?

Que pensez-vous des améliorations apportées par la version 5.36 de Perl ?

Voir aussi :

Les attaques par amplification DNS continuent d'augmenter jusqu'à 4788 % par rapport au troisième trimestre 2018, selon un nouveau rapport de Nexusguard

Des chercheurs font revivre l'empoisonnement du cache DNS, une attaque Internet de 2008, en se servant du protocole ICMP. Cette technique a pour but ultime d'usurper l'identité d'un site

Microsoft apporte aux Insiders une préversion du protocole controversé DNS-over-HTTPS sur Windows 10, dont l'objectif est de mieux protéger la vie privée des utilisateurs

Microsoft corrige la vulnérabilité cryptographique critique, découverte par la NSA dans Microsoft Windows

Une erreur dans cette actualité ? Signalez-nous-la !