Hier, 23 mai, Perl 5.30.0 est sorti. La nouvelle a été annoncée par perl.perl5.porters Usenet comme l'un des principaux développeurs de Perl, Sawyer X.
Par rapport à la version stable précédente, 5.28.0, publiée il y a environ 11 mois, environ 620 000 lignes de code ont été modifiées, les modifications ont affecté 1 300 fichiers, 58 auteurs ont participé au développement. Les modifications apportées au code source lui-même (uniquement les fichiers .pm, .t, .c et .h) sont estimées à ~ 510 000 lignes et 750 fichiers.
Le développement de la prochaine branche 5.31 est ouvert. La prochaine version stable est prévue pour mai 2020.
Changements clés:
- Les fonctions Perl API C sv_utf8_downgrade et sv_utf8_decode ne sont plus considérées comme expérimentales.
- Implémentation d'un support expérimental pour les expressions lookbehind de longueur variable, comme par exemple "(? <= Foo?)" Et "(? <! Ba {1,9} r)" (précédemment conduit à une erreur)
- La valeur maximale du spécificateur de taille ("n") dans les blocs "{m, n}" d'expressions régulières a été augmentée de 32 767 à 65 534.
- Prise en charge d'Unicode 12.1.
- Une prise en charge limitée des caractères génériques a été ajoutée aux spécifications de valeur de la propriété Unicode (je ne sais pas comment traduire correctement). Par exemple, l'expression "qr! \ P {nv = / (? X) \ A [0-5] \ z /}!" Vous permet de sélectionner tous les caractères Unicode qui définissent des nombres de 0 à 5, y compris les chiffres thaï ou bengali.
- La prise en charge de qr '\ N {nom}' a été implémentée (les caractères nommés dans les expressions régulières sont limités à des guillemets simples; une telle expression rationnelle antérieure a conduit à une erreur).
- Vous pouvez maintenant compiler Perl en utilisant uniquement des opérations thread-safe avec des locales (-Accflags = '- DUSE_THREAD_SAFE_LOCALE').
- La combinaison des drapeaux «-Dv» (sortie de débogage étendue) et «-Dr» (débogage d'expressions régulières) conduit désormais à l'inclusion de tous les modes de débogage possibles des expressions régulières.
- Pack () ajoute une protection contre le retour de séquences Unicode invalides.
Suppression de fonctionnalités et modifications incompatibles:
- L'affectation d'une valeur non nulle à la variable spéciale $ [ (index du premier élément du tableau) entraîne désormais une erreur fatale.
- En tant que séparateurs de lignes et de motifs, seuls les graphèmes sont désormais autorisés. (Les caractères composés Unicode sont interdits).
- Certaines façons auparavant obsolètes d'utiliser le crochet gauche non échappé «{» dans les modèles d'expression régulière sont désormais interdites.
- Appeler sysread (), syswrite (), send () ou recv () pendant le traitement du handle: utf8 est maintenant une erreur fatale.
- Il est interdit d'utiliser "my" dans des instructions conditionnelles identiques fausses (par exemple, "my $ x if 0").
- Suppression de la prise en charge de la variable spéciale $ * (recherche sur plusieurs lignes). Les alternatives correctes sont "/ s" et "/ m".
- Suppression de la prise en charge de la variable spéciale $ # (sortie formatée de nombres).
- Le nom de la fonction dump () doit maintenant être explicitement qualifié (CORE :: dump).
- Suppression de la fonction File :: Glob :: glob (vous devez utiliser File :: Glob :: bsd_glob).
- Il était prévu d'arrêter de prendre en charge l'utilisation de macros qui effectuent des opérations avec UTF-8 en code XS (blocs C), mais il a ensuite été décidé de la reporter à la version 5.32.
Améliorations des performances:
- La traduction d'UTF-8 en points de code (je ne sais pas comment traduire) est maintenant implémentée comme une machine d'état, ce qui entraîne également une augmentation des performances - par exemple, ord ("\ x7fff") nécessite désormais 12% d'instructions en moins. La validation de séquence de caractères UTF-8 est également implémentée comme une machine d'état et est plus rapide.
- Appels récursifs supprimés de finalize_op ().
- Des optimisations mineures ont été apportées au code pour plier des caractères identiques et définir des classes de caractères dans les expressions régulières.
- Les conversions des identifiants de type signé en non signé (IV en UV) ont été optimisées.
- L'algorithme de conversion des entiers en chaînes est accéléré en traitant deux chiffres au lieu d'un à la fois.
- Amélioré par l'analyse LGTM.
- Code optimisé dans les fichiers regcomp.c, regcomp.h et regexec.c.
- La mise en correspondance d'expressions régulières de la forme «qr / [^ a] /» est considérablement accélérée pour les cas où «a» est un caractère ASCII (les cas «a» non ASCII peuvent également montrer une augmentation des performances, mais sous certaines conditions).